package org.eclipse.gmf.tooling.examples.linklf.diagram.externalactivation;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
import org.eclipse.gmf.runtime.common.core.service.IOperation;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.INodeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation;
import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.tooling.examples.linklf.diagram.edit.parts.CanvasEditPart;
import org.eclipse.gmf.tooling.runtime.linklf.LinkLFShapeNodeAnchorDelegate;
import org.eclipse.gmf.tooling.runtime.linklf.editparts.LinkLFAnchorsDelegatingEditPart;
import org.eclipse.gmf.tooling.runtime.linklf.editparts.LinkLFConnectionNodeEditPart;
import org.eclipse.gmf.tooling.runtime.linklf.policies.AdjustBorderItemAnchorsEditPolicy;
import org.eclipse.gmf.tooling.runtime.linklf.policies.AdjustImplicitlyMovedLinksEditPolicy;
import org.eclipse.gmf.tooling.runtime.linklf.policies.AdjustSyntheticBendpointsEditPolicy;
import org.eclipse.gmf.tooling.runtime.linklf.policies.LinksLFGraphicalNodeEditPolicy;
public class LinkLFEnablerEditPolicyProvider extends AbstractProvider implements IEditPolicyProvider {
@Override
public boolean provides(IOperation op) {
if (false == op instanceof CreateEditPoliciesOperation) {
return false;
}
CreateEditPoliciesOperation operation = (CreateEditPoliciesOperation) op;
EditPart host = operation.getEditPart();
if (false == host instanceof IGraphicalEditPart) {
return false;
}
View notationView = ((IGraphicalEditPart) host).getNotationView();
if (notationView == null) {
return false;
}
Diagram diagram = notationView.getDiagram();
if (!isSupportedDiagram(diagram)) {
return false;
}
return true;
}
private boolean isSupportedDiagram(Diagram diagram) {
return diagram != null && CanvasEditPart.MODEL_ID.equals(diagram.getType());
}
@Override
public void createEditPolicies(EditPart editPart) {
if (editPart instanceof LinkLFConnectionNodeEditPart) {
installLinkEditPolicies((LinkLFConnectionNodeEditPart) editPart);
} else if (editPart instanceof INodeEditPart) {
installNodeEditPolicies((INodeEditPart) editPart);
}
}
protected void installLinkEditPolicies(LinkLFConnectionNodeEditPart linkEP) {
linkEP.setLinkLFEnabled(true);
}
protected void installNodeEditPolicies(INodeEditPart nodeEP) {
if (nodeEP instanceof LinkLFAnchorsDelegatingEditPart) {
LinkLFAnchorsDelegatingEditPart linklfEP = (LinkLFAnchorsDelegatingEditPart) nodeEP;
linklfEP.setAnchorDelegate(new LinkLFShapeNodeAnchorDelegate(linklfEP.getNodeFigure()));
}
nodeEP.installEditPolicy(AdjustSyntheticBendpointsEditPolicy.ROLE, new AdjustSyntheticBendpointsEditPolicy());
nodeEP.installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new LinksLFGraphicalNodeEditPolicy());
nodeEP.installEditPolicy(AdjustImplicitlyMovedLinksEditPolicy.ROLE, new AdjustImplicitlyMovedLinksEditPolicy());
if (nodeEP instanceof IBorderItemEditPart) {
nodeEP.installEditPolicy(AdjustBorderItemAnchorsEditPolicy.ROLE, new AdjustBorderItemAnchorsEditPolicy());
}
}
}