package org.eclipse.uml2.diagram.timing.edit.policies.links;
import java.util.Collections;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy;
import org.eclipse.gef.requests.CreateConnectionRequest;
import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter;
import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewAndElementRequest;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeRequest;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.uml2.diagram.timing.edit.parts.DBlockEditPart;
import org.eclipse.uml2.diagram.timing.edit.policies.SegmentAnchor;
import org.eclipse.uml2.diagram.timing.edit.policies.SegmentAnchorHelper;
import org.eclipse.uml2.diagram.timing.providers.TimingDElementTypes;
public class ValueLineCreateValueSwitchEditPolicy extends GraphicalNodeEditPolicy {
public static final String ROLE = ValueLineCreateValueSwitchEditPolicy.class.getName() + ":Role";
@Override
protected Command getConnectionCompleteCommand(CreateConnectionRequest request) {
if (request instanceof CreateConnectionViewAndElementRequest){
CreateConnectionViewAndElementRequest ccvaeReq = (CreateConnectionViewAndElementRequest)request;
CreateElementRequestAdapter requestAdapter = ccvaeReq.getConnectionViewAndElementDescriptor().getCreateElementRequestAdapter();
IElementType elementType = (IElementType)requestAdapter.getAdapter(IElementType.class);
if (TimingDElementTypes.DStateSwitch_4001.equals(elementType)){
return getValueSwitchCompleteCommand(ccvaeReq);
}
}
return null;
}
private Command getValueSwitchCompleteCommand(CreateConnectionViewAndElementRequest ccvaeReq) {
SegmentAnchorHelper segmentAnchorHelper = new SegmentAnchorHelper((DBlockEditPart) getHost().getParent());
SegmentAnchor anchor = segmentAnchorHelper.findSegmentAnchor(ccvaeReq.getLocation());
PreferencesHint prefHint = ((IGraphicalEditPart)getHost()).getDiagramPreferencesHint();
CreateUnspecifiedTypeRequest segmentRequest = new CreateUnspecifiedTypeRequest(Collections.singletonList(TimingDElementTypes.DSegment_3003), prefHint);
segmentRequest.setLocation(ccvaeReq.getLocation());
SegmentAnchor.Util.putAnchor(anchor, segmentRequest);
Command command = getHost().getCommand(segmentRequest);
return command;
}
@Override
protected Command getConnectionCreateCommand(CreateConnectionRequest request) {
return null;
}
@Override
protected Command getReconnectSourceCommand(ReconnectRequest request) {
return null;
}
@Override
protected Command getReconnectTargetCommand(ReconnectRequest request) {
return null;
}
}