/* * Copyright Text -> * * Copyright (c) 2012-2016 Marsha Chechik, Alessio Di Sandro, Michalis Famelis, * Rick Salay. * All rights reserved. This program and the accompanying materials * are 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: * Alessio Di Sandro - Implementation. */ package edu.toronto.cs.se.modelepedia.statemachine.diagram.part; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.gmf.tooling.runtime.update.DiagramUpdater; import edu.toronto.cs.se.modelepedia.statemachine.AbstractState; import edu.toronto.cs.se.modelepedia.statemachine.FinalState; import edu.toronto.cs.se.modelepedia.statemachine.InitialState; import edu.toronto.cs.se.modelepedia.statemachine.State; import edu.toronto.cs.se.modelepedia.statemachine.StateAction; import edu.toronto.cs.se.modelepedia.statemachine.StateMachine; import edu.toronto.cs.se.modelepedia.statemachine.StateMachinePackage; import edu.toronto.cs.se.modelepedia.statemachine.Transition; import edu.toronto.cs.se.modelepedia.statemachine.diagram.edit.parts.FinalStateEditPart; import edu.toronto.cs.se.modelepedia.statemachine.diagram.edit.parts.InitialStateEditPart; import edu.toronto.cs.se.modelepedia.statemachine.diagram.edit.parts.StateActionEditPart; import edu.toronto.cs.se.modelepedia.statemachine.diagram.edit.parts.StateEditPart; import edu.toronto.cs.se.modelepedia.statemachine.diagram.edit.parts.StateMachineEditPart; import edu.toronto.cs.se.modelepedia.statemachine.diagram.edit.parts.StateStateInternalActionsCompartmentEditPart; import edu.toronto.cs.se.modelepedia.statemachine.diagram.edit.parts.TransitionEditPart; import edu.toronto.cs.se.modelepedia.statemachine.diagram.providers.StateMachineElementTypes; /** * @generated */ public class StateMachineDiagramUpdater { /** * @generated */ public static boolean isShortcutOrphaned(View view) { return !view.isSetElement() || view.getElement() == null || view.getElement().eIsProxy(); } /** * @generated */ public static List<StateMachineNodeDescriptor> getSemanticChildren(View view) { switch (StateMachineVisualIDRegistry.getVisualID(view)) { case StateMachineEditPart.VISUAL_ID: return getStateMachine_1000SemanticChildren(view); case StateStateInternalActionsCompartmentEditPart.VISUAL_ID: return getStateStateInternalActionsCompartment_7001SemanticChildren(view); } return Collections.emptyList(); } /** * @generated */ public static List<StateMachineNodeDescriptor> getStateMachine_1000SemanticChildren( View view) { if (!view.isSetElement()) { return Collections.emptyList(); } StateMachine modelElement = (StateMachine) view.getElement(); LinkedList<StateMachineNodeDescriptor> result = new LinkedList<StateMachineNodeDescriptor>(); for (Iterator<?> it = modelElement.getStates().iterator(); it.hasNext();) { AbstractState childElement = (AbstractState) it.next(); int visualID = StateMachineVisualIDRegistry.getNodeVisualID(view, childElement); if (visualID == StateEditPart.VISUAL_ID) { result.add(new StateMachineNodeDescriptor(childElement, visualID)); continue; } if (visualID == InitialStateEditPart.VISUAL_ID) { result.add(new StateMachineNodeDescriptor(childElement, visualID)); continue; } if (visualID == FinalStateEditPart.VISUAL_ID) { result.add(new StateMachineNodeDescriptor(childElement, visualID)); continue; } } return result; } /** * @generated */ public static List<StateMachineNodeDescriptor> getStateStateInternalActionsCompartment_7001SemanticChildren( View view) { if (false == view.eContainer() instanceof View) { return Collections.emptyList(); } View containerView = (View) view.eContainer(); if (!containerView.isSetElement()) { return Collections.emptyList(); } State modelElement = (State) containerView.getElement(); LinkedList<StateMachineNodeDescriptor> result = new LinkedList<StateMachineNodeDescriptor>(); for (Iterator<?> it = modelElement.getInternalActions().iterator(); it .hasNext();) { StateAction childElement = (StateAction) it.next(); int visualID = StateMachineVisualIDRegistry.getNodeVisualID(view, childElement); if (visualID == StateActionEditPart.VISUAL_ID) { result.add(new StateMachineNodeDescriptor(childElement, visualID)); continue; } } return result; } /** * @generated */ public static List<StateMachineLinkDescriptor> getContainedLinks(View view) { switch (StateMachineVisualIDRegistry.getVisualID(view)) { case StateMachineEditPart.VISUAL_ID: return getStateMachine_1000ContainedLinks(view); case StateEditPart.VISUAL_ID: return getState_2001ContainedLinks(view); case InitialStateEditPart.VISUAL_ID: return getInitialState_2002ContainedLinks(view); case FinalStateEditPart.VISUAL_ID: return getFinalState_2003ContainedLinks(view); case StateActionEditPart.VISUAL_ID: return getStateAction_3001ContainedLinks(view); case TransitionEditPart.VISUAL_ID: return getTransition_4001ContainedLinks(view); } return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getIncomingLinks(View view) { switch (StateMachineVisualIDRegistry.getVisualID(view)) { case StateEditPart.VISUAL_ID: return getState_2001IncomingLinks(view); case InitialStateEditPart.VISUAL_ID: return getInitialState_2002IncomingLinks(view); case FinalStateEditPart.VISUAL_ID: return getFinalState_2003IncomingLinks(view); case StateActionEditPart.VISUAL_ID: return getStateAction_3001IncomingLinks(view); case TransitionEditPart.VISUAL_ID: return getTransition_4001IncomingLinks(view); } return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getOutgoingLinks(View view) { switch (StateMachineVisualIDRegistry.getVisualID(view)) { case StateEditPart.VISUAL_ID: return getState_2001OutgoingLinks(view); case InitialStateEditPart.VISUAL_ID: return getInitialState_2002OutgoingLinks(view); case FinalStateEditPart.VISUAL_ID: return getFinalState_2003OutgoingLinks(view); case StateActionEditPart.VISUAL_ID: return getStateAction_3001OutgoingLinks(view); case TransitionEditPart.VISUAL_ID: return getTransition_4001OutgoingLinks(view); } return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getStateMachine_1000ContainedLinks( View view) { StateMachine modelElement = (StateMachine) view.getElement(); LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); result.addAll(getContainedTypeModelFacetLinks_Transition_4001(modelElement)); return result; } /** * @generated */ public static List<StateMachineLinkDescriptor> getState_2001ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getInitialState_2002ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getFinalState_2003ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getStateAction_3001ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getTransition_4001ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getState_2001IncomingLinks( View view) { State modelElement = (State) view.getElement(); Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer .find(view.eResource().getResourceSet().getResources()); LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); result.addAll(getIncomingTypeModelFacetLinks_Transition_4001( modelElement, crossReferences)); return result; } /** * @generated */ public static List<StateMachineLinkDescriptor> getInitialState_2002IncomingLinks( View view) { InitialState modelElement = (InitialState) view.getElement(); Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer .find(view.eResource().getResourceSet().getResources()); LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); result.addAll(getIncomingTypeModelFacetLinks_Transition_4001( modelElement, crossReferences)); return result; } /** * @generated */ public static List<StateMachineLinkDescriptor> getFinalState_2003IncomingLinks( View view) { FinalState modelElement = (FinalState) view.getElement(); Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer .find(view.eResource().getResourceSet().getResources()); LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); result.addAll(getIncomingTypeModelFacetLinks_Transition_4001( modelElement, crossReferences)); return result; } /** * @generated */ public static List<StateMachineLinkDescriptor> getStateAction_3001IncomingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getTransition_4001IncomingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getState_2001OutgoingLinks( View view) { State modelElement = (State) view.getElement(); LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); result.addAll(getOutgoingTypeModelFacetLinks_Transition_4001(modelElement)); return result; } /** * @generated */ public static List<StateMachineLinkDescriptor> getInitialState_2002OutgoingLinks( View view) { InitialState modelElement = (InitialState) view.getElement(); LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); result.addAll(getOutgoingTypeModelFacetLinks_Transition_4001(modelElement)); return result; } /** * @generated */ public static List<StateMachineLinkDescriptor> getFinalState_2003OutgoingLinks( View view) { FinalState modelElement = (FinalState) view.getElement(); LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); result.addAll(getOutgoingTypeModelFacetLinks_Transition_4001(modelElement)); return result; } /** * @generated */ public static List<StateMachineLinkDescriptor> getStateAction_3001OutgoingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<StateMachineLinkDescriptor> getTransition_4001OutgoingLinks( View view) { return Collections.emptyList(); } /** * @generated */ private static Collection<StateMachineLinkDescriptor> getContainedTypeModelFacetLinks_Transition_4001( StateMachine container) { LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); for (Iterator<?> links = container.getTransitions().iterator(); links .hasNext();) { EObject linkObject = (EObject) links.next(); if (false == linkObject instanceof Transition) { continue; } Transition link = (Transition) linkObject; if (TransitionEditPart.VISUAL_ID != StateMachineVisualIDRegistry .getLinkWithClassVisualID(link)) { continue; } AbstractState dst = link.getTarget(); AbstractState src = link.getSource(); result.add(new StateMachineLinkDescriptor(src, dst, link, StateMachineElementTypes.Transition_4001, TransitionEditPart.VISUAL_ID)); } return result; } /** * @generated */ private static Collection<StateMachineLinkDescriptor> getIncomingTypeModelFacetLinks_Transition_4001( AbstractState target, Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) { LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); Collection<EStructuralFeature.Setting> settings = crossReferences .get(target); for (EStructuralFeature.Setting setting : settings) { if (setting.getEStructuralFeature() != StateMachinePackage.eINSTANCE .getTransition_Target() || false == setting.getEObject() instanceof Transition) { continue; } Transition link = (Transition) setting.getEObject(); if (TransitionEditPart.VISUAL_ID != StateMachineVisualIDRegistry .getLinkWithClassVisualID(link)) { continue; } AbstractState src = link.getSource(); result.add(new StateMachineLinkDescriptor(src, target, link, StateMachineElementTypes.Transition_4001, TransitionEditPart.VISUAL_ID)); } return result; } /** * @generated */ private static Collection<StateMachineLinkDescriptor> getOutgoingTypeModelFacetLinks_Transition_4001( AbstractState source) { StateMachine container = null; // Find container element for the link. // Climb up by containment hierarchy starting from the source // and return the first element that is instance of the container class. for (EObject element = source; element != null && container == null; element = element .eContainer()) { if (element instanceof StateMachine) { container = (StateMachine) element; } } if (container == null) { return Collections.emptyList(); } LinkedList<StateMachineLinkDescriptor> result = new LinkedList<StateMachineLinkDescriptor>(); for (Iterator<?> links = container.getTransitions().iterator(); links .hasNext();) { EObject linkObject = (EObject) links.next(); if (false == linkObject instanceof Transition) { continue; } Transition link = (Transition) linkObject; if (TransitionEditPart.VISUAL_ID != StateMachineVisualIDRegistry .getLinkWithClassVisualID(link)) { continue; } AbstractState dst = link.getTarget(); AbstractState src = link.getSource(); if (src != source) { continue; } result.add(new StateMachineLinkDescriptor(src, dst, link, StateMachineElementTypes.Transition_4001, TransitionEditPart.VISUAL_ID)); } return result; } /** * @generated */ public static final DiagramUpdater TYPED_INSTANCE = new DiagramUpdater() { /** * @generated */ @Override public List<StateMachineNodeDescriptor> getSemanticChildren(View view) { return StateMachineDiagramUpdater.getSemanticChildren(view); } /** * @generated */ @Override public List<StateMachineLinkDescriptor> getContainedLinks(View view) { return StateMachineDiagramUpdater.getContainedLinks(view); } /** * @generated */ @Override public List<StateMachineLinkDescriptor> getIncomingLinks(View view) { return StateMachineDiagramUpdater.getIncomingLinks(view); } /** * @generated */ @Override public List<StateMachineLinkDescriptor> getOutgoingLinks(View view) { return StateMachineDiagramUpdater.getOutgoingLinks(view); } }; }