package org.activiti.designer.property.ui;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.activiti.bpmn.model.Signal;
import org.activiti.designer.util.eclipse.ActivitiUiUtil;
import org.activiti.designer.util.editor.Bpmn2MemoryModel;
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.platform.IDiagramEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TableItem;
public class SignalEditor extends TableFieldEditor {
protected Composite parent;
public IDiagramEditor diagramEditor;
public Diagram diagram;
public SignalEditor(String key, Composite parent) {
super(key, "", new String[] {"Id", "Name"},
new int[] {200, 200}, parent);
this.parent = parent;
}
public void initialize(Collection<Signal> signalList) {
removeTableItems();
if(signalList == null || signalList.size() == 0) return;
for (Signal signal : signalList) {
addTableItem(signal);
}
}
@Override
protected String createList(String[][] items) {
return null;
}
@Override
protected String[][] parseString(String string) {
return null;
}
protected void addTableItem(Signal signal) {
if(table != null) {
TableItem tableItem = new TableItem(table, SWT.NONE);
tableItem.setText(0, signal.getId());
tableItem.setText(1, signal.getName());
}
}
@Override
protected String[] getNewInputObject() {
SignalDialog dialog = new SignalDialog(parent.getShell(), getItems());
dialog.open();
if(StringUtils.isNotEmpty(dialog.id) && StringUtils.isNotEmpty(dialog.name)) {
return new String[] { dialog.id, dialog.name};
} else {
return null;
}
}
@Override
protected String[] getChangedInputObject(TableItem item) {
SignalDialog dialog = new SignalDialog(parent.getShell(), getItems(),
item.getText(0), item.getText(1));
dialog.open();
if(StringUtils.isNotEmpty(dialog.id) && StringUtils.isNotEmpty(dialog.name)) {
return new String[] { dialog.id, dialog.name};
} else {
return null;
}
}
@Override
protected void removedItem(int index) {
// TODO Auto-generated method stub
}
@Override
protected void selectionChanged() {
super.selectionChanged();
saveSignals();
}
private void saveSignals() {
if(diagram == null) return;
final Bpmn2MemoryModel model = ModelHandler.getModel(EcoreUtil.getURI(diagram));
if (model == null) {
return;
}
TransactionalEditingDomain editingDomain = diagramEditor.getEditingDomain();
ActivitiUiUtil.runModelChange(new Runnable() {
public void run() {
List<Signal> newSignalList = new ArrayList<Signal>();
for (TableItem item : getItems()) {
String id = item.getText(0);
String name = item.getText(1);
if(StringUtils.isNotEmpty(id) && StringUtils.isNotEmpty(name)) {
Signal newSignal = new Signal();
newSignal.setId(id);
newSignal.setName(name);
newSignalList.add(newSignal);
}
}
model.getBpmnModel().setSignals(newSignalList);
}
}, editingDomain, "Model Update");
}
}