package org.eclipse.uml2.diagram.sequence.edit.policies;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.uml2.diagram.common.genapi.IUpdaterNodeDescriptor;
import org.eclipse.uml2.diagram.sequence.edit.parts.ActionExecutionSpecification2EditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.ActionExecutionSpecificationEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.BehaviorExecutionSpecification2EditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.BehaviorExecutionSpecificationEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.CombinedFragmentMountingRegionEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.GateEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.InteractionEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.InteractionOperandMountingRegionEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.InteractionUseMountingRegionEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.LayeredCombinedFragmentEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.LayeredInteractionUseEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.LayeredOperandEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.LifelineEditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.StateInvariant2EditPart;
import org.eclipse.uml2.diagram.sequence.edit.parts.StateInvariantEditPart;
import org.eclipse.uml2.diagram.sequence.part.UMLDiagramUpdater;
import org.eclipse.uml2.diagram.sequence.part.UMLVisualIDRegistry;
import org.eclipse.uml2.uml.UMLPackage;
/**
* @generated
*/
public class BehaviorExecutionSpecificationCanonicalEditPolicy extends CanonicalEditPolicy {
/**
* @generated
*/
Set myFeaturesToSynchronize;
/**
* @generated
*/
protected List getSemanticChildrenList() {
View viewObject = (View) getHost().getModel();
List result = new LinkedList();
for (Iterator it = UMLDiagramUpdater.getBehaviorExecutionSpecification_3004SemanticChildren(viewObject).iterator(); it.hasNext();) {
result.add(((IUpdaterNodeDescriptor) it.next()).getModelElement());
}
return result;
}
/**
* @generated
*/
@SuppressWarnings("unchecked")
protected boolean isOrphaned(Collection semanticChildren, final View view) {
int visualID = UMLVisualIDRegistry.getVisualID(view);
switch (visualID) {
case InteractionEditPart.VISUAL_ID:
case GateEditPart.VISUAL_ID:
case LayeredInteractionUseEditPart.VISUAL_ID:
case LayeredCombinedFragmentEditPart.VISUAL_ID:
case LayeredOperandEditPart.VISUAL_ID:
case LifelineEditPart.VISUAL_ID:
case ActionExecutionSpecificationEditPart.VISUAL_ID:
case StateInvariantEditPart.VISUAL_ID:
case InteractionUseMountingRegionEditPart.VISUAL_ID:
case CombinedFragmentMountingRegionEditPart.VISUAL_ID:
case InteractionOperandMountingRegionEditPart.VISUAL_ID:
case ActionExecutionSpecification2EditPart.VISUAL_ID:
case StateInvariant2EditPart.VISUAL_ID:
case BehaviorExecutionSpecification2EditPart.VISUAL_ID:
return true;
case BehaviorExecutionSpecificationEditPart.VISUAL_ID:
if (!semanticChildren.contains(view.getElement())) {
return true;
}
}
return false;
}
/**
* @generated
*/
protected String getDefaultFactoryHint() {
return null;
}
/**
* @generated
*/
protected Set getFeaturesToSynchronize() {
if (myFeaturesToSynchronize == null) {
myFeaturesToSynchronize = new HashSet();
myFeaturesToSynchronize.add(UMLPackage.eINSTANCE.getInteraction_Fragment());
}
return myFeaturesToSynchronize;
}
/**
* @generated
*/
@Override
protected String getFactoryHint(IAdaptable elementAdapter) {
EObject domainModelElment = (EObject) elementAdapter.getAdapter(EObject.class);
View containerView = ((IGraphicalEditPart) getHost()).getNotationView();
int hint = UMLVisualIDRegistry.getNodeVisualID(containerView, domainModelElment);
return (hint != -1) ? UMLVisualIDRegistry.getType(hint) : super.getFactoryHint(elementAdapter);
}
}