| package org.eclipse.uml2.diagram.activity.edit.policies; |
| |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.eclipse.core.commands.ExecutionException; |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.transaction.Transaction; |
| import org.eclipse.emf.workspace.AbstractEMFOperation; |
| import org.eclipse.gmf.runtime.common.core.util.StringStatics; |
| import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy; |
| import org.eclipse.gmf.runtime.notation.Location; |
| import org.eclipse.gmf.runtime.notation.Node; |
| import org.eclipse.gmf.runtime.notation.Ratio; |
| import org.eclipse.gmf.runtime.notation.Size; |
| import org.eclipse.gmf.runtime.notation.View; |
| import org.eclipse.uml2.diagram.activity.edit.parts.AcceptEventAction3EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.AcceptEventAction4EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.ActivityFinalNode2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.AddStructuralFeatureValueAction2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.CallBehaviorAction2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.CallOperationAction2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.CentralBufferNode2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.CreateObjectAction2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.DataStoreNode2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.DecisionNode2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.FlowFinalNode2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.ForkNode2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.InputPin6EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.JoinNode2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.OpaqueAction2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.OutputPin4EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.Pin2EditPart; |
| import org.eclipse.uml2.diagram.activity.edit.parts.StructuredActivityNode2EditPart; |
| import org.eclipse.uml2.diagram.activity.part.UMLDiagramEditorPlugin; |
| import org.eclipse.uml2.diagram.activity.part.UMLDiagramUpdater; |
| import org.eclipse.uml2.diagram.activity.part.UMLNodeDescriptor; |
| import org.eclipse.uml2.diagram.activity.part.UMLVisualIDRegistry; |
| import org.eclipse.uml2.uml.UMLPackage; |
| |
| /** |
| * @generated |
| */ |
| public class LoopNodeLoopNodeContentPaneCompartment2CanonicalEditPolicy extends CanonicalEditPolicy { |
| |
| /** |
| * @generated |
| */ |
| Set myFeaturesToSynchronize; |
| |
| /** |
| * @generated |
| */ |
| protected List getSemanticChildrenList() { |
| View viewObject = (View) getHost().getModel(); |
| List result = new LinkedList(); |
| for (Iterator it = UMLDiagramUpdater.getLoopNodeLoopNodeContentPaneCompartment_7017SemanticChildren(viewObject).iterator(); it.hasNext();) { |
| result.add(((UMLNodeDescriptor) it.next()).getModelElement()); |
| } |
| return result; |
| } |
| |
| /** |
| * @generated |
| */ |
| protected boolean isOrphaned(Collection semanticChildren, final View view) { |
| int visualID = UMLVisualIDRegistry.getVisualID(view); |
| switch (visualID) { |
| case StructuredActivityNode2EditPart.VISUAL_ID: |
| case OpaqueAction2EditPart.VISUAL_ID: |
| case AcceptEventAction3EditPart.VISUAL_ID: |
| case AcceptEventAction4EditPart.VISUAL_ID: |
| case ActivityFinalNode2EditPart.VISUAL_ID: |
| case DecisionNode2EditPart.VISUAL_ID: |
| case FlowFinalNode2EditPart.VISUAL_ID: |
| case Pin2EditPart.VISUAL_ID: |
| case CreateObjectAction2EditPart.VISUAL_ID: |
| case CallBehaviorAction2EditPart.VISUAL_ID: |
| case CallOperationAction2EditPart.VISUAL_ID: |
| case ForkNode2EditPart.VISUAL_ID: |
| case JoinNode2EditPart.VISUAL_ID: |
| case AddStructuralFeatureValueAction2EditPart.VISUAL_ID: |
| case DataStoreNode2EditPart.VISUAL_ID: |
| case CentralBufferNode2EditPart.VISUAL_ID: |
| case InputPin6EditPart.VISUAL_ID: |
| case OutputPin4EditPart.VISUAL_ID: |
| if (!semanticChildren.contains(view.getElement())) { |
| return true; |
| } |
| EObject domainModelElement = view.getElement(); |
| if (visualID != UMLVisualIDRegistry.getNodeVisualID((View) getHost().getModel(), domainModelElement)) { |
| List createdViews = createViews(Collections.singletonList(domainModelElement)); |
| assert createdViews.size() == 1; |
| final View createdView = (View) ((IAdaptable) createdViews.get(0)).getAdapter(View.class); |
| if (createdView != null) { |
| try { |
| new AbstractEMFOperation(host().getEditingDomain(), StringStatics.BLANK, Collections.singletonMap(Transaction.OPTION_UNPROTECTED, Boolean.TRUE)) { |
| |
| protected IStatus doExecute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { |
| populateViewProperties(view, createdView); |
| return Status.OK_STATUS; |
| } |
| }.execute(new NullProgressMonitor(), null); |
| } catch (ExecutionException e) { |
| UMLDiagramEditorPlugin.getInstance().logError("Error while copyign view information to newly created view", e); //$NON-NLS-1$ |
| } |
| } |
| deleteViews(Collections.singletonList(view).iterator()); |
| } |
| } |
| return false; |
| } |
| |
| /** |
| * @generated |
| */ |
| private void populateViewProperties(View oldView, View newView) { |
| if (oldView instanceof Node && newView instanceof Node) { |
| Node oldNode = (Node) oldView; |
| Node newNode = (Node) newView; |
| if (oldNode.getLayoutConstraint() instanceof Location && newNode.getLayoutConstraint() instanceof Location) { |
| ((Location) newNode.getLayoutConstraint()).setX(((Location) oldNode.getLayoutConstraint()).getX()); |
| ((Location) newNode.getLayoutConstraint()).setY(((Location) oldNode.getLayoutConstraint()).getY()); |
| } |
| if (oldNode.getLayoutConstraint() instanceof Size && newNode.getLayoutConstraint() instanceof Size) { |
| ((Size) newNode.getLayoutConstraint()).setWidth(((Size) oldNode.getLayoutConstraint()).getWidth()); |
| ((Size) newNode.getLayoutConstraint()).setHeight(((Size) oldNode.getLayoutConstraint()).getHeight()); |
| } |
| if (oldNode.getLayoutConstraint() instanceof Ratio && newNode.getLayoutConstraint() instanceof Ratio) { |
| ((Ratio) newNode.getLayoutConstraint()).setValue(((Ratio) oldNode.getLayoutConstraint()).getValue()); |
| } |
| newNode.persist(); |
| } |
| } |
| |
| /** |
| * @generated |
| */ |
| protected String getDefaultFactoryHint() { |
| return null; |
| } |
| |
| /** |
| * @generated |
| */ |
| protected Set getFeaturesToSynchronize() { |
| if (myFeaturesToSynchronize == null) { |
| myFeaturesToSynchronize = new HashSet(); |
| myFeaturesToSynchronize.add(UMLPackage.eINSTANCE.getStructuredActivityNode_Node()); |
| } |
| return myFeaturesToSynchronize; |
| } |
| |
| } |