package org.insightech.er.editor.controller.command.diagram_contents.element.node; import java.util.ArrayList; import java.util.List; import org.eclipse.draw2d.FigureCanvas; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; import org.insightech.er.editor.EROneDiagramEditor; import org.insightech.er.editor.controller.command.AbstractCommand; import org.insightech.er.editor.model.diagram_contents.element.node.ermodel.ERModel; import org.insightech.er.editor.model.diagram_contents.element.node.table.ERTable; import org.insightech.er.editor.model.diagram_contents.element.node.table.ERVirtualTable; import org.insightech.er.editor.view.dialog.dbexport.ErrorDialog; public class PlaceTableCommand extends AbstractCommand { private ERTable orgTable; private List<ERTable> orgTables; private ERVirtualTable virtualTable; private List<ERVirtualTable> virtualTables; public PlaceTableCommand(ERTable orgTable) { this.orgTable = orgTable; } public PlaceTableCommand(List orgTables) { this.orgTables = orgTables; } @Override protected void doExecute() { if (orgTables != null) { // �����z�u EROneDiagramEditor modelEditor = (EROneDiagramEditor) orgTables.get(0).getDiagram().getEditor().getActiveEditor(); Point cursorLocation = Display.getCurrent().getCursorLocation(); Point point = modelEditor.getGraphicalViewer().getControl().toControl(cursorLocation); FigureCanvas canvas = (FigureCanvas) modelEditor.getGraphicalViewer().getControl(); point.x += canvas.getHorizontalBar().getSelection(); point.y += canvas.getVerticalBar().getSelection(); virtualTables = new ArrayList<ERVirtualTable>(); for (ERTable curTable : orgTables) { boolean cantPlace = false; for (ERVirtualTable vtable : modelEditor.getModel().getTables()) { if (vtable.getRawTable().equals(curTable)) { cantPlace = true; } } if (cantPlace) continue; ERModel model = curTable.getDiagram().getCurrentErmodel(); virtualTable = new ERVirtualTable(model, curTable); virtualTable.setPoint(point.x, point.y); model.addTable(virtualTable); virtualTables.add(virtualTable); // ��‚��‰E���ɂ��炵�Ĕz�u point.x += 32; point.y += 32; } // modelEditor.setContents(orgTables.get(0).getDiagram().getCurrentErmodel()); modelEditor.refresh(); } else { ERTable curTable = orgTable; EROneDiagramEditor modelEditor = (EROneDiagramEditor) curTable.getDiagram().getEditor().getActiveEditor(); // ���Ƀr���[��ɓ���e�[�u������������u���Ȃ� for (ERVirtualTable vtable : modelEditor.getModel().getTables()) { if (vtable.getRawTable().equals(curTable)) { ErrorDialog dialog = new ErrorDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "���ɂ��̃e�[�u���̓r���[�ɔz�u����Ă��܂��B�r���[���ɓ���e�[�u���͈�‚����u���܂���B"); dialog.open(); return; } } Point cursorLocation = Display.getCurrent().getCursorLocation(); Point point = modelEditor.getGraphicalViewer().getControl().toControl(cursorLocation); FigureCanvas canvas = (FigureCanvas) modelEditor.getGraphicalViewer().getControl(); point.x += canvas.getHorizontalBar().getSelection(); point.y += canvas.getVerticalBar().getSelection(); ERModel model = curTable.getDiagram().getCurrentErmodel(); virtualTable = new ERVirtualTable(model, curTable); virtualTable.setPoint(point.x, point.y); model.addTable(virtualTable); // modelEditor.setContents(model); modelEditor.refresh(); } } @Override protected void doUndo() { if (orgTables != null) { ERModel model = orgTables.get(0).getDiagram().getCurrentErmodel(); for (ERVirtualTable vtable : virtualTables) { model.remove(vtable); } EROneDiagramEditor modelEditor = (EROneDiagramEditor) orgTables.get(0).getDiagram().getEditor().getActiveEditor(); modelEditor.setContents(model); } else { ERModel model = orgTable.getDiagram().getCurrentErmodel(); model.remove(virtualTable); EROneDiagramEditor modelEditor = (EROneDiagramEditor) orgTable.getDiagram().getEditor().getActiveEditor(); modelEditor.setContents(model); } } }