/******************************************************************************* * Copyright (c) 2011 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; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.bpmn2.Bpmn2Package; import org.eclipse.bpmn2.modeler.ui.features.activity.subprocess.AdHocSubProcessFeatureContainer.CreateAdHocSubProcessFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.subprocess.CallActivityFeatureContainer.CreateCallActivityFeatureContainer; import org.eclipse.bpmn2.modeler.ui.features.activity.subprocess.SubProcessFeatureContainer.CreateSubProcessFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.subprocess.TransactionFeatureContainer.CreateTransactionFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.task.BusinessRuleTaskFeatureContainer.CreateBusinessRuleTaskFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.task.ManualTaskFeatureContainer.CreateManualTaskFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.task.ReceiveTaskFeatureContainer.CreateReceiveTaskFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.task.ScriptTaskFeatureContainer.CreateScriptTaskFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.task.SendTaskFeatureContainer.CreateSendTaskFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.task.ServiceTaskFeatureContainer.CreateServiceTaskFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.task.TaskFeatureContainer.CreateTaskFeature; import org.eclipse.bpmn2.modeler.ui.features.activity.task.UserTaskFeatureContainer.CreateUserTaskFeature; import org.eclipse.bpmn2.modeler.ui.features.artifact.CreateTextAnnotationFeature; import org.eclipse.bpmn2.modeler.ui.features.artifact.GroupFeatureContainer.CreateGroupFeature; import org.eclipse.bpmn2.modeler.ui.features.choreography.CallChoreographyFeatureContainer.CreateCallChoreographyFeature; import org.eclipse.bpmn2.modeler.ui.features.choreography.ChoreographyTaskFeatureContainer.CreateChoreographyTaskFeature; import org.eclipse.bpmn2.modeler.ui.features.choreography.SubChoreographyFeatureContainer.CreateSubChoreographyFeature; import org.eclipse.bpmn2.modeler.ui.features.conversation.CreateConversationFeature; import org.eclipse.bpmn2.modeler.ui.features.conversation.ConversationLinkFeatureContainer.CreateConversationLinkFeature; import org.eclipse.bpmn2.modeler.ui.features.data.DataInputFeatureContainer.CreateDataInputFeature; import org.eclipse.bpmn2.modeler.ui.features.data.DataObjectFeatureContainer.CreateDataObjectFeature; import org.eclipse.bpmn2.modeler.ui.features.data.DataObjectReferenceFeatureContainer.CreateDataObjectReferenceFeature; import org.eclipse.bpmn2.modeler.ui.features.data.DataOutputFeatureContainer.CreateDataOutputFeature; import org.eclipse.bpmn2.modeler.ui.features.data.DataStoreReferenceFeatureContainer.CreateDataStoreReferenceFeature; import org.eclipse.bpmn2.modeler.ui.features.data.MessageFeatureContainer.CreateMessageFeature; import org.eclipse.bpmn2.modeler.ui.features.event.BoundaryEventCreateFeature; import org.eclipse.bpmn2.modeler.ui.features.event.EndEventFeatureContainer.CreateEndEventFeature; import org.eclipse.bpmn2.modeler.ui.features.event.IntermediateCatchEventFeatureContainer.CreateIntermediateCatchEventFeature; import org.eclipse.bpmn2.modeler.ui.features.event.IntermediateThrowEventFeatureContainer.CreateIntermediateThrowEventFeature; import org.eclipse.bpmn2.modeler.ui.features.event.StartEventFeatureContainer.CreateStartEventFeature; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.CancelEventDefinitionContainer.CreateCancelEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.CompensateEventDefinitionContainer.CreateCompensateEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.ConditionalEventDefinitionContainer.CreateConditionalEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.ErrorEventDefinitionContainer.CreateErrorEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.EscalationEventDefinitionContainer.CreateEscalationEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.LinkEventDefinitionContainer.CreateLinkEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.MessageEventDefinitionContainer.CreateMessageEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.SignalEventDefinitionContainer.CreateSignalEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.TerminateEventDefinitionFeatureContainer.CreateTerminateEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.event.definitions.TimerEventDefinitionContainer.CreateTimerEventDefinition; import org.eclipse.bpmn2.modeler.ui.features.flow.AssociationFeatureContainer.CreateAssociationFeature; import org.eclipse.bpmn2.modeler.ui.features.flow.MessageFlowFeatureContainer.CreateMessageFlowFeature; import org.eclipse.bpmn2.modeler.ui.features.flow.SequenceFlowFeatureContainer.CreateSequenceFlowFeature; import org.eclipse.bpmn2.modeler.ui.features.gateway.ComplexGatewayFeatureContainer.CreateComplexGatewayFeature; import org.eclipse.bpmn2.modeler.ui.features.gateway.EventBasedGatewayFeatureContainer.CreateEventBasedGatewayFeature; import org.eclipse.bpmn2.modeler.ui.features.gateway.ExclusiveGatewayFeatureContainer.CreateExclusiveGatewayFeature; import org.eclipse.bpmn2.modeler.ui.features.gateway.InclusiveGatewayFeatureContainer.CreateInclusiveGatewayFeature; import org.eclipse.bpmn2.modeler.ui.features.gateway.ParallelGatewayFeatureContainer.CreateParallelGatewayFeature; import org.eclipse.bpmn2.modeler.ui.features.lane.CreateLaneFeature; import org.eclipse.bpmn2.modeler.ui.features.participant.CreateParticipantFeature; import org.eclipse.emf.ecore.EClass; import org.eclipse.graphiti.features.IFeature; public class FeatureMap { public static final Map<EClass, Class<? extends IFeature>> FEATURE_MAP; public static final List<Class<? extends IFeature>> EVENT_DEFINITIONS; public static final List<Class<? extends IFeature>> EVENTS; public static final List<Class<? extends IFeature>> GATEWAYS; public static final List<Class<? extends IFeature>> TASKS; public static final List<Class<? extends IFeature>> DATA; public static final List<Class<? extends IFeature>> OTHER; static { Bpmn2Package i = Bpmn2Package.eINSTANCE; HashMap<EClass, Class<? extends IFeature>> featureMap = new HashMap<EClass, Class<? extends IFeature>>(); featureMap.put(i.getTask(), CreateTaskFeature.class); featureMap.put(i.getStartEvent(), CreateStartEventFeature.class); featureMap.put(i.getEndEvent(), CreateEndEventFeature.class); featureMap.put(i.getSequenceFlow(), CreateSequenceFlowFeature.class); featureMap.put(i.getInclusiveGateway(), CreateInclusiveGatewayFeature.class); featureMap.put(i.getExclusiveGateway(), CreateExclusiveGatewayFeature.class); featureMap.put(i.getParallelGateway(), CreateParallelGatewayFeature.class); featureMap.put(i.getLane(), CreateLaneFeature.class); featureMap.put(i.getCollaboration(), CreateParticipantFeature.class); featureMap.put(i.getAssociation(), CreateAssociationFeature.class); featureMap.put(i.getTextAnnotation(), CreateTextAnnotationFeature.class); featureMap.put(i.getEventBasedGateway(), CreateEventBasedGatewayFeature.class); featureMap.put(i.getComplexGateway(), CreateComplexGatewayFeature.class); featureMap.put(i.getMessageFlow(), CreateMessageFlowFeature.class); featureMap.put(i.getIntermediateThrowEvent(), CreateIntermediateThrowEventFeature.class); featureMap.put(i.getIntermediateCatchEvent(), CreateIntermediateCatchEventFeature.class); featureMap.put(i.getManualTask(), CreateManualTaskFeature.class); featureMap.put(i.getUserTask(), CreateUserTaskFeature.class); featureMap.put(i.getScriptTask(), CreateScriptTaskFeature.class); featureMap.put(i.getBusinessRuleTask(), CreateBusinessRuleTaskFeature.class); featureMap.put(i.getServiceTask(), CreateServiceTaskFeature.class); featureMap.put(i.getSendTask(), CreateSendTaskFeature.class); featureMap.put(i.getReceiveTask(), CreateReceiveTaskFeature.class); featureMap.put(i.getConditionalEventDefinition(), CreateConditionalEventDefinition.class); featureMap.put(i.getTimerEventDefinition(), CreateTimerEventDefinition.class); featureMap.put(i.getSignalEventDefinition(), CreateSignalEventDefinition.class); featureMap.put(i.getMessageEventDefinition(), CreateMessageEventDefinition.class); featureMap.put(i.getEscalationEventDefinition(), CreateEscalationEventDefinition.class); featureMap.put(i.getCompensateEventDefinition(), CreateCompensateEventDefinition.class); featureMap.put(i.getLinkEventDefinition(), CreateLinkEventDefinition.class); featureMap.put(i.getErrorEventDefinition(), CreateErrorEventDefinition.class); featureMap.put(i.getCancelEventDefinition(), CreateCancelEventDefinition.class); featureMap.put(i.getTerminateEventDefinition(), CreateTerminateEventDefinition.class); featureMap.put(i.getBoundaryEvent(), BoundaryEventCreateFeature.class); featureMap.put(i.getSubProcess(), CreateSubProcessFeature.class); featureMap.put(i.getTransaction(), CreateTransactionFeature.class); featureMap.put(i.getGroup(), CreateGroupFeature.class); featureMap.put(i.getDataObject(), CreateDataObjectFeature.class); featureMap.put(i.getDataObjectReference(), CreateDataObjectReferenceFeature.class); featureMap.put(i.getDataStoreReference(), CreateDataStoreReferenceFeature.class); featureMap.put(i.getDataInput(), CreateDataInputFeature.class); featureMap.put(i.getDataOutput(), CreateDataOutputFeature.class); featureMap.put(i.getAdHocSubProcess(), CreateAdHocSubProcessFeature.class); featureMap.put(i.getCallActivity(), CreateCallActivityFeatureContainer.class); featureMap.put(i.getMessage(), CreateMessageFeature.class); featureMap.put(i.getConversation(), CreateConversationFeature.class); featureMap.put(i.getConversationLink(), CreateConversationLinkFeature.class); featureMap.put(i.getChoreographyTask(), CreateChoreographyTaskFeature.class); featureMap.put(i.getSubChoreography(), CreateSubChoreographyFeature.class); featureMap.put(i.getCallChoreography(), CreateCallChoreographyFeature.class); FEATURE_MAP = Collections.unmodifiableMap(featureMap); ArrayList<Class<? extends IFeature>> features = new ArrayList<Class<? extends IFeature>>(); features.add(CreateConditionalEventDefinition.class); features.add(CreateTimerEventDefinition.class); features.add(CreateSignalEventDefinition.class); features.add(CreateMessageEventDefinition.class); features.add(CreateEscalationEventDefinition.class); features.add(CreateCompensateEventDefinition.class); features.add(CreateLinkEventDefinition.class); features.add(CreateErrorEventDefinition.class); features.add(CreateCancelEventDefinition.class); features.add(CreateTerminateEventDefinition.class); EVENT_DEFINITIONS = Collections.unmodifiableList(features); features = new ArrayList<Class<? extends IFeature>>(); features.add(CreateStartEventFeature.class); features.add(CreateEndEventFeature.class); features.add(CreateIntermediateThrowEventFeature.class); features.add(CreateIntermediateCatchEventFeature.class); features.add(BoundaryEventCreateFeature.class); EVENTS = Collections.unmodifiableList(features); features = new ArrayList<Class<? extends IFeature>>(); features.add(CreateInclusiveGatewayFeature.class); features.add(CreateExclusiveGatewayFeature.class); features.add(CreateParallelGatewayFeature.class); features.add(CreateEventBasedGatewayFeature.class); features.add(CreateComplexGatewayFeature.class); GATEWAYS = Collections.unmodifiableList(features); features = new ArrayList<Class<? extends IFeature>>(); features.add(CreateTaskFeature.class); features.add(CreateManualTaskFeature.class); features.add(CreateUserTaskFeature.class); features.add(CreateScriptTaskFeature.class); features.add(CreateBusinessRuleTaskFeature.class); features.add(CreateServiceTaskFeature.class); features.add(CreateSendTaskFeature.class); features.add(CreateReceiveTaskFeature.class); features.add(CreateChoreographyTaskFeature.class); TASKS = Collections.unmodifiableList(features); features = new ArrayList<Class<? extends IFeature>>(); features.add(CreateDataObjectFeature.class); features.add(CreateDataObjectReferenceFeature.class); features.add(CreateDataStoreReferenceFeature.class); features.add(CreateDataInputFeature.class); features.add(CreateDataOutputFeature.class); DATA = Collections.unmodifiableList(features); features = new ArrayList<Class<? extends IFeature>>(); features.add(CreateLaneFeature.class); features.add(CreateParticipantFeature.class); features.add(CreateTextAnnotationFeature.class); features.add(CreateSubProcessFeature.class); features.add(CreateTransactionFeature.class); features.add(CreateGroupFeature.class); features.add(CreateAdHocSubProcessFeature.class); features.add(CreateCallActivityFeatureContainer.class); features.add(CreateMessageFeature.class); features.add(CreateConversationFeature.class); features.add(CreateSubChoreographyFeature.class); features.add(CreateCallChoreographyFeature.class); OTHER = Collections.unmodifiableList(features); } public static EClass getElement(IFeature cf) { for (EClass e : FEATURE_MAP.keySet()) { if (FEATURE_MAP.get(e).isInstance(cf)) { return e; } } return null; } }