package org.insightech.er.editor.controller.editpart.outline.table; import java.beans.PropertyChangeEvent; import org.eclipse.gef.DragTracker; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.RequestConstants; import org.eclipse.gef.tools.SelectEditPartTracker; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.ui.PlatformUI; import org.insightech.er.Activator; import org.insightech.er.ImageKey; import org.insightech.er.editor.controller.command.diagram_contents.element.connection.relation.ChangeRelationPropertyCommand; import org.insightech.er.editor.controller.editpart.outline.AbstractOutlineEditPart; import org.insightech.er.editor.controller.editpolicy.element.connection.RelationEditPolicy; import org.insightech.er.editor.model.ERDiagram; 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.model.diagram_contents.element.node.table.ERTable; import org.insightech.er.editor.model.diagram_contents.element.node.table.column.NormalColumn; import org.insightech.er.editor.model.settings.Settings; import org.insightech.er.editor.view.dialog.element.relation.RelationDialog; import org.insightech.er.util.Format; public class RelationOutlineEditPart extends AbstractOutlineEditPart { public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(ERTable.PROPERTY_CHANGE_PHYSICAL_NAME)) { refreshVisuals(); } else if (evt.getPropertyName().equals( ConnectionElement.PROPERTY_CHANGE_CONNECTION_ATTRIBUTE)) { refreshVisuals(); } } /** * {@inheritDoc} */ @Override protected void refreshOutlineVisuals() { Relation model = (Relation) this.getModel(); ERDiagram diagram = (ERDiagram) this.getRoot().getContents().getModel(); int viewMode = diagram.getDiagramContents().getSettings() .getOutlineViewMode(); boolean first = true; StringBuilder sb = new StringBuilder(); for (NormalColumn foreignKeyColumn : model.getForeignKeyColumns()) { if (first) { first = false; } else { sb.append(", "); } if (viewMode == Settings.VIEW_MODE_PHYSICAL) { sb .append(Format.null2blank(foreignKeyColumn .getPhysicalName())); } else if (viewMode == Settings.VIEW_MODE_LOGICAL) { sb.append(Format.null2blank(foreignKeyColumn.getLogicalName())); } else { sb.append(Format.null2blank(foreignKeyColumn.getLogicalName())); sb.append("/"); sb .append(Format.null2blank(foreignKeyColumn .getPhysicalName())); } } this.setWidgetText(sb.toString()); this.setWidgetImage(Activator.getImage(ImageKey.FOREIGN_KEY)); } /** * {@inheritDoc} */ @Override protected void createEditPolicies() { this.installEditPolicy(EditPolicy.CONNECTION_ROLE, new RelationEditPolicy()); } /** * {@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.execute(command); } } super.performRequest(request); } /** * {@inheritDoc} */ @Override public DragTracker getDragTracker(Request req) { return new SelectEditPartTracker(this); } }