diff options
Diffstat (limited to 'bundles/org.eclipse.wst.wsdl.ui/src/org/eclipse/wst/wsdl/ui/internal/actions/WSDLDragReorderAction.java')
-rw-r--r-- | bundles/org.eclipse.wst.wsdl.ui/src/org/eclipse/wst/wsdl/ui/internal/actions/WSDLDragReorderAction.java | 428 |
1 files changed, 0 insertions, 428 deletions
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src/org/eclipse/wst/wsdl/ui/internal/actions/WSDLDragReorderAction.java b/bundles/org.eclipse.wst.wsdl.ui/src/org/eclipse/wst/wsdl/ui/internal/actions/WSDLDragReorderAction.java deleted file mode 100644 index 4c1d9b238..000000000 --- a/bundles/org.eclipse.wst.wsdl.ui/src/org/eclipse/wst/wsdl/ui/internal/actions/WSDLDragReorderAction.java +++ /dev/null @@ -1,428 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.wst.wsdl.ui.internal.actions; - -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import javax.wsdl.OperationType; - - -import org.eclipse.draw2d.IFigure; -import org.eclipse.draw2d.Polyline; -import org.eclipse.draw2d.geometry.Point; -import org.eclipse.draw2d.geometry.PointList; -import org.eclipse.draw2d.geometry.Rectangle; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.wst.wsdl.Fault; -import org.eclipse.wst.wsdl.Input; -import org.eclipse.wst.wsdl.Message; -import org.eclipse.wst.wsdl.Output; -import org.eclipse.wst.wsdl.Part; -import org.eclipse.wst.wsdl.WSDLElement; -import org.eclipse.wst.wsdl.ui.internal.WSDLEditor; -import org.eclipse.wst.wsdl.ui.internal.actions.WSDLDragAction; -import org.eclipse.wst.wsdl.ui.internal.graph.WSDLComponentViewer; -import org.eclipse.wst.wsdl.ui.internal.graph.editparts.WSDLTreeNodeEditPart; -import org.eclipse.wst.wsdl.internal.impl.OperationImpl; -import org.eclipse.gef.EditPart; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - - -public class WSDLDragReorderAction extends WSDLDragAction -{ - protected WSDLEditor wsdlEditor; - protected WSDLElement movingChild; - protected WSDLElement newParent; - protected WSDLTreeNodeEditPart leftSiblingEditPart; - protected WSDLTreeNodeEditPart rightSiblingEditPart; - protected WSDLElement leftSibElement; - protected WSDLElement rightSibElement; - protected boolean canNeverExecute = false; - - public WSDLDragReorderAction(WSDLTreeNodeEditPart movingChildEditPart, EditPart pointerEditPart, Point pointerLocation) { - this.movingChildEditPart = movingChildEditPart; - this.pointerLocation = pointerLocation; - - EditPart possibleParent = getParentEditPart(pointerEditPart); - - if (!(possibleParent instanceof WSDLTreeNodeEditPart)) { - canNeverExecute = true; - return; - } - - WSDLTreeNodeEditPart targetParentEditPart = (WSDLTreeNodeEditPart) possibleParent; - wsdlEditor = ((WSDLComponentViewer) possibleParent.getViewer()).getWSDLEditor(); - - if (pointerEditPart.getParent() != null) { - // Sort the siblings (and itself) - List targetEditPartSiblings = pointerEditPart.getParent().getChildren(); - Collections.sort(targetEditPartSiblings, new VerticalEditPartComparator()); - - // Get 'left' and 'right' siblings - leftSiblingEditPart = getVerticalLeftSibling(targetEditPartSiblings, movingChildEditPart, pointerLocation); - rightSiblingEditPart = getVerticalRightSibling(targetEditPartSiblings, movingChildEditPart, pointerLocation); - - if (movingChildEditPart != null) - movingChild = (WSDLElement) movingChildEditPart.getModel(); - if (leftSiblingEditPart != null) - leftSibElement = (WSDLElement) leftSiblingEditPart.getModel(); - if (rightSiblingEditPart != null) - rightSibElement = (WSDLElement) rightSiblingEditPart.getModel(); - - newParent = (WSDLElement) targetParentEditPart.getModel(); - } - else { - newParent = (WSDLElement) targetParentEditPart.getModel(); - leftSibElement = null; - rightSibElement= null; - } - } - - public boolean canExecute() - { - boolean result = false; - - if (canNeverExecute || newParent == null || movingChild == null) { - return false; - } - - if (movingChild instanceof Input) { - if (!(leftSibElement instanceof Fault) && newParent.equals(movingChild.eContainer())) { - result = true; - } - } - else if (movingChild instanceof Output) { - if (!(leftSibElement instanceof Fault) && newParent.equals(movingChild.eContainer())) { - result = true; - } - } - else if (movingChild instanceof Part) { - if (newParent instanceof Message && newParent.equals(movingChild.eContainer())) { - result = true; - } - } - - return result; - } - - - /* - * @see IAction#run() - */ - public void run() - { -// beginRecording(); - if (canExecute()) { - if (movingChild instanceof Input) { - Input input = (Input) movingChild; - OperationImpl operation = (OperationImpl) input.eContainer(); - - if (leftSiblingEditPart == null) { - // Input/Output style - setInputOutputOrder(operation, true); - } - else { - // Output/Input style - setInputOutputOrder(operation, false); - } - } - else if (movingChild instanceof Output) { - Output output = (Output) movingChild; - OperationImpl operation = (OperationImpl) output.eContainer(); - - if (leftSiblingEditPart == null) { - // Output/Input style - setInputOutputOrder(operation, false); - } - else { - // Input/Output style - setInputOutputOrder(operation, true); - } - } - else if (movingChild instanceof Part) { - Message message = (Message) newParent; - List parts = message.getEParts(); - - parts.remove(movingChild); - - int leftIndex = -1, rightIndex = -1; - if (leftSibElement != null) { - leftIndex = parts.indexOf(leftSibElement); - } - if (rightSibElement != null) { - rightIndex = parts.indexOf(rightSibElement); - } - - if (leftIndex == -1) { - // Add moving child to the front - parts.add(0, movingChild); - } - else if (rightIndex == -1) { - // Add moving child to the end - parts.add(movingChild); - } - else { - // Add moving child after the occurence of the left sibling - parts.add(leftIndex + 1, movingChild); - } - } - wsdlEditor.getSelectionManager().setSelection(new StructuredSelection(movingChild)); - } -// endRecording(); - } - - public IFigure getFeedbackFigure() { - IFigure feedbackFigure = null; - if (feedbackFigure == null && movingChildEditPart instanceof WSDLTreeNodeEditPart) - { - feedbackFigure = new Polyline(); -// polyLine.setLineStyle(Graphics.LINE_DASHDOT); - ((Polyline)feedbackFigure).setLineWidth(2); - drawLines((Polyline) feedbackFigure); - } - - return feedbackFigure; - } - - /* Return a PointList which will be used to add a feedback figure. The feedback figure will be a - * Polyline composed of the Points in the PointList - */ - private PointList drawLines(Polyline polyLine) { - PointList pointList = new PointList(); - - if (leftSiblingEditPart != null) { - Rectangle leftRectangle = leftSiblingEditPart.getFigure().getBounds(); - int xCoord = leftRectangle.x + 15; - int yCoord = leftRectangle.y; - int height = leftRectangle.height; - int width = leftRectangle.width - 15; - - // Draw left end line - addLineToPolyline(polyLine, xCoord, yCoord + height + 3, xCoord, yCoord + height - 3); - addLineToPolyline(polyLine, xCoord, yCoord + height - 3, xCoord, yCoord + height); - - // Draw horizontal line - addLineToPolyline(polyLine, xCoord, yCoord + height, xCoord + width, yCoord + height); - - // Draw right end line - addLineToPolyline(polyLine, xCoord + width, yCoord + height, xCoord + width, yCoord + height - 3); - addLineToPolyline(polyLine, xCoord + width, yCoord + height, xCoord + width, yCoord + height + 3); - } - else if (rightSiblingEditPart != null) { - Rectangle rightRectangle = rightSiblingEditPart.getFigure().getBounds(); - int xCoord = rightRectangle.x + 15; - int yCoord = rightRectangle.y; - int height = rightRectangle.height; - int width = rightRectangle.width - 15; - - // Draw left end line - addLineToPolyline(polyLine, xCoord, yCoord + 3, xCoord, yCoord - 3); - addLineToPolyline(polyLine, xCoord, yCoord - 3, xCoord, yCoord); - - // Draw horizontal line - addLineToPolyline(polyLine, xCoord, yCoord, xCoord + width, yCoord); - - // Draw right end line - addLineToPolyline(polyLine, xCoord + width, yCoord, xCoord + width, yCoord - 3); - addLineToPolyline(polyLine, xCoord + width, yCoord, xCoord + width, yCoord + 3); - } - - return pointList; - } - - protected Polyline addLineToPolyline(Polyline polyline, int x1, int y1, int x2, int y2) { - polyline.addPoint(new Point(x1, y1)); - polyline.addPoint(new Point(x2, y2)); - - return polyline; - } - - /* - * Pre-condition: The List siblings should be sorted by it's y-coordinate - */ - private WSDLTreeNodeEditPart getVerticalRightSibling(List siblings, WSDLTreeNodeEditPart movingEditPart, Point pointerLocation) { - WSDLTreeNodeEditPart rightSibling = null; - int pointerYLocation = pointerLocation.y; - - for (int index = 0; index < siblings.size(); index++) { - WSDLTreeNodeEditPart sibling = (WSDLTreeNodeEditPart) siblings.get(index); - int siblingYLocation = sibling.getSelectionFigure().getBounds().getCenter().y; - - if (siblingYLocation > pointerYLocation) { - rightSibling = sibling; - break; - } - } - - return rightSibling; - } - - /* - * Pre-condition: The List siblings should be sorted by it's y-coordinate - */ - private WSDLTreeNodeEditPart getVerticalLeftSibling(List siblings, WSDLTreeNodeEditPart movingEditPart, Point pointerLocation) { - WSDLTreeNodeEditPart leftSibling = null; - int pointerYLocation = pointerLocation.y; - - int index; - for (index = 0; index < siblings.size(); index++) { - WSDLTreeNodeEditPart sibling = (WSDLTreeNodeEditPart) siblings.get(index); - int siblingYLocation = sibling.getSelectionFigure().getBounds().getCenter().y; - - if (siblingYLocation > pointerYLocation) { - if (index > 0) { - leftSibling = (WSDLTreeNodeEditPart) siblings.get(index - 1); - } - - break; - } - } - - if (index == siblings.size()) { - leftSibling = (WSDLTreeNodeEditPart) siblings.get(index - 1); - } - - return leftSibling; - } - - protected EditPart getParentEditPart(EditPart target) - { - return target.getParent(); - } - - // boolean inputFirst = true if the Input is the first in the order of Input and Output - private void setInputOutputOrder(OperationImpl operation, boolean inputFirst) { - // We need to determine more info before we can set the style - if (inputFirst && operation.getEInput() != null) { - // Check if there is an Output - if (operation.getEOutput() != null) { - // Order is: Input, Output -/* - Node operationNode = operation.getElement(); - NodeList childNodeList = operationNode.getChildNodes(); - - Node inputNode = operation.getEInput().getElement(); - Node outputNode = operation.getEOutput().getElement(); - - Node inputTextNode = inputNode.getNextSibling(); - Node outputTextNode = outputNode.getNextSibling(); - - int inputNodeIndex = getNodeIndex(childNodeList, inputNode); - int outputNodeIndex = getNodeIndex(childNodeList, outputNode); - - if (inputNodeIndex > outputNodeIndex) { - // We need to swap Input and Output - operationNode.removeChild(inputNode); - operationNode.removeChild(outputNode); - - operationNode.insertBefore(inputNode, outputTextNode); - operationNode.insertBefore(outputNode, inputTextNode); - } -*/ - - setOperationStyle(operation, OperationType.REQUEST_RESPONSE); - } - /* - else { - // Order is: Input - setOperationStyle(operation, OperationType.ONE_WAY); - } - */ - } - else if (operation.getEOutput() != null) { - // Check if there is an Input - if (operation.getEInput() != null) { - // Order is: Output, Input -/* - Node operationNode = operation.getElement(); - NodeList childNodeList = operationNode.getChildNodes(); - - Node inputNode = operation.getEInput().getElement(); - Node outputNode = operation.getEOutput().getElement(); - - Node inputTextNode = inputNode.getNextSibling(); - Node outputTextNode = outputNode.getNextSibling(); - - int inputNodeIndex = getNodeIndex(childNodeList, inputNode); - int outputNodeIndex = getNodeIndex(childNodeList, outputNode); - - if (outputNodeIndex > inputNodeIndex) { - // We need to swap Input and Output - operationNode.removeChild(inputNode); - operationNode.removeChild(outputNode); - - operationNode.insertBefore(inputNode, outputTextNode); - operationNode.insertBefore(outputNode, inputTextNode); - } -*/ - setOperationStyle(operation, OperationType.SOLICIT_RESPONSE); - } - /* - else { - // Order is: Output - setOperationStyle(operation, OperationType.NOTIFICATION); - } - */ - } - } - -/* - * return -1 if node is not found in the given nodeList - */ - private int getNodeIndex(NodeList nodeList, Node node) { - int index = 0; - while (index < nodeList.getLength() && !(nodeList.item(index).equals(node))) { - index++; - } - - if (index >= nodeList.getLength()) { - index = -1; - } - - return index; - } - - private void setOperationStyle(OperationImpl operation, OperationType operationType) { - // If there is no style to begin with, don't set one now - if (operation.getStyle() == null) { - return; - } - - operation.setStyle(operationType); - } - - private class VerticalEditPartComparator implements Comparator { - - public VerticalEditPartComparator() { - } - - public int compare(Object part1, Object part2) { - int compareValue = 0; - - if (part1 instanceof WSDLTreeNodeEditPart && part2 instanceof WSDLTreeNodeEditPart) { - WSDLTreeNodeEditPart editPart1 = (WSDLTreeNodeEditPart) part1; - WSDLTreeNodeEditPart editPart2 = (WSDLTreeNodeEditPart) part2; - - int editPart1Y = editPart1.getSelectionFigure().getBounds().getCenter().y; - int editPart2Y = editPart2.getSelectionFigure().getBounds().getCenter().y; - - Integer integerPart1 = new Integer(editPart1Y); - Integer integerPart2 = new Integer(editPart2Y); - - compareValue = integerPart1.compareTo(integerPart2); - } - - return compareValue; - } - } -} |