package org.eclipse.uml2.diagram.sequence.model; import org.eclipse.gmf.runtime.common.core.command.ICommand; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.Edge; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.uml2.diagram.sequence.model.sdnotation.SDModelStorageStyle; import org.eclipse.uml2.diagram.sequence.model.sdnotation.SDNotationPackage; import org.eclipse.uml2.diagram.sequence.model.sequenced.SDModel; import org.eclipse.uml2.uml.Interaction; public class SDModelAccess { public static SDModel findSDModel(View view){ SDModelStorageStyle accessor = findSDModelAccessor(view); return accessor == null ? null : accessor.getAttachedModel(); } public static SDModelStorageStyle findSDModelAccessor(View view){ View interactionView = findInteractionView(view); if (interactionView == null){ return null; } return (SDModelStorageStyle)interactionView.getStyle(SDNotationPackage.eINSTANCE.getSDModelStorageStyle()); } public static View findInteractionView(View view){ if (view instanceof Edge){ view = ((Edge)view).getTarget(); } if (view.isSetElement() && view.getElement() instanceof Interaction){ return view; } if (view instanceof Diagram){ return null; } if (view.eContainer() instanceof View){ return findInteractionView((View)view.eContainer()); } return null; } public static ICommand getInvalidateSDModelCommand(IGraphicalEditPart editPart){ return getInvalidateSDModelCommand(editPart.getNotationView()); } public static ICommand getInvalidateSDModelCommand(View view){ if (view == null){ return null; } return new InvalidateSDModelCommand(view); } }