package org.insightech.er.editor.controller.editpolicy.element.node;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Handle;
import org.eclipse.gef.editpolicies.ResizableEditPolicy;
import org.eclipse.gef.handles.NonResizableHandleKit;
import org.eclipse.gef.handles.ResizableHandleKit;
import org.eclipse.gef.handles.ResizeHandle;
import org.insightech.er.editor.model.ERDiagram;
import org.insightech.er.editor.model.ERModelUtil;
import org.insightech.er.editor.model.ViewableModel;
import org.insightech.er.editor.model.diagram_contents.element.node.NodeElement;
import org.insightech.er.editor.model.diagram_contents.element.node.category.Category;
import org.insightech.er.editor.model.diagram_contents.element.node.model_properties.ModelProperties;
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.figure.handle.ERDiagramMoveHandle;
import org.insightech.er.editor.view.figure.handle.ERDiagramResizeHandle;
public class NodeElementSelectionEditPolicy extends ResizableEditPolicy {
@SuppressWarnings("unchecked")
@Override
protected List createSelectionHandles() {
List selectedEditParts = this.getHost().getViewer()
.getSelectedEditParts();
if (selectedEditParts.size() == 1) {
ViewableModel currentElement = (ViewableModel) getHost().getModel();
if (!(currentElement instanceof Category)
&& !(currentElement instanceof ModelProperties)) {
ERDiagram diagram = ERModelUtil.getDiagram(getHost().getRoot().getContents());
ViewableModel targetElement = currentElement;
if (currentElement instanceof ERVirtualTable) {
// �r���[��ł̓e�[�u�����̂��X�V����
targetElement = ((ERVirtualTable)currentElement).getRawTable();
}
List<NodeElement> nodeElementList = diagram
.getDiagramContents().getContents()
.getNodeElementList();
nodeElementList.remove(targetElement);
nodeElementList.add((NodeElement) targetElement);
getHost().getRoot().getContents().refresh();
}
}
List list = new ArrayList();
int directions = this.getResizeDirections();
if (directions == 0) {
// NonResizableHandleKit.addHandles((GraphicalEditPart) getHost(),
// list);
} else if (directions != -1) {
// 0
list.add(new ERDiagramMoveHandle((GraphicalEditPart) getHost()));
// 1
if ((directions & PositionConstants.EAST) != 0) {
ResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.EAST);
} else {
NonResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.EAST);
}
// 2
if ((directions & PositionConstants.SOUTH_EAST) == PositionConstants.SOUTH_EAST) {
ResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.SOUTH_EAST);
} else {
NonResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.SOUTH_EAST);
}
// 3
if ((directions & PositionConstants.SOUTH) != 0) {
ResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.SOUTH);
} else {
NonResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.SOUTH);
}
// 4
if ((directions & PositionConstants.SOUTH_WEST) == PositionConstants.SOUTH_WEST) {
ResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.SOUTH_WEST);
} else {
NonResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.SOUTH_WEST);
}
// 5
if ((directions & PositionConstants.WEST) != 0) {
ResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.WEST);
} else {
NonResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.WEST);
}
// 6
if ((directions & PositionConstants.NORTH_WEST) == PositionConstants.NORTH_WEST) {
ResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.NORTH_WEST);
} else {
NonResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.NORTH_WEST);
}
// 7
if ((directions & PositionConstants.NORTH) != 0) {
ResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.NORTH);
} else {
NonResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.NORTH);
}
// 8
if ((directions & PositionConstants.NORTH_EAST) == PositionConstants.NORTH_EAST) {
ResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.NORTH_EAST);
} else {
NonResizableHandleKit.addHandle((GraphicalEditPart) getHost(),
list, PositionConstants.NORTH_EAST);
}
} else {
addHandles((GraphicalEditPart) getHost(), list);
}
return list;
}
@SuppressWarnings("unchecked")
public static void addHandles(GraphicalEditPart part, List handles) {
handles.add(new ERDiagramMoveHandle(part));
handles.add(createHandle(part, PositionConstants.EAST));
handles.add(createHandle(part, PositionConstants.SOUTH_EAST));
handles.add(createHandle(part, PositionConstants.SOUTH));
handles.add(createHandle(part, PositionConstants.SOUTH_WEST));
handles.add(createHandle(part, PositionConstants.WEST));
handles.add(createHandle(part, PositionConstants.NORTH_WEST));
handles.add(createHandle(part, PositionConstants.NORTH));
handles.add(createHandle(part, PositionConstants.NORTH_EAST));
}
static Handle createHandle(GraphicalEditPart owner, int direction) {
ResizeHandle handle = new ERDiagramResizeHandle(owner, direction);
return handle;
}
}