/******************************************************************************* * Copyright (c) 2011, 2012 Red Hat, Inc. * All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.bpmn2.modeler.ui.property.events; import java.util.ArrayList; import java.util.List; import org.eclipse.bpmn2.CatchEvent; import org.eclipse.bpmn2.DataOutput; import org.eclipse.bpmn2.DataOutputAssociation; import org.eclipse.bpmn2.ItemAwareElement; import org.eclipse.bpmn2.OutputSet; import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultListComposite; import org.eclipse.bpmn2.modeler.core.merrimac.clad.ListCompositeColumnProvider; import org.eclipse.bpmn2.modeler.ui.property.tasks.IoParameterMappingColumn; import org.eclipse.bpmn2.modeler.ui.property.tasks.IoParameterNameColumn; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.swt.widgets.Composite; public class DataOutputsListComposite extends DefaultListComposite { CatchEvent catchEvent; public DataOutputsListComposite(Composite parent, CatchEvent catchEvent) { super(parent, DEFAULT_STYLE|EDIT_BUTTON); this.catchEvent = catchEvent; columnProvider = new ListCompositeColumnProvider(this); EStructuralFeature f; f = PACKAGE.getDataOutput_Name(); columnProvider.add(new IoParameterNameColumn(catchEvent,f)); f = PACKAGE.getCatchEvent_DataOutputAssociation(); columnProvider.add(new IoParameterMappingColumn(catchEvent,f)); } @Override protected EObject addListItem(EObject object, EStructuralFeature feature) { OutputSet outputSet = catchEvent.getOutputSet(); if (outputSet==null) { outputSet = createModelObject(OutputSet.class); catchEvent.setOutputSet(outputSet); } // generate a unique parameter name String base = "outParam"; //$NON-NLS-1$ int suffix = 1; String name = base + suffix; for (;;) { boolean found = false; for (DataOutput p : outputSet.getDataOutputRefs()) { if (name.equals(p.getName())) { found = true; break; } } if (!found) break; name = base + ++suffix; } DataOutput param = (DataOutput)super.addListItem(object, feature); // add the new parameter to the OutputSet param.setName(name); outputSet.getDataOutputRefs().add(param); // create a Data OutputAssociation DataOutputAssociation outputAssociation = createModelObject(DataOutputAssociation.class); catchEvent.getDataOutputAssociation().add(outputAssociation); outputAssociation.getSourceRef().clear(); outputAssociation.getSourceRef().add(param); return param; } @Override protected EObject editListItem(EObject object, EStructuralFeature feature) { return super.editListItem(object, feature); } @Override protected Object removeListItem(EObject object, EStructuralFeature feature, int index) { // remove parameter from outputSets EList<EObject> list = getItemList(); EObject item = list.get(index); OutputSet outputSet = catchEvent.getOutputSet(); if (outputSet.getDataOutputRefs().contains(item)) outputSet.getDataOutputRefs().remove(item); // remove Input or Output DataAssociations List<DataOutputAssociation> dataOutputAssociations = catchEvent.getDataOutputAssociation(); List<DataOutputAssociation> removed = new ArrayList<DataOutputAssociation>(); for (DataOutputAssociation doa : dataOutputAssociations) { for (ItemAwareElement e : doa.getSourceRef()) { if (e == item) removed.add(doa); } } dataOutputAssociations.removeAll(removed); return super.removeListItem(object, feature, index); } }