package org.activiti.designer.property.ui;
/**
* @author Saeid Mirzaei
*/
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.activiti.bpmn.model.Message;
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 MessageEditor extends TableFieldEditor {
protected Composite parent;
public IDiagramEditor diagramEditor;
public Diagram diagram;
public MessageEditor(String key, Composite parent) {
super(key, "", new String[] {"Id", "Name"},
new int[] {200, 200}, parent);
this.parent = parent;
}
public void initialize(Collection<Message> messageList) {
removeTableItems();
if(messageList == null || messageList.size() == 0) return;
for (Message message : messageList) {
addTableItem(message);
}
}
@Override
protected String createList(String[][] items) {
return null;
}
@Override
protected String[][] parseString(String string) {
return null;
}
protected void addTableItem(Message message) {
if(table != null) {
TableItem tableItem = new TableItem(table, SWT.NONE);
tableItem.setText(0, message.getId());
tableItem.setText(1, message.getName());
}
}
@Override
protected String[] getNewInputObject() {
MessageDialog dialog = new MessageDialog(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) {
MessageDialog dialog = new MessageDialog(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();
saveMessages();
}
private void saveMessages() {
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<Message> newMessageList = new ArrayList<Message>();
for (TableItem item : getItems()) {
String id = item.getText(0);
String name = item.getText(1);
if(StringUtils.isNotEmpty(id) && StringUtils.isNotEmpty(name)) {
Message newMessage = new Message();
newMessage.setId(id);
newMessage.setName(name);
newMessageList.add(newMessage);
}
}
model.getBpmnModel().setMessages(newMessageList);
}
}, editingDomain, "Model Update");
}
}