/*****************************************************************************
* Copyright (c) 2009 Atos Origin.
*
*
* 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:
* Atos Origin - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.Shape;
import org.eclipse.draw2d.StackLayout;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.command.RemoveCommand;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.LayoutEditPolicy;
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
import org.eclipse.gef.requests.CreateRequest;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
import org.eclipse.gmf.runtime.notation.FillStyle;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.runtime.notation.datatype.GradientData;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.papyrus.infra.emf.appearance.helper.ShadowFigureHelper;
import org.eclipse.papyrus.infra.gmfdiag.common.figure.node.IPapyrusNodeFigure;
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.PreferenceConstantHelper;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.common.providers.UIAdapterImpl;
import org.eclipse.papyrus.uml.diagram.sequence.apex.edit.policies.ApexResizableShapeEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.InteractionUseItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.OpenDiagramEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.figures.InteractionUseRectangleFigure;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.util.CommandHelper;
import org.eclipse.papyrus.uml.diagram.sequence.util.NotificationHelper;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.eclipse.uml2.uml.Gate;
import org.eclipse.uml2.uml.Interaction;
import org.eclipse.uml2.uml.InteractionUse;
import org.eclipse.uml2.uml.UMLPackage;
/**
* @generated
*/
public class InteractionUseEditPart extends InteractionFragmentEditPart {
/**
* @generated
*/
public static final int VISUAL_ID = 3002;
/**
* Title for dialog of no actual gate's manual creation
*/
private static final String NO_ACTUAL_GATE_MANUAL_CREATION_DLG_TITLE = "No manual creation of actual gate"; //$NON-NLS-1$
/**
* Message for dialog of no actual gate's manual creation
*/
private static final String NO_ACTUAL_GATE_MANUAL_CREATION_DLG_MSG = "It's forbidden to create actual gate"; //$NON-NLS-1$
/**
* Title for dialog of no actual gate's manual deletion
*/
private static final String NO_ACTUAL_GATE_MANUAL_DELETION_DLG_TITLE = "No manual deletion of actual gate"; //$NON-NLS-1$
/**
* Message for dialog of no actual gate's manual deletion
*/
private static final String NO_ACTUAL_GATE_MANUAL_DELETION_DLG_MSG = "It's forbidden to delete actual gate"; //$NON-NLS-1$
/**
* @generated
*/
protected IFigure contentPane;
/**
* @generated
*/
protected IFigure primaryShape;
/**
* Notfier for listen and unlistend model element.
*/
private NotificationHelper notifier = new NotificationHelper(new UIAdapterImpl() {
@Override
protected void safeNotifyChanged(Notification msg) {
handleNotificationEvent(msg);
}
});
/**
* @generated
*/
public InteractionUseEditPart(View view) {
super(view);
}
/**
* @generated
*/
@Override
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new InteractionUseItemSemanticEditPolicy());
installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
installEditPolicy(EditPolicyRoles.OPEN_ROLE, new OpenDiagramEditPolicy());
// XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies
// removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
/**
* @generated
*/
protected LayoutEditPolicy createLayoutEditPolicy() {
org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy lep = new org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy() {
protected EditPolicy createChildEditPolicy(EditPart child) {
EditPolicy result = child.getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
if(result == null) {
result = new NonResizableEditPolicy();
}
return result;
}
protected Command getMoveChildrenCommand(Request request) {
return null;
}
protected Command getCreateCommand(CreateRequest request) {
return null;
}
};
return lep;
}
/**
* apex updated
*
* @Override
*/
/* apex added start */
public EditPolicy getPrimaryDragEditPolicy() {
EditPolicy result = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
return result != null ? result : new ApexResizableShapeEditPolicy(PositionConstants.NORTH_SOUTH, false, false);
}
/* apex added end */
/**
* @generated
*/
protected IFigure createNodeShape() {
primaryShape = new InteractionUseRectangleFigure();
getPrimaryShape().setShadow(false);
return primaryShape;
}
protected final void refreshShadow() {
getPrimaryShape().setShadow(ShadowFigureHelper.getShadowFigureValue((View)getModel()));
}
/**
* Override to set the transparency to the correct figure
*/
@Override
protected void setTransparency(int transp) {
getPrimaryShape().setTransparency(transp);
}
/**
* sets the back ground color of this edit part
*
* @param color
* the new value of the back ground color
*/
@Override
protected void setBackgroundColor(Color color) {
getPrimaryShape().setBackgroundColor(color);
getPrimaryShape().setIsUsingGradient(false);
getPrimaryShape().setGradientData(-1, -1, 0);
}
/**
* Override to set the gradient data to the correct figure
*/
@Override
protected void setGradient(GradientData gradient) {
IPapyrusNodeFigure fig = getPrimaryShape();
FillStyle style = (FillStyle)getPrimaryView().getStyle(NotationPackage.Literals.FILL_STYLE);
if(gradient != null) {
fig.setIsUsingGradient(true);;
fig.setGradientData(style.getFillColor(), gradient.getGradientColor1(), gradient.getGradientStyle());
} else {
fig.setIsUsingGradient(false);
}
}
public boolean supportsGradient() {
return true;
}
/**
* @generated
*/
public InteractionUseRectangleFigure getPrimaryShape() {
return (InteractionUseRectangleFigure)primaryShape;
}
/**
* @generated
*/
protected boolean addFixedChild(EditPart childEditPart) {
if(childEditPart instanceof InteractionUseNameEditPart) {
((InteractionUseNameEditPart)childEditPart).setLabel(getPrimaryShape().getHeaderLabel());
return true;
}
if(childEditPart instanceof InteractionUseName2EditPart) {
((InteractionUseName2EditPart)childEditPart).setLabel(getPrimaryShape().getCenterLabel());
return true;
}
return false;
}
/**
* @generated
*/
protected boolean removeFixedChild(EditPart childEditPart) {
if(childEditPart instanceof InteractionUseNameEditPart) {
return true;
}
if(childEditPart instanceof InteractionUseName2EditPart) {
return true;
}
return false;
}
/**
* @generated
*/
@Override
protected void addChildVisual(EditPart childEditPart, int index) {
if(addFixedChild(childEditPart)) {
return;
}
super.addChildVisual(childEditPart, -1);
}
/**
* @generated
*/
@Override
protected void removeChildVisual(EditPart childEditPart) {
if(removeFixedChild(childEditPart)) {
return;
}
super.removeChildVisual(childEditPart);
}
/**
* @generated
*/
@Override
protected IFigure getContentPaneFor(IGraphicalEditPart editPart) {
return getContentPane();
}
/**
* @generated
*/
protected NodeFigure createNodePlate() {
String prefElementId = "InteractionUse";
IPreferenceStore store = UMLDiagramEditorPlugin.getInstance().getPreferenceStore();
String preferenceConstantWitdh = PreferenceInitializerForElementHelper.getpreferenceKey(getNotationView(), prefElementId, PreferenceConstantHelper.WIDTH);
String preferenceConstantHeight = PreferenceInitializerForElementHelper.getpreferenceKey(getNotationView(), prefElementId, PreferenceConstantHelper.HEIGHT);
DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(store.getInt(preferenceConstantWitdh), store.getInt(preferenceConstantHeight));
return result;
}
/**
* Creates figure for this edit part.
*
* Body of this method does not depend on settings in generation model so you may safely remove
* <i>generated</i> tag and modify it.
*
* @generated
*/
@Override
protected NodeFigure createNodeFigure() {
NodeFigure figure = createNodePlate();
figure.setLayoutManager(new StackLayout());
IFigure shape = createNodeShape();
figure.add(shape);
contentPane = setupContentPane(shape);
return figure;
}
/**
* Default implementation treats passed figure as content pane. Respects layout one may have set
* for generated figure.
*
* @param nodeShape
* instance of generated figure class
* @generated
*/
protected IFigure setupContentPane(IFigure nodeShape) {
if(nodeShape.getLayoutManager() == null) {
ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout();
layout.setSpacing(5);
nodeShape.setLayoutManager(layout);
}
return nodeShape; // use nodeShape itself as contentPane
}
/**
* @generated
*/
@Override
public IFigure getContentPane() {
if(contentPane != null) {
return contentPane;
}
return super.getContentPane();
}
/**
* @generated
*/
@Override
protected void setForegroundColor(Color color) {
if(primaryShape != null) {
primaryShape.setForegroundColor(color);
}
}
/**
* @generated
*/
@Override
protected void setLineWidth(int width) {
if(primaryShape instanceof Shape) {
((Shape)primaryShape).setLineWidth(width);
}else if(primaryShape instanceof NodeFigure){
((NodeFigure)primaryShape).setLineWidth(width);
}
}
/**
* @generated
*/
@Override
protected void setLineType(int style) {
if(primaryShape instanceof Shape) {
((Shape)primaryShape).setLineStyle(style);
}
}
/**
* @generated
*/
@Override
public EditPart getPrimaryChildEditPart() {
return getChildBySemanticHint(UMLVisualIDRegistry.getType(InteractionUseNameEditPart.VISUAL_ID));
}
/**
* @generated
*/
@Override
public Object getPreferredValue(EStructuralFeature feature) {
IPreferenceStore preferenceStore = (IPreferenceStore)getDiagramPreferencesHint().getPreferenceStore();
Object result = null;
if(feature == NotationPackage.eINSTANCE.getLineStyle_LineColor() || feature == NotationPackage.eINSTANCE.getFontStyle_FontColor() || feature == NotationPackage.eINSTANCE.getFillStyle_FillColor()) {
String prefColor = null;
if(feature == NotationPackage.eINSTANCE.getLineStyle_LineColor()) {
prefColor = PreferenceConstantHelper.getElementConstant("InteractionUse", PreferenceConstantHelper.COLOR_LINE);
} else if(feature == NotationPackage.eINSTANCE.getFontStyle_FontColor()) {
prefColor = PreferenceConstantHelper.getElementConstant("InteractionUse", PreferenceConstantHelper.COLOR_FONT);
} else if(feature == NotationPackage.eINSTANCE.getFillStyle_FillColor()) {
prefColor = PreferenceConstantHelper.getElementConstant("InteractionUse", PreferenceConstantHelper.COLOR_FILL);
}
result = FigureUtilities.RGBToInteger(PreferenceConverter.getColor((IPreferenceStore)preferenceStore, prefColor));
} else if(feature == NotationPackage.eINSTANCE.getFillStyle_Transparency() || feature == NotationPackage.eINSTANCE.getFillStyle_Gradient()) {
String prefGradient = PreferenceConstantHelper.getElementConstant("InteractionUse", PreferenceConstantHelper.COLOR_GRADIENT);
GradientPreferenceConverter gradientPreferenceConverter = new GradientPreferenceConverter(preferenceStore.getString(prefGradient));
if(feature == NotationPackage.eINSTANCE.getFillStyle_Transparency()) {
result = new Integer(gradientPreferenceConverter.getTransparency());
} else if(feature == NotationPackage.eINSTANCE.getFillStyle_Gradient()) {
result = gradientPreferenceConverter.getGradientData();
}
}
if(result == null) {
result = getStructuralFeatureValue(feature);
}
return result;
}
/**
* @generated
*/
public List<IElementType> getMARelTypesOnSource() {
ArrayList<IElementType> types = new ArrayList<IElementType>(7);
types.add(UMLElementTypes.Message_4003);
types.add(UMLElementTypes.Message_4004);
types.add(UMLElementTypes.Message_4005);
types.add(UMLElementTypes.Message_4006);
types.add(UMLElementTypes.Message_4007);
types.add(UMLElementTypes.Message_4008);
types.add(UMLElementTypes.Message_4009);
return types;
}
/**
* @generated
*/
public List<IElementType> getMARelTypesOnSourceAndTarget(IGraphicalEditPart targetEditPart) {
LinkedList<IElementType> types = new LinkedList<IElementType>();
if(targetEditPart instanceof InteractionEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof ConsiderIgnoreFragmentEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof CombinedFragmentEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof InteractionOperandEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof ContinuationEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof LifelineEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof ActionExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof BehaviorExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof StateInvariantEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof CombinedFragment2EditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof TimeConstraintEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof TimeObservationEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof DurationConstraintEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof DestructionOccurrenceSpecificationEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof ConstraintEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof CommentEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof DurationConstraintInMessageEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof DurationObservationEditPart) {
types.add(UMLElementTypes.Message_4003);
}
if(targetEditPart instanceof InteractionEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof ConsiderIgnoreFragmentEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof CombinedFragmentEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof InteractionOperandEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof ContinuationEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof LifelineEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof ActionExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof BehaviorExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof StateInvariantEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof CombinedFragment2EditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof TimeConstraintEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof TimeObservationEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof DurationConstraintEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof DestructionOccurrenceSpecificationEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof ConstraintEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof CommentEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof DurationConstraintInMessageEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof DurationObservationEditPart) {
types.add(UMLElementTypes.Message_4004);
}
if(targetEditPart instanceof InteractionEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof ConsiderIgnoreFragmentEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof CombinedFragmentEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof InteractionOperandEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof ContinuationEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof LifelineEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof ActionExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof BehaviorExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof StateInvariantEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof CombinedFragment2EditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof TimeConstraintEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof TimeObservationEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof DurationConstraintEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof DestructionOccurrenceSpecificationEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof ConstraintEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof CommentEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof DurationConstraintInMessageEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof DurationObservationEditPart) {
types.add(UMLElementTypes.Message_4005);
}
if(targetEditPart instanceof InteractionEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof ConsiderIgnoreFragmentEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof CombinedFragmentEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof InteractionOperandEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof ContinuationEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof LifelineEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof ActionExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof BehaviorExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof StateInvariantEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof CombinedFragment2EditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof TimeConstraintEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof TimeObservationEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof DurationConstraintEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof DestructionOccurrenceSpecificationEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof ConstraintEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof CommentEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof DurationConstraintInMessageEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof DurationObservationEditPart) {
types.add(UMLElementTypes.Message_4006);
}
if(targetEditPart instanceof InteractionEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof ConsiderIgnoreFragmentEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof CombinedFragmentEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof InteractionOperandEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof ContinuationEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof LifelineEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof ActionExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof BehaviorExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof StateInvariantEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof CombinedFragment2EditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof TimeConstraintEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof TimeObservationEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof DurationConstraintEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof DestructionOccurrenceSpecificationEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof ConstraintEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof CommentEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof DurationConstraintInMessageEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof DurationObservationEditPart) {
types.add(UMLElementTypes.Message_4007);
}
if(targetEditPart instanceof InteractionEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof ConsiderIgnoreFragmentEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof CombinedFragmentEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof InteractionOperandEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof ContinuationEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof LifelineEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof ActionExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof BehaviorExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof StateInvariantEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof CombinedFragment2EditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof TimeConstraintEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof TimeObservationEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof DurationConstraintEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof DestructionOccurrenceSpecificationEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof ConstraintEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof CommentEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof DurationConstraintInMessageEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof DurationObservationEditPart) {
types.add(UMLElementTypes.Message_4008);
}
if(targetEditPart instanceof InteractionEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof ConsiderIgnoreFragmentEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof CombinedFragmentEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof InteractionOperandEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof ContinuationEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof LifelineEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof ActionExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof BehaviorExecutionSpecificationEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof StateInvariantEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof CombinedFragment2EditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof TimeConstraintEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof TimeObservationEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof DurationConstraintEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof DestructionOccurrenceSpecificationEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof ConstraintEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof CommentEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof DurationConstraintInMessageEditPart) {
types.add(UMLElementTypes.Message_4009);
}
if(targetEditPart instanceof DurationObservationEditPart) {
types.add(UMLElementTypes.Message_4009);
}
return types;
}
/**
* @generated
*/
public List<IElementType> getMATypesForTarget(IElementType relationshipType) {
LinkedList<IElementType> types = new LinkedList<IElementType>();
if(relationshipType == UMLElementTypes.Message_4003) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4004) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4005) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4006) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4007) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4008) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4009) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
}
return types;
}
/**
* @generated
*/
public List<IElementType> getMARelTypesOnTarget() {
ArrayList<IElementType> types = new ArrayList<IElementType>(9);
types.add(UMLElementTypes.Message_4003);
types.add(UMLElementTypes.Message_4004);
types.add(UMLElementTypes.Message_4005);
types.add(UMLElementTypes.Message_4006);
types.add(UMLElementTypes.Message_4007);
types.add(UMLElementTypes.Message_4008);
types.add(UMLElementTypes.Message_4009);
types.add(UMLElementTypes.CommentAnnotatedElement_4010);
types.add(UMLElementTypes.ConstraintConstrainedElement_4011);
return types;
}
/**
* @generated
*/
public List<IElementType> getMATypesForSource(IElementType relationshipType) {
LinkedList<IElementType> types = new LinkedList<IElementType>();
if(relationshipType == UMLElementTypes.Message_4003) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4004) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4005) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4006) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4007) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4008) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.Message_4009) {
types.add(UMLElementTypes.Interaction_2001);
types.add(UMLElementTypes.ConsiderIgnoreFragment_3007);
types.add(UMLElementTypes.CombinedFragment_3004);
types.add(UMLElementTypes.InteractionOperand_3005);
types.add(UMLElementTypes.InteractionUse_3002);
types.add(UMLElementTypes.Continuation_3016);
types.add(UMLElementTypes.Lifeline_3001);
types.add(UMLElementTypes.ActionExecutionSpecification_3006);
types.add(UMLElementTypes.BehaviorExecutionSpecification_3003);
types.add(UMLElementTypes.StateInvariant_3017);
types.add(UMLElementTypes.CombinedFragment_3018);
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.TimeObservation_3020);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.DestructionOccurrenceSpecification_3022);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.Comment_3009);
types.add(UMLElementTypes.DurationConstraint_3023);
types.add(UMLElementTypes.DurationObservation_3024);
} else if(relationshipType == UMLElementTypes.CommentAnnotatedElement_4010) {
types.add(UMLElementTypes.Comment_3009);
} else if(relationshipType == UMLElementTypes.ConstraintConstrainedElement_4011) {
types.add(UMLElementTypes.TimeConstraint_3019);
types.add(UMLElementTypes.DurationConstraint_3021);
types.add(UMLElementTypes.Constraint_3008);
types.add(UMLElementTypes.DurationConstraint_3023);
}
return types;
}
/**
* Handle for gates operator and covered lifelines
*/
@Override
protected void handleNotificationEvent(Notification notification) {
Object feature = notification.getFeature();
if(UMLPackage.eINSTANCE.getInteractionUse_RefersTo().equals(feature)) {
if(notification.getOldValue() instanceof Interaction) {
notifier.unlistenAll();
// notifier.unlistenObject((Interaction) notification.getOldValue());
}
InteractionUse interactionUse = (InteractionUse)resolveSemanticElement();
CommandHelper.executeCommandWithoutHistory(getEditingDomain(), RemoveCommand.create(getEditingDomain(), interactionUse, UMLPackage.eINSTANCE.getInteractionUse_ActualGate(), interactionUse.getActualGates()), true);
if(notification.getNewValue() instanceof Interaction) {
Interaction interaction = (Interaction)notification.getNewValue();
notifier.listenObject(interaction);
List<Gate> actualGates = interactionUse.getActualGates();
List<Gate> formalGates = interaction.getFormalGates();
for(Gate formalGate : formalGates) {
Gate newActualGate = (Gate)EcoreUtil.create(UMLPackage.Literals.GATE);
newActualGate.setName(formalGate.getName());
CommandHelper.executeCommandWithoutHistory(getEditingDomain(), AddCommand.create(getEditingDomain(), resolveSemanticElement(), UMLPackage.eINSTANCE.getInteractionUse_ActualGate(), newActualGate),true);
notifier.listenObject(formalGate);
notifier.listenObject(newActualGate);
}
}
} else if(UMLPackage.eINSTANCE.getInteractionFragment_Covered().equals(feature)) {
activate();
resizeInteractionFragmentFigure();
} else if(UMLPackage.eINSTANCE.getInteraction_FormalGate().equals(feature)) {
// Handle formal gate
InteractionUse interactionUse = (InteractionUse)resolveSemanticElement();
Object oldValue = notification.getOldValue();
if(oldValue instanceof Gate) {
notifier.unlistenObject((Gate)oldValue);
List<Gate> actualGates = interactionUse.getActualGates();
for(int i = actualGates.size() - 1; i >= 0; i--) {
Gate element = actualGates.get(i);
if(((Gate)oldValue).getName().equals(element.getName())) {
notifier.unlistenObject(element);
CommandHelper.executeCommandWithoutHistory(getEditingDomain(), RemoveCommand.create(getEditingDomain(), interactionUse, UMLPackage.eINSTANCE.getInteractionUse_ActualGate(), element),true);
}
}
}
Object newValue = notification.getNewValue();
if(newValue instanceof Gate) {
Gate actualGate = interactionUse.createActualGate(((Gate)newValue).getName());
notifier.listenObject((Gate)newValue);
notifier.listenObject(actualGate);
}
} else if(UMLPackage.eINSTANCE.getInteractionUse_ActualGate().equals(feature)) {
if(notification.getEventType() == Notification.ADD) {
// Block manual creation of actual gate
if(notification.getNewValue() instanceof Gate) {
Gate newActualGate = (Gate)notification.getNewValue();
if(!checkActualGateExistence(newActualGate)) {
MessageDialog.openError(Display.getCurrent().getActiveShell(), NO_ACTUAL_GATE_MANUAL_CREATION_DLG_TITLE, NO_ACTUAL_GATE_MANUAL_CREATION_DLG_MSG);
CommandHelper.executeCommandWithoutHistory(getEditingDomain(), RemoveCommand.create(getEditingDomain(), resolveSemanticElement(), UMLPackage.eINSTANCE.getInteractionUse_ActualGate(), newActualGate), true);
}
}
} else if(notification.getEventType() == Notification.REMOVE) {
// Block manual deletion of actual gate
if(notification.getOldValue() instanceof Gate) {
Gate oldActualGate = (Gate)notification.getOldValue();
if(checkActualGateExistence(oldActualGate)) {
MessageDialog.openError(Display.getCurrent().getActiveShell(), NO_ACTUAL_GATE_MANUAL_DELETION_DLG_TITLE, NO_ACTUAL_GATE_MANUAL_DELETION_DLG_MSG);
CommandHelper.executeCommandWithoutHistory(getEditingDomain(), AddCommand.create(getEditingDomain(), resolveSemanticElement(), UMLPackage.eINSTANCE.getInteractionUse_ActualGate(), oldActualGate), true);
}
}
}
} else if(UMLPackage.eINSTANCE.getNamedElement_Name().equals(feature) && notification.getNotifier() instanceof Gate) {
Gate gate = (Gate)notification.getNotifier();
if(gate.eContainer() instanceof Interaction) {
// Handle modification of formal gate's name
InteractionUse interactionUse = (InteractionUse)resolveSemanticElement();
List<Gate> actualGates = interactionUse.getActualGates();
String oldValue = notification.getOldStringValue();
String newValue = notification.getNewStringValue();
for(Gate actualGate : actualGates) {
if(oldValue == null && actualGate.getName() == null || oldValue != null && oldValue.equals(actualGate.getName())) {
notifier.unlistenObject(actualGate); // Delete listener on gate
actualGate.setName(newValue);
notifier.listenObject(actualGate); // Add listener on gate
}
}
} else if(gate.eContainer() instanceof InteractionUse) {
// Block modification of actual gate's name
notifier.unlistenObject(gate); // Delete listener on gate
gate.setName(notification.getOldStringValue());
notifier.listenObject(gate); // Add listener on gate
}
}
if((getModel() != null) && (getModel() == notification.getNotifier())) {
if(NotationPackage.eINSTANCE.getLineStyle_LineWidth().equals(feature)) {
refreshLineWidth();
}
}
refreshShadow();
super.handleNotificationEvent(notification);
}
/**
* Check if actual gate is attached to a formal gate
*
* @return true if there is a formal gate corresponding to the actual gate
*/
private boolean checkActualGateExistence(Gate actualGate) {
InteractionUse interactionUse = (InteractionUse)resolveSemanticElement();
Interaction interaction = interactionUse.getRefersTo();
if(interaction != null) {
// Find if the corresponding formal gate exists
for(Gate formalGate : interaction.getFormalGates()) {
if(formalGate.getName().equals(actualGate.getName())) {
return true;
}
}
}
return false;
}
/**
* Activate a listener for the interactionUse to Handle notification in the refered Interaction
*/
@Override
public void activate() {
super.activate();
if(resolveSemanticElement() instanceof InteractionUse) {
InteractionUse interactionUse = (InteractionUse)resolveSemanticElement();
Interaction interaction = interactionUse.getRefersTo();
if(interaction != null) {
// activate the listener on the referred interaction
notifier.listenObject(interaction);
for(Gate formalGate : interaction.getFormalGates()) {
notifier.listenObject(formalGate);
}
}
for(Gate actualGate : interactionUse.getActualGates()) {
notifier.listenObject(actualGate);
}
}
}
/**
* Deactivate a listener for the interactionUse to handle notification in the refered
* Interaction
*/
@Override
public void deactivate() {
super.deactivate();
notifier.unlistenAll();
}
/**
* {@inheritDoc}
*/
@Override
public void removeNotify() {
notifier.unlistenAll();
super.removeNotify();
}
}