package org.activiti.designer.property.ui;
import java.util.ArrayList;
import java.util.List;
import org.activiti.bpmn.model.CallActivity;
import org.activiti.bpmn.model.IOParameter;
import org.activiti.designer.util.eclipse.ActivitiUiUtil;
import org.activiti.designer.util.editor.ModelHandler;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.platform.IDiagramEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TableItem;
public class IOParameterEditor extends TableFieldEditor {
protected Composite parent;
public PictogramElement pictogramElement;
public IDiagramEditor diagramEditor;
public Diagram diagram;
public boolean isInputParameters = false;
public IOParameterEditor(String key, Composite parent) {
super(key, "", new String[] {"Source", "Source expression", "Target", "Target expression"},
new int[] {150, 150, 150, 150}, parent);
this.parent = parent;
}
public void initialize(List<IOParameter> parameterList) {
removeTableItems();
if(parameterList == null || parameterList.size() == 0) return;
for (IOParameter parameter : parameterList) {
addTableItem(parameter);
}
}
@Override
protected String createList(String[][] items) {
return null;
}
@Override
protected String[][] parseString(String string) {
return null;
}
protected void addTableItem(IOParameter parameter) {
if(table != null) {
TableItem tableItem = new TableItem(table, SWT.NONE);
String source = parameter.getSource() != null ? parameter.getSource() : "";
tableItem.setText(0, source);
String sourceExpression = parameter.getSourceExpression() != null ? parameter.getSourceExpression() : "";
tableItem.setText(1, sourceExpression);
String target = parameter.getTarget() != null ? parameter.getTarget() : "";
tableItem.setText(2, target);
String targetExpression = parameter.getTargetExpression() != null ? parameter.getTargetExpression() : "";
tableItem.setText(3, targetExpression);
}
}
@Override
protected String[] getNewInputObject() {
IOParameterDialog dialog = new IOParameterDialog(parent.getShell(), getItems());
dialog.open();
if((StringUtils.isNotEmpty(dialog.source) || StringUtils.isNotEmpty(dialog.sourceExpression)) &&
(StringUtils.isNotEmpty(dialog.target) || StringUtils.isNotEmpty(dialog.targetExpression))) {
return new String[] { dialog.source, dialog.sourceExpression, dialog.target, dialog.targetExpression};
} else {
return null;
}
}
@Override
protected String[] getChangedInputObject(TableItem item) {
IOParameterDialog dialog = new IOParameterDialog(parent.getShell(), getItems(),
item.getText(0), item.getText(1), item.getText(2), item.getText(3));
dialog.open();
if((StringUtils.isNotEmpty(dialog.source) || StringUtils.isNotEmpty(dialog.sourceExpression)) &&
(StringUtils.isNotEmpty(dialog.target) || StringUtils.isNotEmpty(dialog.targetExpression))) {
return new String[] { dialog.source, dialog.sourceExpression, dialog.target, dialog.targetExpression};
} else {
return null;
}
}
@Override
protected void removedItem(int index) {
// TODO Auto-generated method stub
}
@Override
protected void selectionChanged() {
super.selectionChanged();
saveIOParameters();
}
private void saveIOParameters() {
if (pictogramElement != null) {
final Object bo = ModelHandler.getModel(EcoreUtil.getURI(diagram)).getFeatureProvider().getBusinessObjectForPictogramElement(pictogramElement);
if (bo == null) {
return;
}
TransactionalEditingDomain editingDomain = diagramEditor.getEditingDomain();
ActivitiUiUtil.runModelChange(new Runnable() {
public void run() {
List<IOParameter> newParameterList = new ArrayList<IOParameter>();
for (TableItem item : getItems()) {
String source = item.getText(0);
String sourceExpression = item.getText(1);
String target = item.getText(2);
String targetExpression = item.getText(3);
if((StringUtils.isNotEmpty(source) || StringUtils.isNotEmpty(sourceExpression)) &&
(StringUtils.isNotEmpty(target) || StringUtils.isNotEmpty(targetExpression))) {
IOParameter newParameter = new IOParameter();
newParameter.setSource(source);
newParameter.setSourceExpression(sourceExpression);
newParameter.setTarget(target);
newParameter.setTargetExpression(targetExpression);
newParameterList.add(newParameter);
}
}
if(isInputParameters == true) {
((CallActivity) bo).getInParameters().clear();
((CallActivity) bo).getInParameters().addAll(newParameterList);
} else {
((CallActivity) bo).getOutParameters().clear();
((CallActivity) bo).getOutParameters().addAll(newParameterList);
}
}
}, editingDomain, "Model Update");
}
}
}