/*
* Copyright 2011 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.formbuilder.client.tasks;
import java.util.ArrayList;
import java.util.List;
import org.jbpm.formapi.client.CommonGlobals;
import org.jbpm.formapi.shared.api.FormRepresentation;
import org.jbpm.formbuilder.client.FormBuilderGlobals;
import org.jbpm.formbuilder.client.FormBuilderService;
import org.jbpm.formbuilder.client.bus.ui.UpdateFormViewEvent;
import org.jbpm.formbuilder.client.messages.I18NConstants;
import org.jbpm.formbuilder.shared.task.TaskPropertyRef;
import org.jbpm.formbuilder.shared.task.TaskRef;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
public class QuickFormPanel extends PopupPanel {
private final I18NConstants i18n = FormBuilderGlobals.getInstance().getI18n();
private final EventBus bus = CommonGlobals.getInstance().getEventBus();
private final FormBuilderService server = FormBuilderGlobals.getInstance().getService();
private final Button okButton = new Button(i18n.ConfirmButton());
private final List<TaskPropertyRef> selectedInputs = new ArrayList<TaskPropertyRef>();
private final List<TaskPropertyRef> selectedOutputs = new ArrayList<TaskPropertyRef>();
public QuickFormPanel(final TaskRow row) {
VerticalPanel vPanel = new VerticalPanel();
List<TaskPropertyRef> inputs = row.getIoRef().getInputs();
vPanel.add(new Label(i18n.QuickFormInputsToBeAdded()));
vPanel.add(toGrid(inputs, selectedInputs));
List<TaskPropertyRef> outputs = row.getIoRef().getOutputs();
vPanel.add(new Label(i18n.QuickFormOutputsToBeAdded()));
vPanel.add(toGrid(outputs, selectedOutputs));
Label warning = new Label(i18n.QuickFormWarning());
vPanel.add(warning);
HorizontalPanel buttons = new HorizontalPanel();
Button cancelButton = new Button(i18n.CancelButton());
cancelButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
hide();
}
});
okButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
TaskRef trimmedIo = new TaskRef();
trimmedIo.setPackageName(row.getIoRef().getPackageName());
trimmedIo.setProcessId(row.getIoRef().getProcessId());
trimmedIo.setProcessName(row.getIoRef().getProcessName());
trimmedIo.setTaskId(row.getIoRef().getTaskId());
trimmedIo.setInputs(new ArrayList<TaskPropertyRef>(getSelectedInputs()));
trimmedIo.setOutputs(new ArrayList<TaskPropertyRef>(getSelectedOutputs()));
FormRepresentation form = server.toBasicForm(trimmedIo);
bus.fireEvent(new UpdateFormViewEvent(form));
hide();
}
});
buttons.add(okButton);
buttons.add(cancelButton);
vPanel.add(buttons);
setSize("300px", "300px");
setWidget(vPanel);
}
private Grid toGrid(List<TaskPropertyRef> ioList, final List<TaskPropertyRef> selectedIos) {
Grid grid = new Grid(ioList == null ? 1 : ioList.size(), 2);
if (ioList != null) {
for (int index = 0; index < ioList.size(); index++) {
final TaskPropertyRef io = ioList.get(index);
CheckBox checkBox = new CheckBox();
checkBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> event) {
Boolean val = event.getValue();
if (val == null || val == false) {
if (selectedIos.contains(io)) {
selectedIos.remove(io);
}
} else {
if (!selectedIos.contains(io)) {
selectedIos.add(io);
}
}
}
});
checkBox.setValue(Boolean.TRUE);
selectedIos.add(io);
grid.setWidget(index, 0, checkBox);
grid.setWidget(index, 1, new Label(io.getName()));
}
}
return grid;
}
public HandlerRegistration addOkHandler(ClickHandler handler) {
return okButton.addClickHandler(handler);
}
public List<TaskPropertyRef> getSelectedInputs() {
return selectedInputs;
}
public List<TaskPropertyRef> getSelectedOutputs() {
return selectedOutputs;
}
}