package org.insightech.er.editor.controller.editpart.element.connection; import java.util.ArrayList; import java.util.List; import org.eclipse.draw2d.AbsoluteBendpoint; import org.eclipse.draw2d.BendpointConnectionRouter; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.PolylineConnection; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.RequestConstants; import org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.ui.PlatformUI; import org.insightech.er.editor.controller.command.diagram_contents.element.connection.relation.ChangeRelationPropertyCommand; import org.insightech.er.editor.controller.editpolicy.element.connection.CommentConnectionEditPolicy; import org.insightech.er.editor.controller.editpolicy.element.connection.ERDiagramBendpointEditPolicy; import org.insightech.er.editor.model.diagram_contents.element.connection.Bendpoint; import org.insightech.er.editor.model.diagram_contents.element.connection.ConnectionElement; import org.insightech.er.editor.model.diagram_contents.element.connection.Relation; import org.insightech.er.editor.view.dialog.element.relation.RelationDialog; import org.insightech.er.editor.view.figure.connection.ERDiagramConnection; public class CommentConnectionEditPart extends ERDiagramConnectionEditPart { /** * {@inheritDoc} */ @Override protected IFigure createFigure() { boolean bezier = this.getDiagram().getDiagramContents().getSettings() .isUseBezierCurve(); PolylineConnection connection = new ERDiagramConnection(bezier); connection.setConnectionRouter(new BendpointConnectionRouter()); connection.setLineStyle(SWT.LINE_DASH); return connection; } /** * {@inheritDoc} */ @Override protected void createEditPolicies() { this.installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new ConnectionEndpointEditPolicy()); this.installEditPolicy(EditPolicy.CONNECTION_ROLE, new CommentConnectionEditPolicy()); this.installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE, new ERDiagramBendpointEditPolicy()); } /** * {@inheritDoc} */ @Override protected void refreshBendpoints() { // ベンド・ポイントの位置情報の取得 ConnectionElement connection = (ConnectionElement) this.getModel(); // 実際のベンド・ポイントのリスト List<org.eclipse.draw2d.Bendpoint> constraint = new ArrayList<org.eclipse.draw2d.Bendpoint>(); for (Bendpoint bendPoint : connection.getBendpoints()) { constraint.add(new AbsoluteBendpoint(bendPoint.getX(), bendPoint .getY())); } this.getConnectionFigure().setRoutingConstraint(constraint); } /** * {@inheritDoc} */ @Override public void performRequest(Request request) { Relation relation = (Relation) this.getModel(); if (request.getType().equals(RequestConstants.REQ_OPEN)) { Relation copy = relation.copy(); RelationDialog dialog = new RelationDialog(PlatformUI .getWorkbench().getActiveWorkbenchWindow().getShell(), copy); if (dialog.open() == IDialogConstants.OK_ID) { ChangeRelationPropertyCommand command = new ChangeRelationPropertyCommand( relation, copy); this.getViewer().getEditDomain().getCommandStack().execute( command); } } super.performRequest(request); } }