package org.insightech.er.editor.controller.editpart.element.node; import java.beans.PropertyChangeEvent; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.commands.CompoundCommand; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.ui.PlatformUI; import org.insightech.er.Activator; import org.insightech.er.db.impl.oracle.OracleDBManager; import org.insightech.er.editor.controller.command.diagram_contents.element.node.table_view.ChangeTableViewPropertyCommand; import org.insightech.er.editor.controller.command.diagram_contents.not_element.sequence.CreateSequenceCommand; import org.insightech.er.editor.controller.command.diagram_contents.not_element.sequence.DeleteSequenceCommand; import org.insightech.er.editor.controller.command.diagram_contents.not_element.trigger.CreateTriggerCommand; import org.insightech.er.editor.controller.command.diagram_contents.not_element.trigger.DeleteTriggerCommand; import org.insightech.er.editor.model.ERDiagram; import org.insightech.er.editor.model.diagram_contents.element.node.table.ERTable; import org.insightech.er.editor.model.diagram_contents.element.node.table.column.CopyColumn; import org.insightech.er.editor.model.diagram_contents.element.node.table.column.NormalColumn; import org.insightech.er.editor.model.diagram_contents.not_element.sequence.Sequence; import org.insightech.er.editor.model.diagram_contents.not_element.sequence.SequenceSet; import org.insightech.er.editor.model.diagram_contents.not_element.trigger.Trigger; import org.insightech.er.editor.model.diagram_contents.not_element.trigger.TriggerSet; import org.insightech.er.editor.model.settings.Settings; import org.insightech.er.editor.view.dialog.element.table.TableDialog; import org.insightech.er.editor.view.figure.table.TableFigure; import org.insightech.er.util.Check; public class ERTableEditPart extends TableViewEditPart implements IResizable { public ERTableEditPart() { } /** * {@inheritDoc} */ @Override protected IFigure createFigure() { ERDiagram diagram = this.getDiagram(); Settings settings = diagram.getDiagramContents().getSettings(); TableFigure figure = new TableFigure(settings); this.changeFont(figure); return figure; } @Override public void doPropertyChange(PropertyChangeEvent event) { super.doPropertyChange(event); } /** * {@inheritDoc} */ @Override public void performRequestOpen() { ERTable table = (ERTable) this.getModel(); ERDiagram diagram = this.getDiagram(); ERTable copyTable = table.copyData(); TableDialog dialog = new TableDialog(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), this.getViewer(), copyTable, diagram.getDiagramContents().getGroups()); if (dialog.open() == IDialogConstants.OK_ID) { CompoundCommand command = createChangeTablePropertyCommand(diagram, table, copyTable); this.executeCommand(command.unwrap()); } } public static CompoundCommand createChangeTablePropertyCommand( ERDiagram diagram, ERTable table, ERTable copyTable) { CompoundCommand command = new CompoundCommand(); ChangeTableViewPropertyCommand changeTablePropertyCommand = new ChangeTableViewPropertyCommand( table, copyTable); command.add(changeTablePropertyCommand); String tableName = copyTable.getPhysicalName(); if (OracleDBManager.ID.equals(diagram.getDatabase()) && !Check.isEmpty(tableName)) { NormalColumn autoIncrementColumn = copyTable.getAutoIncrementColumn(); if (autoIncrementColumn != null) { String columnName = autoIncrementColumn.getPhysicalName(); if (!Check.isEmpty(columnName)) { String triggerName = "TRI_" + tableName + "_" + columnName; String sequenceName = "SEQ_" + tableName + "_" + columnName; TriggerSet triggerSet = diagram.getDiagramContents().getTriggerSet(); SequenceSet sequenceSet = diagram.getDiagramContents().getSequenceSet(); if (!triggerSet.contains(triggerName) || !sequenceSet.contains(sequenceName)) { if (Activator.showConfirmDialog("dialog.message.confirm.create.autoincrement.trigger")) { if (!triggerSet.contains(triggerName)) { Trigger trigger = new Trigger(); trigger.setName(triggerName); trigger.setSql("BEFORE INSERT ON " + tableName + "\r\nFOR EACH ROW" + "\r\nBEGIN" + "\r\n\tSELECT " + sequenceName + ".nextval\r\n\tINTO :new." + columnName + "\r\n\tFROM dual;" + "\r\nEND"); CreateTriggerCommand createTriggerCommand = new CreateTriggerCommand( diagram, trigger); command.add(createTriggerCommand); } if (!sequenceSet.contains(sequenceName)) { Sequence sequence = new Sequence(); sequence.setName(sequenceName); sequence.setStart(1L); sequence.setIncrement(1); CreateSequenceCommand createSequenceCommand = new CreateSequenceCommand( diagram, sequence); command.add(createSequenceCommand); } } } } } NormalColumn oldAutoIncrementColumn = table.getAutoIncrementColumn(); if (oldAutoIncrementColumn != null) { if (autoIncrementColumn == null || ((CopyColumn) autoIncrementColumn).getOriginalColumn() != oldAutoIncrementColumn) { String oldTableName = table.getPhysicalName(); String columnName = oldAutoIncrementColumn .getPhysicalName(); if (!Check.isEmpty(columnName)) { String triggerName = "TRI_" + oldTableName + "_" + columnName; String sequenceName = "SEQ_" + oldTableName + "_" + columnName; TriggerSet triggerSet = diagram.getDiagramContents().getTriggerSet(); SequenceSet sequenceSet = diagram.getDiagramContents().getSequenceSet(); if (triggerSet.contains(triggerName) || sequenceSet.contains(sequenceName)) { if (Activator.showConfirmDialog("dialog.message.confirm.remove.autoincrement.trigger")) { Trigger trigger = triggerSet.get(triggerName); if (trigger != null) { DeleteTriggerCommand deleteTriggerCommand = new DeleteTriggerCommand( diagram, trigger); command.add(deleteTriggerCommand); } Sequence sequence = sequenceSet.get(sequenceName); if (sequence != null) { DeleteSequenceCommand deleteSequenceCommand = new DeleteSequenceCommand( diagram, sequence); command.add(deleteSequenceCommand); } } } } } } } return command; } }