package org.eclipse.uml2.diagram.csd.edit.policies; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand; import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest; import org.eclipse.gmf.runtime.notation.NotationPackage; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.uml2.diagram.common.editpolicies.AbstractVisualEffectEditPolicy; import org.eclipse.uml2.diagram.csd.edit.parts.PortIsBehavior2EditPart; import org.eclipse.uml2.diagram.csd.edit.parts.PortIsBehaviorEditPart; import org.eclipse.uml2.diagram.csd.part.UMLVisualIDRegistry; import org.eclipse.uml2.uml.Port; import org.eclipse.uml2.uml.UMLPackage; public class PortIsBehaviorVisualEffectEditPolicy extends AbstractVisualEffectEditPolicy { @Override protected void installVisualEffect() { } @Override protected void refreshVisualEffect() { EObject semanticHost = getSemanticHost(); if (false == semanticHost instanceof Port) { return; } Port port = (Port) semanticHost; IGraphicalEditPart editPart = getHostImpl(); View view = editPart.getNotationView(); EList children = view.getChildren(); for (Object obj : children) { View child = (View) obj; if (false == UMLVisualIDRegistry.getType(PortIsBehaviorEditPart.VISUAL_ID).equals(child.getType()) && false == UMLVisualIDRegistry.getType(PortIsBehavior2EditPart.VISUAL_ID).equals(child.getType())) { continue; } if (child.isVisible() != port.isBehavior()) { SetRequest request = new SetRequest(editPart.getEditingDomain(), child, NotationPackage.eINSTANCE.getView_Visible(), port.isBehavior()); executeCommand(new ICommandProxy(new SetValueCommand(request))); } } } @Override protected boolean shouldHandleNotificationEvent(Notification event) { return UMLPackage.eINSTANCE.getPort_IsBehavior() == event.getFeature(); } }