package org.eclipse.uml2.diagram.timing.edit.policies; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.gef.Request; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editpolicies.AbstractEditPolicy; import org.eclipse.gef.requests.ChangeBoundsRequest; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.uml2.diagram.common.editpolicies.ViewHelper; import org.eclipse.uml2.diagram.timing.edit.parts.DBlockEditPart; import org.eclipse.uml2.diagram.timing.edit.parts.DTickEditPart; import org.eclipse.uml2.diagram.timing.model.timingd.DSegmentElement; import org.eclipse.uml2.diagram.timing.model.timingd.DTick; import org.eclipse.uml2.diagram.timing.part.TimingDVisualIDRegistry; public class MoveCircleEditPolicy extends AbstractEditPolicy { public static final String ROLE = MoveCircleEditPolicy.class.getName() + ":Role"; @Override public Command getCommand(Request request) { if (false == request instanceof ChangeBoundsRequest){ return null; } ChangeBoundsRequest req = (ChangeBoundsRequest)request; if (REQ_MOVE.equals(request.getType())){ return getMoveCircleTickCommand(req); } return null; } @SuppressWarnings("unchecked") private Command getMoveCircleTickCommand(ChangeBoundsRequest request){ DSegmentElement circle = (DSegmentElement) getHostImpl().resolveSemanticElement(); DTick tick = circle.getTick(); if (tick == null){ return null; } DBlockEditPart blockEP = SegmentAnchorHelper.findBlockEditPart(getHostImpl()); if (blockEP == null){ return null; } View blockView = blockEP.getNotationView(); ViewHelper viewHelper = new ViewHelper(TimingDVisualIDRegistry.TYPED_ADAPTER); View tickView = viewHelper.findChildByType(blockView, DTickEditPart.VISUAL_ID, tick); if (tickView == null){ return null; } DTickEditPart tickEditPart = (DTickEditPart) getHostImpl().getViewer().getEditPartRegistry().get(tickView); if (tickEditPart == null){ return null; } ChangeBoundsRequest moveTickRequest = new ChangeBoundsRequest(REQ_MOVE); moveTickRequest.setMoveDelta(request.getMoveDelta()); moveTickRequest.setSizeDelta(new Dimension(0, 0)); moveTickRequest.setLocation(request.getLocation()); moveTickRequest.setExtendedData(request.getExtendedData()); moveTickRequest.getExtendedData().put(MoveTickEditPolicy.KEY_INITIATED_FROM_CIRCLE, getHostImpl()); Command result = tickEditPart.getCommand(moveTickRequest); moveTickRequest.getExtendedData().put(MoveTickEditPolicy.KEY_INITIATED_FROM_CIRCLE, null); return result; } private IGraphicalEditPart getHostImpl(){ return (IGraphicalEditPart) getHost(); } }