/******************************************************************************* * 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 * * @author Bob Brodt ******************************************************************************/ package org.eclipse.bpmn2.modeler.ui.adapters.properties; import org.eclipse.bpmn2.Activity; import org.eclipse.bpmn2.AdHocSubProcess; import org.eclipse.bpmn2.Bpmn2Package; import org.eclipse.bpmn2.CompensateEventDefinition; import org.eclipse.bpmn2.MultiInstanceLoopCharacteristics; import org.eclipse.bpmn2.StandardLoopCharacteristics; import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesAdapter; import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesProvider; import org.eclipse.bpmn2.modeler.core.adapters.FeatureDescriptor; import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerFactory; import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.resource.Resource; /** * @author Bob Brodt * */ public class ActivityPropertiesAdapter<T extends Activity> extends ExtendedPropertiesAdapter<T> { /** * @param adapterFactory * @param object */ public ActivityPropertiesAdapter(AdapterFactory adapterFactory, T object) { super(adapterFactory, object); EStructuralFeature feature = Bpmn2Package.eINSTANCE.getActivity_LoopCharacteristics(); setProperty(feature, UI_CAN_CREATE_NEW, Boolean.FALSE); setProperty(feature, UI_CAN_EDIT, Boolean.FALSE); setFeatureDescriptor(feature, new FeatureDescriptor<T>(this,object,feature) { @Override protected void internalSet(T object, EStructuralFeature feature, Object value, int index) { if (value instanceof String) { if ("MultiInstanceLoopCharacteristics".equals(value)) { //$NON-NLS-1$ MultiInstanceLoopCharacteristics lc = Bpmn2ModelerFactory.createObject(getResource(), MultiInstanceLoopCharacteristics.class); value = lc; } else if ("StandardLoopCharacteristics".equals(value)) { //$NON-NLS-1$ StandardLoopCharacteristics lc = Bpmn2ModelerFactory.createObject(getResource(), StandardLoopCharacteristics.class); value = lc; } } super.internalSet(object, feature, value, index); } } ); feature = Bpmn2Package.eINSTANCE.getActivity_Properties(); setFeatureDescriptor(feature, new FeatureDescriptor<T>(this,object,feature) { @Override public EObject createFeature(Resource resource, EClass eclass) { return PropertyPropertiesAdapter.createProperty(object.getProperties()); } } ); feature = Bpmn2Package.eINSTANCE.getActivity_IsForCompensation(); setFeatureDescriptor(feature, new FeatureDescriptor<T>(this,object,feature) { @Override protected void internalSet(T object, EStructuralFeature feature, Object value, int index) { if (value instanceof Boolean) { if (!(Boolean)value) { // This Activity is no longer being used for Compensation. // If any Compensation Boundary Events reference this // Activity, set their Activity References to null. TreeIterator<EObject> iter = ModelUtil.getDefinitions(object).eAllContents(); while (iter.hasNext()) { EObject o = iter.next(); if (o instanceof CompensateEventDefinition) { CompensateEventDefinition ced = (CompensateEventDefinition) o; if (ced.getActivityRef() == object) { ExtendedPropertiesProvider.setValue(ced, Bpmn2Package.eINSTANCE.getCompensateEventDefinition_ActivityRef(), null); } } } } } super.internalSet(object, feature, value, index); } } ); if (object instanceof AdHocSubProcess) { feature = Bpmn2Package.eINSTANCE.getAdHocSubProcess_CompletionCondition(); setFeatureDescriptor(feature, new FeatureDescriptor<T>(this,object,feature) { @Override public String getLabel() { return Messages.ActivityPropertiesAdapter_CompletionCondition_Label; } } ); } } }