http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DefaultGraphEventManager.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DefaultGraphEventManager.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DefaultGraphEventManager.java deleted file mode 100644 index d434e48..0000000 --- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DefaultGraphEventManager.java +++ /dev/null @@ -1,271 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2007 The University of Manchester - * - * Modifications to the initial code base are copyright of their - * respective authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.workbench.models.graph; - -import static javax.swing.SwingUtilities.convertPointFromScreen; -import static javax.swing.SwingUtilities.invokeLater; -import static net.sf.taverna.t2.workbench.models.graph.GraphController.PortStyle.ALL; -import static net.sf.taverna.t2.workbench.models.graph.GraphController.PortStyle.NONE; - -import java.awt.Component; -import java.awt.Point; -import java.awt.event.ActionEvent; -import java.net.URI; -import java.util.List; - -import javax.swing.AbstractAction; -import javax.swing.JMenu; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; - -import net.sf.taverna.t2.ui.menu.MenuManager; -import uk.org.taverna.scufl2.api.activity.Activity; -import uk.org.taverna.scufl2.api.common.Scufl2Tools; -import uk.org.taverna.scufl2.api.core.Processor; -import uk.org.taverna.scufl2.api.profiles.ProcessorBinding; - -/** - * Manager for handling UI events on GraphElements. - * - * @author David Withers - */ -public class DefaultGraphEventManager implements GraphEventManager { - private static final URI NESTED_WORKFLOW_URI = URI - .create("http://ns.taverna.org.uk/2010/activity/nested-workflow"); - - private GraphController graphController; - private Component component; - private JPopupMenu menu; - private MenuManager menuManager; - - private Scufl2Tools scufl2Tools = new Scufl2Tools(); - - /** - * Constructs a new instance of GraphEventManager. - * - * @param graphController - * @param component - * component to use when displaying popup menus - */ - public DefaultGraphEventManager(GraphController graphController, Component component, - MenuManager menuManager) { - this.graphController = graphController; - this.component = component; - this.menuManager = menuManager; - } - - @Override - public void mouseClicked(final GraphElement graphElement, short button, boolean altKey, - boolean ctrlKey, boolean metaKey, final int x, final int y, int screenX, int screenY) { - Object dataflowObject = graphElement.getWorkflowBean(); - - // For both left and right click - add to selection model - if (graphController.getDataflowSelectionModel() != null) - graphController.getDataflowSelectionModel().addSelection(dataflowObject); - - if ((button != 2) && !ctrlKey)return; - - // If this was a right click - show a pop-up as well - if (dataflowObject == null) - menu = menuManager.createContextMenu(graphController.getWorkflow(), - graphController.getWorkflow(), component); - else { - menu = menuManager.createContextMenu(graphController.getWorkflow(), - dataflowObject, component); - if (dataflowObject instanceof Processor) { - final Processor processor = (Processor) dataflowObject; - ProcessorBinding processorBinding = scufl2Tools - .processorBindingForProcessor(processor, - graphController.getProfile()); - final Activity activity = processorBinding.getBoundActivity(); - if (menu == null) - menu = new JPopupMenu(); - if (graphElement instanceof GraphNode) { - defineMenuForGraphElement(graphElement, x, y, processor, - activity); - } else if (graphElement instanceof Graph) { - defineMenuForGraphBackground(activity); - } - } - } - - if (menu != null) { - final Point p = new Point(screenX, screenY); - convertPointFromScreen(p, component); - invokeLater(new Runnable() { - @Override - public void run() { - menu.show(component, p.x, p.y); - } - }); - } - } - - @SuppressWarnings("serial") - private void defineMenuForGraphBackground(final Activity activity) { - if (activity.getType().equals(NESTED_WORKFLOW_URI)) { - menu.addSeparator(); - menu.add(new JMenuItem(new AbstractAction("Hide nested workflow") { - @Override - public void actionPerformed(ActionEvent ev) { - graphController.setExpandNestedDataflow(activity, false); - graphController.redraw(); - } - })); - } - } - - @SuppressWarnings("serial") - private void defineMenuForGraphElement(final GraphElement graphElement, - final int x, final int y, final Processor processor, - final Activity activity) { - if (graphController.getPortStyle(processor).equals(NONE)) { - menu.addSeparator(); - menu.add(new JMenuItem(new AbstractAction("Show ports") { - @Override - public void actionPerformed(ActionEvent ev) { - graphController.setPortStyle(processor, ALL); - graphController.redraw(); - } - })); - } else if (graphController.getPortStyle(processor).equals(ALL)) { - menu.addSeparator(); - menu.add(new JMenuItem(new AbstractAction("Hide ports") { - @Override - public void actionPerformed(ActionEvent arg0) { - graphController.setPortStyle(processor, NONE); - graphController.redraw(); - } - })); - } - - if (activity.getType().equals(NESTED_WORKFLOW_URI)) { - menu.addSeparator(); - menu.add(new JMenuItem(new AbstractAction("Show nested workflow") { - @Override - public void actionPerformed(ActionEvent arg0) { - graphController.setExpandNestedDataflow(activity, true); - graphController.redraw(); - } - })); - } - - menu.addSeparator(); - - GraphNode graphNode = (GraphNode) graphElement; - - List<GraphNode> sourceNodes = graphNode.getSourceNodes(); - if (sourceNodes.size() == 1) { - final GraphNode sourceNode = sourceNodes.get(0); - if (sourceNode.getLabel() != null) { - menu.add(new JMenuItem(new AbstractAction("Link from output '" - + sourceNode.getLabel() + "'") { - @Override - public void actionPerformed(ActionEvent arg0) { - graphController.startEdgeCreation(sourceNode, - new Point(x, y)); - } - })); - } - } else if (sourceNodes.size() > 0) { - JMenu linkMenu = new JMenu("Link from output..."); - menu.add(linkMenu); - for (final GraphNode sourceNode : sourceNodes) { - linkMenu.add(new JMenuItem(new AbstractAction(sourceNode - .getLabel()) { - @Override - public void actionPerformed(ActionEvent arg0) { - graphController.startEdgeCreation(sourceNode, - new Point(x, y)); - } - })); - } - } - - List<GraphNode> sinkNodes = graphNode.getSinkNodes(); - if (sinkNodes.size() == 1) { - final GraphNode sinkNode = sinkNodes.get(0); - if (sinkNode.getLabel() != null) { - menu.add(new JMenuItem(new AbstractAction("Link to input '" - + sinkNode.getLabel() + "'") { - @Override - public void actionPerformed(ActionEvent arg0) { - graphController.startEdgeCreation(sinkNode, new Point( - x, y)); - } - })); - } - } else if (sinkNodes.size() > 0) { - JMenu linkMenu = new JMenu("Link to input..."); - menu.add(linkMenu); - for (final GraphNode sinkNode : sinkNodes) { - linkMenu.add(new JMenuItem(new AbstractAction(sinkNode - .getLabel()) { - @Override - public void actionPerformed(ActionEvent arg0) { - graphController.startEdgeCreation(sinkNode, new Point( - x, y)); - } - })); - } - } - } - - @Override - public void mouseDown(GraphElement graphElement, short button, - boolean altKey, boolean ctrlKey, boolean metaKey, int x, int y, - int screenX, int screenY) { - if (button == 0) - graphController.startEdgeCreation(graphElement, new Point(x, y)); - } - - @Override - public void mouseUp(GraphElement graphElement, short button, - boolean altKey, boolean ctrlKey, boolean metaKey, final int x, - final int y, int screenX, int screenY) { - if (button == 0) - graphController.stopEdgeCreation(graphElement, new Point(screenX, - screenY)); - } - - @Override - public void mouseMoved(GraphElement graphElement, short button, - boolean altKey, boolean ctrlKey, boolean metaKey, int x, int y, - int screenX, int screenY) { - graphController.moveEdgeCreationTarget(graphElement, new Point(x, y)); - } - - @Override - public void mouseOver(GraphElement graphElement, short button, - boolean altKey, boolean ctrlKey, boolean metaKey, int x, int y, - int screenX, int screenY) { - if (graphElement.getWorkflowBean() != null) - graphElement.setActive(true); - } - - @Override - public void mouseOut(GraphElement graphElement, short button, - boolean altKey, boolean ctrlKey, boolean metaKey, int x, int y, - int screenX, int screenY) { - if (graphElement.getWorkflowBean() != null) - graphElement.setActive(false); - } -}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DotWriter.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DotWriter.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DotWriter.java deleted file mode 100644 index 07cdbad..0000000 --- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DotWriter.java +++ /dev/null @@ -1,253 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2007 The University of Manchester - * - * Modifications to the initial code base are copyright of their - * respective authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.workbench.models.graph; - -import static java.lang.String.format; -import static net.sf.taverna.t2.workbench.models.graph.Graph.Alignment.HORIZONTAL; -import static net.sf.taverna.t2.workbench.models.graph.Graph.Alignment.VERTICAL; -import static net.sf.taverna.t2.workbench.models.graph.GraphElement.LineStyle.NONE; -import static net.sf.taverna.t2.workbench.models.graph.GraphShapeElement.Shape.RECORD; - -import java.awt.Color; -import java.io.IOException; -import java.io.Writer; -import java.util.List; - -import net.sf.taverna.t2.workbench.models.graph.Graph.Alignment; - -/** - * Writer for creating a graphical representation of a Graph in the DOT language. - * - * @author David Withers - */ -public class DotWriter { - private static final String EOL = System.getProperty("line.separator"); - - private Writer writer; - - /** - * Constructs a new instance of DotWriter. - * - * @param writer - */ - public DotWriter(Writer writer) { - this.writer = writer; - } - - /** - * Writes a graphical representation of a Graph in the DOT language to a Writer. - * - * @param graph - * @throws IOException - */ - public void writeGraph(Graph graph) throws IOException { - writeLine("digraph \"" + graph.getId() + "\" {"); - - // Overall graph style - writeLine(" graph ["); - writeLine(" bgcolor=\"" + getHexValue(graph.getFillColor()) + "\""); - writeLine(" color=\"black\""); - writeLine(" fontsize=\"10\""); - writeLine(" labeljust=\"left\""); - writeLine(" clusterrank=\"local\""); - writeLine(" ranksep=\"0.22\""); - writeLine(" nodesep=\"0.05\""); - // Set left to right view if alignment is horizontal - if (graph.getAlignment().equals(HORIZONTAL)) - writeLine(" rankdir=\"LR\""); - writeLine(" ]"); - - // Overall node style - writeLine(" node ["); - writeLine(" fontname=\"Helvetica\""); - writeLine(" fontsize=\"10\""); - writeLine(" fontcolor=\"black\""); - writeLine(" shape=\"record\""); - writeLine(" height=\"0\""); - writeLine(" width=\"0\""); - writeLine(" color=\"black\""); - writeLine(" fillcolor=\"lightgoldenrodyellow\""); - writeLine(" style=\"filled\""); - writeLine(" ];"); - - // Overall edge style - writeLine(" edge ["); - writeLine(" fontname=\"Helvetica\""); - writeLine(" fontsize=\"8\""); - writeLine(" fontcolor=\"black\""); - writeLine(" color=\"black\""); - writeLine(" ];"); - - for (GraphNode node : graph.getNodes()) { - if (node.isExpanded()) - writeSubGraph(node.getGraph(), " "); - else - writeNode(node, graph.getAlignment(), " "); - } - - for (Graph subGraph : graph.getSubgraphs()) - writeSubGraph(subGraph, " "); - - for (GraphEdge edge : graph.getEdges()) - writeEdges(edge, graph.getAlignment(), " "); - - writeLine("}"); - } - - private void writeSubGraph(Graph graph, String indent) throws IOException { - writeLine(format("%ssubgraph \"cluster_%s\" {", indent, graph.getId())); - writeLine(format("%s rank=\"same\"", indent)); - - StringBuilder style = new StringBuilder(); - if (graph.getFillColor() != null) { - writeLine(format("%s fillcolor=\"%s\"", indent, - getHexValue(graph.getFillColor()))); - style.append("filled"); - } - if (graph.getLineStyle() != null) { - style.append(style.length() == 0 ? "" : ","); - if (graph.getLineStyle().equals(NONE)) - style.append("invis"); - else - style.append(graph.getLineStyle().toString().toLowerCase()); - } - writeLine(format("%s style=\"%s\"", indent, style)); - - if (graph.getLabel() != null) - writeLine(format("%s label=\"%s\"", indent, graph.getLabel())); - - for(GraphNode node : graph.getNodes()) { - if (node.isExpanded()) - writeSubGraph(node.getGraph(), indent + " "); - else - writeNode(node, graph.getAlignment(), indent + " "); - } - - for (Graph subGraph : graph.getSubgraphs()) - writeSubGraph(subGraph, indent + " "); - - for (GraphEdge edge : graph.getEdges()) - writeEdges(edge, graph.getAlignment(), indent + " "); - - writeLine(indent + "}"); - } - - private void writeEdges(GraphEdge edge, Alignment alignment, String indent) throws IOException { - GraphNode source = edge.getSource(); - GraphNode sink = edge.getSink(); - String sourceId = "\"" + source.getId() + "\""; - String sinkId = "\"" + sink.getId() + "\""; - - if (source.getParent() instanceof GraphNode) { - GraphNode parent = (GraphNode) source.getParent(); - sourceId = "\"" + parent.getId() + "\":" + sourceId; - } - if (sink.getParent() instanceof GraphNode) { - GraphNode parent = (GraphNode) sink.getParent(); - sinkId = "\"" + parent.getId() + "\":" + sinkId; - } - /* - * the compass point is required with newer versions of dot (e.g. - * 2.26.3) but is not compatible with older versions (e.g. 1.3) - */ - if (alignment.equals(HORIZONTAL)) { - sourceId = sourceId + ":e"; - sinkId = sinkId + ":w"; - } else { - sourceId = sourceId + ":s"; - sinkId = sinkId + ":n"; - } - writeLine(format("%s%s -> %s [", indent, sourceId, sinkId)); - writeLine(format("%s arrowhead=\"%s\"", indent, edge - .getArrowHeadStyle().toString().toLowerCase())); - writeLine(format("%s, arrowtail=\"%s\"", indent, edge - .getArrowTailStyle().toString().toLowerCase())); - if (edge.getColor() != null) - writeLine(format("%s color=\"%s\"", indent, - getHexValue(edge.getColor()))); - writeLine(format("%s]", indent)); - } - - private void writeNode(GraphNode node, Alignment alignment, String indent) throws IOException { - writeLine(format("%s\"%s\" [", indent, node.getId())); - - StringBuilder style = new StringBuilder(); - if (node.getFillColor() != null) { - writeLine(format("%s fillcolor=\"%s\"", indent, - getHexValue(node.getFillColor()))); - style.append("filled"); - } - if (node.getLineStyle() != null) { - style.append(style.length() == 0 ? "" : ","); - style.append(node.getLineStyle().toString().toLowerCase()); - } - writeLine(format("%s style=\"%s\"", indent, style)); - - writeLine(format("%s shape=\"%s\"", indent, node.getShape().toString().toLowerCase())); - writeLine(format("%s width=\"%s\"", indent, node.getWidth() / 72f)); - writeLine(format("%s height=\"%s\"", indent, node.getHeight() / 72f)); - - if (node.getShape().equals(RECORD)) { - StringBuilder labelString = new StringBuilder(); - if (alignment.equals(VERTICAL)) { - labelString.append("{{"); - addNodeLabels(node.getSinkNodes(), labelString); - labelString.append("}|").append(node.getLabel()).append("|{"); - addNodeLabels(node.getSourceNodes(), labelString); - labelString.append("}}"); - } else { - labelString.append(node.getLabel()).append("|{{"); - addNodeLabels(node.getSinkNodes(), labelString); - labelString.append("}|{"); - addNodeLabels(node.getSourceNodes(), labelString); - labelString.append("}}"); - } - writeLine(format("%s label=\"%s\"", indent, labelString)); - } else { - writeLine(format("%s label=\"%s\"", indent, node.getLabel())); - } - - writeLine(format("%s];", indent)); - } - - private void addNodeLabels(List<GraphNode> nodes, StringBuilder labelString) { - String sep = ""; - for (GraphNode node : nodes) - if (node.getLabel() != null) { - labelString.append(sep); - labelString.append("<"); - labelString.append(node.getId()); - labelString.append(">"); - labelString.append(node.getLabel()); - sep = "|"; - } - } - - private String getHexValue(Color color) { - return format("#%02x%02x%02x", color.getRed(), color.getGreen(), - color.getBlue()); - } - - private void writeLine(String line) throws IOException { - writer.write(line); - writer.write(EOL); - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/Graph.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/Graph.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/Graph.java deleted file mode 100644 index 0ff3852..0000000 --- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/Graph.java +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2007 The University of Manchester - * - * Modifications to the initial code base are copyright of their - * respective authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.workbench.models.graph; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * A graph model of a dataflow. - * - * @author David Withers - */ -public class Graph extends GraphShapeElement { - public enum Alignment { - HORIZONTAL, VERTICAL - } - - private List<GraphNode> nodes = new ArrayList<>(); - private Set<GraphEdge> edges = new HashSet<>(); - private Set<Graph> subgraphs = new HashSet<>(); - private Alignment alignment = Alignment.VERTICAL; - - /** - * Constructs a Graph that uses the specified GraphEventManager to handle - * any user generated events on GraphElements. - * - * @param eventManager - */ - public Graph(GraphController graphController) { - super(graphController); - } - - /** - * Adds an edge to the Graph and sets its parent to be this Graph. - * - * @param edge - * the edge to add - */ - public void addEdge(GraphEdge edge) { - edge.setParent(this); - edges.add(edge); - } - - /** - * Adds a node to the Graph and sets its parent to be this Graph. - * - * @param node - * the node to add - */ - public void addNode(GraphNode node) { - node.setParent(this); - nodes.add(node); - } - - /** - * Adds a subgraph to the Graph and sets its parent to be this Graph. - * - * @param subgraph - * the subgraph to add - */ - public void addSubgraph(Graph subgraph) { - subgraph.setParent(this); - subgraphs.add(subgraph); - } - - /** - * Returns the alignment of the Graph. - * - * @return the alignment of the Graph - */ - public Alignment getAlignment() { - return alignment; - } - - /** - * Returns the edges contained in the Graph. - * - * @return the edges contained in the Graph - */ - public Set<GraphEdge> getEdges() { - return Collections.unmodifiableSet(edges); - } - - /** - * Returns the nodes contained in the Graph. - * - * @return the nodes contained in the Graph - */ - public List<GraphNode> getNodes() { - return Collections.unmodifiableList(nodes); - } - - /** - * Returns the subgraphs contained in the Graph. - * - * @return the subgraphs contained in the Graph - */ - public Set<Graph> getSubgraphs() { - return Collections.unmodifiableSet(subgraphs); - } - - /** - * Removes an edge from the Graph. - * - * @param edge - * the edge to remove - * @return true if the edge is removed from the Graph - */ - public boolean removeEdge(GraphEdge edge) { - return edges.remove(edge); - } - - /** - * Removes a node from the Graph. - * - * @param node - * the node to remove - * @return true if the node is removed from the Graph - */ - public boolean removeNode(GraphNode node) { - return nodes.remove(node); - } - - /** - * Removes a subgraph from the Graph. - * - * @param subgraph - * the subgraph to remove - * @return true if the subgraph is removed from the Graph - */ - public boolean removeSubgraph(Graph subgraph) { - return subgraphs.remove(subgraph); - } - - /** - * Sets the alignment of the Graph. - * - * @param alignment - * the new alignment - */ - public void setAlignment(Alignment alignment) { - this.alignment = alignment; - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphColorManager.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphColorManager.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphColorManager.java deleted file mode 100644 index 1f44076..0000000 --- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphColorManager.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2007 The University of Manchester - * - * Modifications to the initial code base are copyright of their - * respective authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.workbench.models.graph; - -import java.awt.Color; -import java.lang.reflect.InvocationTargetException; - -import net.sf.taverna.t2.workbench.configuration.colour.ColourManager; - -import org.apache.commons.beanutils.PropertyUtils; - -import uk.org.taverna.scufl2.api.activity.Activity; - -/** - * Manages the colour of elements in a graph. - * - * @author David Withers - * @author Start Owen - */ -public class GraphColorManager { - private static final String BEANSHELL = "http://ns.taverna.org.uk/2010/activity/beanshell"; - private static final String LOCALWORKER = "http://ns.taverna.org.uk/2010/activity/localworker"; - - private static Color[] subGraphFillColors = new Color[] { - Color.decode("#ffffff"), Color.decode("#f0f8ff"), - Color.decode("#faebd7"), Color.decode("#f5f5dc") }; - - /** - * Returns the colour associated with the Activity. - * - * For unknown activities Color.WHITE is returned. - * - * For {@link LocalworkerActivity} which have been user configured use the - * BeanshellActivity colour - * - * @return the colour associated with the Activity - */ - public static Color getFillColor(Activity activity, ColourManager colourManager) { - try { - if (activity.getType().equals(LOCALWORKER)) { - // To avoid compile time dependency - read isAltered property as bean - if (Boolean.TRUE.equals(PropertyUtils.getProperty(activity, "altered"))) { - Color colour = colourManager.getPreferredColour(BEANSHELL); - return colour; - } - } - } catch (IllegalAccessException | InvocationTargetException - | NoSuchMethodException e) { - } - Color colour = colourManager.getPreferredColour(activity.getType().toASCIIString()); - return colour; - } - - public static Color getSubGraphFillColor(int depth) { - return subGraphFillColors[depth % subGraphFillColors.length]; - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphController.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphController.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphController.java deleted file mode 100644 index 0fb87a4..0000000 --- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphController.java +++ /dev/null @@ -1,1276 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2007 The University of Manchester - * - * Modifications to the initial code base are copyright of their - * respective authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.workbench.models.graph; - -import static javax.swing.JOptionPane.PLAIN_MESSAGE; -import static javax.swing.JOptionPane.showInputDialog; -import static javax.swing.JOptionPane.showMessageDialog; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Point; -import java.net.URI; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import net.sf.taverna.t2.lang.observer.Observable; -import net.sf.taverna.t2.lang.observer.Observer; -import net.sf.taverna.t2.ui.menu.MenuManager; -import net.sf.taverna.t2.workbench.configuration.colour.ColourManager; -import net.sf.taverna.t2.workbench.edits.CompoundEdit; -import net.sf.taverna.t2.workbench.edits.Edit; -import net.sf.taverna.t2.workbench.edits.EditException; -import net.sf.taverna.t2.workbench.edits.EditManager; -import net.sf.taverna.t2.workbench.models.graph.Graph.Alignment; -import net.sf.taverna.t2.workbench.models.graph.GraphEdge.ArrowStyle; -import net.sf.taverna.t2.workbench.models.graph.GraphElement.LineStyle; -import net.sf.taverna.t2.workbench.models.graph.GraphShapeElement.Shape; -import net.sf.taverna.t2.workbench.selection.DataflowSelectionModel; -import net.sf.taverna.t2.workbench.selection.events.DataflowSelectionMessage; -import net.sf.taverna.t2.workflow.edits.AddDataLinkEdit; -import net.sf.taverna.t2.workflow.edits.RemoveDataLinkEdit; - -import org.apache.log4j.Logger; - -import uk.org.taverna.scufl2.api.activity.Activity; -import uk.org.taverna.scufl2.api.common.NamedSet; -import uk.org.taverna.scufl2.api.common.Scufl2Tools; -import uk.org.taverna.scufl2.api.common.WorkflowBean; -import uk.org.taverna.scufl2.api.core.BlockingControlLink; -import uk.org.taverna.scufl2.api.core.ControlLink; -import uk.org.taverna.scufl2.api.core.DataLink; -import uk.org.taverna.scufl2.api.core.Processor; -import uk.org.taverna.scufl2.api.core.Workflow; -import uk.org.taverna.scufl2.api.port.InputActivityPort; -import uk.org.taverna.scufl2.api.port.InputPort; -import uk.org.taverna.scufl2.api.port.InputProcessorPort; -import uk.org.taverna.scufl2.api.port.InputWorkflowPort; -import uk.org.taverna.scufl2.api.port.OutputActivityPort; -import uk.org.taverna.scufl2.api.port.OutputPort; -import uk.org.taverna.scufl2.api.port.OutputProcessorPort; -import uk.org.taverna.scufl2.api.port.OutputWorkflowPort; -import uk.org.taverna.scufl2.api.port.Port; -import uk.org.taverna.scufl2.api.port.ProcessorPort; -import uk.org.taverna.scufl2.api.port.ReceiverPort; -import uk.org.taverna.scufl2.api.port.SenderPort; -import uk.org.taverna.scufl2.api.port.WorkflowPort; -import uk.org.taverna.scufl2.api.profiles.ProcessorBinding; -import uk.org.taverna.scufl2.api.profiles.Profile; - -/** - * @author David Withers - */ -public abstract class GraphController implements - Observer<DataflowSelectionMessage> { - public enum PortStyle { - ALL { - @Override - Shape inputShape() { - return Shape.INVHOUSE; - } - - @Override - Shape outputShape() { - return Shape.HOUSE; - } - - @Override - Shape processorShape() { - return Shape.RECORD; - } - }, - BOUND { - @Override - Shape inputShape() { - return Shape.INVHOUSE; - } - - @Override - Shape outputShape() { - return Shape.HOUSE; - } - - @Override - Shape processorShape() { - return Shape.RECORD; - } - }, - NONE { - @Override - Shape inputShape() { - return Shape.BOX; - } - - @Override - Shape outputShape() { - return Shape.BOX; - } - - @Override - Shape processorShape() { - return Shape.BOX; - } - }, - BLOB { - @Override - Shape inputShape() { - return Shape.CIRCLE; - } - - @Override - Shape outputShape() { - return Shape.CIRCLE; - } - - @Override - Shape processorShape() { - return Shape.CIRCLE; - } - }; - - abstract Shape inputShape(); - - abstract Shape outputShape(); - - abstract Shape processorShape(); - - Shape mergeShape() { - return Shape.CIRCLE; - } - } - - private static Logger logger = Logger.getLogger(GraphController.class); - - private Map<String, GraphElement> idToElement = new HashMap<>(); - private Map<WorkflowBean, GraphElement> workflowToGraph = new HashMap<>(); - private Map<Port, GraphNode> ports = new HashMap<>(); - private Map<Graph, GraphNode> inputControls = new HashMap<>(); - private Map<Graph, GraphNode> outputControls = new HashMap<>(); - private Map<Port, Port> nestedWorkflowPorts = new HashMap<>(); - private Map<WorkflowPort, ProcessorPort> workflowPortToProcessorPort = new HashMap<>(); - private Map<Port, Processor> portToProcessor = new HashMap<>(); - - private EditManager editManager; - private final Workflow workflow; - private final Profile profile; - private DataflowSelectionModel dataflowSelectionModel; - private GraphEventManager graphEventManager; - private Component componentForPopups; - - // graph settings - private PortStyle portStyle = PortStyle.NONE; - private Map<Processor, PortStyle> processorPortStyle = new HashMap<>(); - private Alignment alignment = Alignment.VERTICAL; - private boolean expandNestedDataflows = true; - private Map<Activity, Boolean> dataflowExpansion = new HashMap<>(); - protected Map<String, GraphElement> graphElementMap = new HashMap<>(); - protected GraphElement edgeCreationSource, edgeCreationSink; - protected GraphEdge edgeMoveElement; - protected boolean edgeCreationFromSource = false; - protected boolean edgeCreationFromSink = false; - private Graph graph; - private boolean interactive; - private final ColourManager colourManager; - - private Scufl2Tools scufl2Tools = new Scufl2Tools(); - - public GraphController(Workflow workflow, Profile profile, - boolean interactive, Component componentForPopups, - EditManager editManager, MenuManager menuManager, - ColourManager colourManager) { - this(workflow, profile, interactive, componentForPopups, - Alignment.VERTICAL, PortStyle.NONE, editManager, menuManager, - colourManager); - } - - public GraphController(Workflow workflow, Profile profile, - boolean interactive, Component componentForPopups, - Alignment alignment, PortStyle portStyle, EditManager editManager, - MenuManager menuManager, ColourManager colourManager) { - this.workflow = workflow; - this.profile = profile; - this.interactive = interactive; - this.componentForPopups = componentForPopups; - this.alignment = alignment; - this.portStyle = portStyle; - this.editManager = editManager; - this.colourManager = colourManager; - this.graphEventManager = new DefaultGraphEventManager(this, - componentForPopups, menuManager); - graph = generateGraph(); - } - - public abstract Graph createGraph(); - - public abstract GraphNode createGraphNode(); - - public abstract GraphEdge createGraphEdge(); - - public void mapElement(String id, GraphElement element) { - idToElement.put(id, element); - } - - public GraphElement getElement(String id) { - return idToElement.get(id); - } - - public Graph getGraph() { - return graph; - } - - public abstract void redraw(); - - /** - * Generates a graph model of a dataflow. - * - * @return - */ - public Graph generateGraph() { - workflowToGraph.clear(); - ports.clear(); - inputControls.clear(); - outputControls.clear(); - nestedWorkflowPorts.clear(); - workflowPortToProcessorPort.clear(); - graphElementMap.clear(); - portToProcessor.clear(); - return generateGraph(workflow, "", workflow.getName(), 0); - } - - private Graph generateGraph(Workflow dataflow, String prefix, String name, - int depth) { - Graph graph = createGraph(); - graph.setId(prefix + name); - graph.setAlignment(getAlignment()); - if (getPortStyle().equals(PortStyle.BLOB) || depth == 0) - graph.setLabel(""); - else - graph.setLabel(name); - graph.setFillColor(GraphColorManager.getSubGraphFillColor(depth)); - if (depth == 0) - graph.setLineStyle(LineStyle.NONE); - else - graph.setLineStyle(LineStyle.SOLID); - graph.setColor(Color.BLACK); - graph.setShape(Shape.BOX); - - if (depth == 0) - graph.setWorkflowBean(dataflow); - if (interactive) - graph.setWorkflowBean(dataflow); - - // processors - for (Processor processor : dataflow.getProcessors()) - graph.addNode(generateProcessorNode(processor, graph.getId(), depth)); - - // dataflow outputs - NamedSet<OutputWorkflowPort> outputPorts = dataflow.getOutputPorts(); - if (outputPorts.size() > 0 || depth > 0) - graph.addSubgraph(generateOutputsGraph(outputPorts, graph.getId(), - graph, depth)); - - // dataflow inputs - NamedSet<InputWorkflowPort> inputPorts = dataflow.getInputPorts(); - if (inputPorts.size() > 0 || depth > 0) - graph.addSubgraph(generateInputsGraph(inputPorts, graph.getId(), - graph, depth)); - - // datalinks - for (DataLink datalink : dataflow.getDataLinks()) { - GraphEdge edge = generateDataLinkEdge(datalink, depth); - if (edge != null) - graph.addEdge(edge); - } - - // controlLinks - for (ControlLink controlLink : dataflow.getControlLinks()) - if (controlLink instanceof BlockingControlLink) { - GraphEdge edge = generateControlLinkEdge( - (BlockingControlLink) controlLink, depth); - if (edge != null) - graph.addEdge(edge); - } - - graphElementMap.put(graph.getId(), graph); - return graph; - } - - public void transformGraph(Graph oldGraph, Graph newGraph) { - oldGraph.setAlignment(newGraph.getAlignment()); - transformGraphElement(oldGraph, newGraph); - List<GraphEdge> oldEdges = new ArrayList<>(oldGraph.getEdges()); - List<GraphEdge> newEdges = new ArrayList<>(newGraph.getEdges()); - for (GraphEdge oldEdge : oldEdges) { - int index = newEdges.indexOf(oldEdge); - if (index >= 0) { - GraphEdge newEdge = newEdges.remove(index); - oldEdge.setPath(newEdge.getPath()); - workflowToGraph.put(oldEdge.getWorkflowBean(), oldEdge); - } else - oldGraph.removeEdge(oldEdge); - } - List<GraphNode> newNodes = new ArrayList<>(newGraph.getNodes()); - List<GraphNode> oldNodes = new ArrayList<>(oldGraph.getNodes()); - for (GraphNode oldNode : oldNodes) { - int index = newNodes.indexOf(oldNode); - if (index >= 0) { - GraphNode newNode = newNodes.remove(index); - oldNode.setExpanded(newNode.isExpanded()); - List<GraphNode> newSourceNodes = new ArrayList<>( - newNode.getSourceNodes()); - List<GraphNode> oldSourceNodes = new ArrayList<>( - oldNode.getSourceNodes()); - for (GraphNode oldSourceNode : oldSourceNodes) { - int sourceNodeIndex = newSourceNodes.indexOf(oldSourceNode); - if (sourceNodeIndex >= 0) { - GraphNode newSourceNode = newSourceNodes - .remove(sourceNodeIndex); - transformGraphElement(oldSourceNode, newSourceNode); - } else - oldNode.removeSourceNode(oldSourceNode); - } - for (GraphNode sourceNode : newSourceNodes) - oldNode.addSourceNode(sourceNode); - List<GraphNode> newSinkNodes = new ArrayList<>( - newNode.getSinkNodes()); - List<GraphNode> oldSinkNodes = new ArrayList<>( - oldNode.getSinkNodes()); - for (GraphNode oldSinkNode : oldSinkNodes) { - int sinkNodeIndex = newSinkNodes.indexOf(oldSinkNode); - if (sinkNodeIndex >= 0) { - GraphNode newSinkNode = newSinkNodes - .remove(sinkNodeIndex); - transformGraphElement(oldSinkNode, newSinkNode); - } else - oldNode.removeSinkNode(oldSinkNode); - } - for (GraphNode sinkNode : newSinkNodes) - oldNode.addSinkNode(sinkNode); - Graph oldSubGraph = oldNode.getGraph(); - Graph newSubGraph = newNode.getGraph(); - if (oldSubGraph != null && newSubGraph != null) - transformGraph(oldSubGraph, newSubGraph); - transformGraphElement(oldNode, newNode); - } else - oldGraph.removeNode(oldNode); - } - List<Graph> newSubGraphs = new ArrayList<>(newGraph.getSubgraphs()); - List<Graph> oldSubGraphs = new ArrayList<>(oldGraph.getSubgraphs()); - for (Graph oldSubGraph : oldSubGraphs) { - int index = newSubGraphs.indexOf(oldSubGraph); - if (index >= 0) { - Graph newSubGraph = newSubGraphs.remove(index); - transformGraph(oldSubGraph, newSubGraph); - } else - oldGraph.removeSubgraph(oldSubGraph); - } - for (GraphNode node : newNodes) - oldGraph.addNode(node); - for (Graph graph : newSubGraphs) - oldGraph.addSubgraph(graph); - for (GraphEdge newEdge : newEdges) - oldGraph.addEdge(newEdge); - } - - public void transformGraphElement(GraphShapeElement oldGraphElement, - GraphShapeElement newGraphElement) { - oldGraphElement.setWorkflowBean(newGraphElement.getWorkflowBean()); - oldGraphElement.setShape(newGraphElement.getShape()); - oldGraphElement.setSize(newGraphElement.getSize()); - oldGraphElement.setPosition(newGraphElement.getPosition()); - oldGraphElement.setLabel(newGraphElement.getLabel()); - oldGraphElement.setLabelPosition(newGraphElement.getLabelPosition()); - oldGraphElement.setLineStyle(newGraphElement.getLineStyle()); - oldGraphElement.setOpacity(newGraphElement.getOpacity()); - oldGraphElement.setVisible(newGraphElement.isVisible()); - oldGraphElement.setColor(newGraphElement.getColor()); - oldGraphElement.setFillColor(newGraphElement.getFillColor()); - workflowToGraph.put(oldGraphElement.getWorkflowBean(), oldGraphElement); - } - - public void filterGraph(Set<?> dataflowEntities) { - Set<GraphElement> graphElements = new HashSet<>(); - for (Entry<WorkflowBean, GraphElement> entry : workflowToGraph - .entrySet()) - if (!dataflowEntities.contains(entry.getKey())) - graphElements.add(entry.getValue()); - filterGraph(getGraph(), graphElements); - } - - private void filterGraph(Graph graph, Set<GraphElement> graphElements) { - for (GraphNode node : graph.getNodes()) { - node.setFiltered(graphElements.contains(node)); - Graph subgraph = node.getGraph(); - if (subgraph != null) - if (graphElements.contains(subgraph)) { - removeFilter(subgraph); - subgraph.setFiltered(true); - } else { - subgraph.setFiltered(false); - filterGraph(subgraph, graphElements); - } - } - for (GraphEdge edge : graph.getEdges()) - edge.setFiltered(graphElements.contains(edge)); - for (Graph subgraph : graph.getSubgraphs()) - if (graphElements.contains(subgraph)) { - removeFilter(subgraph); - subgraph.setFiltered(true); - } else { - subgraph.setFiltered(false); - filterGraph(subgraph, graphElements); - } - } - - public void removeFilter() { - for (Entry<WorkflowBean, GraphElement> entry : workflowToGraph - .entrySet()) - entry.getValue().setFiltered(false); - } - - private void removeFilter(Graph graph) { - for (GraphNode node : graph.getNodes()) { - node.setOpacity(1f); - Graph subgraph = node.getGraph(); - if (subgraph != null) { - subgraph.setFiltered(false); - removeFilter(subgraph); - } - } - for (GraphEdge edge : graph.getEdges()) - edge.setFiltered(false); - for (Graph subgraph : graph.getSubgraphs()) { - subgraph.setFiltered(false); - removeFilter(subgraph); - } - } - - private GraphEdge generateControlLinkEdge(BlockingControlLink condition, - int depth) { - GraphEdge edge = null; - GraphElement source = workflowToGraph.get(condition.getUntilFinished()); - GraphElement sink = workflowToGraph.get(condition.getBlock()); - if (source != null && sink != null) { - edge = createGraphEdge(); - if (source instanceof Graph) - edge.setSource(outputControls.get(source)); - else if (source instanceof GraphNode) - edge.setSource((GraphNode) source); - if (sink instanceof Graph) - edge.setSink(inputControls.get(sink)); - else if (sink instanceof GraphNode) - edge.setSink((GraphNode) sink); - String sourceId = edge.getSource().getId(); - String sinkId = edge.getSink().getId(); - edge.setId(sourceId + "->" + sinkId); - edge.setLineStyle(LineStyle.SOLID); - edge.setColor(Color.decode("#505050")); - edge.setFillColor(null); - edge.setArrowHeadStyle(ArrowStyle.DOT); - if (depth == 0) - edge.setWorkflowBean(condition); - if (interactive) - edge.setWorkflowBean(condition); - workflowToGraph.put(condition, edge); - graphElementMap.put(edge.getId(), edge); - } - return edge; - } - - private GraphEdge generateDataLinkEdge(DataLink datalink, int depth) { - GraphEdge edge = null; - Port sourcePort = datalink.getReceivesFrom(); - Port sinkPort = datalink.getSendsTo(); - if (nestedWorkflowPorts.containsKey(sourcePort)) - sourcePort = nestedWorkflowPorts.get(sourcePort); - if (nestedWorkflowPorts.containsKey(sinkPort)) - sinkPort = nestedWorkflowPorts.get(sinkPort); - GraphNode sourceNode = ports.get(sourcePort); - GraphNode sinkNode = ports.get(sinkPort); - if (sourceNode != null && sinkNode != null) { - edge = createGraphEdge(); - edge.setSource(sourceNode); - edge.setSink(sinkNode); - - StringBuilder id = new StringBuilder(); - if (sourceNode.getParent() instanceof GraphNode) { - id.append(sourceNode.getParent().getId()); - id.append(":"); - id.append(sourceNode.getId()); - } else - id.append(sourceNode.getId()); - id.append("->"); - if (sinkNode.getParent() instanceof GraphNode) { - id.append(sinkNode.getParent().getId()); - id.append(":"); - id.append(sinkNode.getId()); - } else - id.append(sinkNode.getId()); - edge.setId(id.toString()); - edge.setLineStyle(LineStyle.SOLID); - edge.setColor(Color.BLACK); - edge.setFillColor(Color.BLACK); - if (depth == 0) - edge.setWorkflowBean(datalink); - if (interactive) - edge.setWorkflowBean(datalink); - workflowToGraph.put(datalink, edge); - graphElementMap.put(edge.getId(), edge); - } - return edge; - } - - private Graph generateInputsGraph(NamedSet<InputWorkflowPort> inputPorts, - String prefix, Graph graph, int depth) { - Graph inputs = createGraph(); - inputs.setId(prefix + "sources"); - inputs.setColor(Color.BLACK); - inputs.setFillColor(null); - inputs.setShape(Shape.BOX); - inputs.setLineStyle(LineStyle.DOTTED); - if (getPortStyle().equals(PortStyle.BLOB)) - inputs.setLabel(""); - else - inputs.setLabel("Workflow input ports"); - - GraphNode triangle = createGraphNode(); - triangle.setId(prefix + "WORKFLOWINTERNALSOURCECONTROL"); - triangle.setLabel(""); - triangle.setShape(Shape.TRIANGLE); - triangle.setSize(new Dimension((int) (0.2f * 72), (int) ((Math.sin(Math - .toRadians(60)) * 0.2) * 72))); - triangle.setFillColor(Color.decode("#ff4040")); - triangle.setColor(Color.BLACK); - triangle.setLineStyle(LineStyle.SOLID); - inputs.addNode(triangle); - inputControls.put(graph, triangle); - - for (InputWorkflowPort inputWorkflowPort : inputPorts) { - GraphNode inputNode = createGraphNode(); - inputNode.setId(prefix + "WORKFLOWINTERNALSOURCE_" - + inputWorkflowPort.getName()); - if (getPortStyle().equals(PortStyle.BLOB)) { - inputNode.setLabel(""); - inputNode.setSize(new Dimension((int) (0.3f * 72), - (int) (0.3f * 72))); - } else - inputNode.setLabel(inputWorkflowPort.getName()); - inputNode.setShape(getPortStyle().inputShape()); - inputNode.setColor(Color.BLACK); - inputNode.setLineStyle(LineStyle.SOLID); - inputNode.setFillColor(Color.decode("#8ed6f0")); - if (depth == 0) - inputNode.setInteractive(true); - if (interactive) - inputNode.setInteractive(true); - if (depth < 2) { - inputNode.setWorkflowBean(inputWorkflowPort); - if (workflowPortToProcessorPort.containsKey(inputWorkflowPort)) { - ProcessorPort port = workflowPortToProcessorPort - .get(inputWorkflowPort); - inputNode.setWorkflowBean(port); - workflowToGraph.put(port, inputNode); - } else { - inputNode.setWorkflowBean(inputWorkflowPort); - workflowToGraph.put(inputWorkflowPort, inputNode); - } - } - ports.put(inputWorkflowPort, inputNode); - inputs.addNode(inputNode); - graphElementMap.put(inputNode.getId(), inputNode); - } - return inputs; - } - - private Graph generateOutputsGraph( - NamedSet<OutputWorkflowPort> outputPorts, String prefix, - Graph graph, int depth) { - Graph outputs = createGraph(); - outputs.setId(prefix + "sinks"); - outputs.setColor(Color.BLACK); - outputs.setFillColor(null); - outputs.setShape(Shape.BOX); - outputs.setLineStyle(LineStyle.DOTTED); - if (getPortStyle().equals(PortStyle.BLOB)) - outputs.setLabel(""); - else - outputs.setLabel("Workflow output ports"); - - GraphNode triangle = createGraphNode(); - triangle.setId(prefix + "WORKFLOWINTERNALSINKCONTROL"); - triangle.setLabel(""); - triangle.setShape(Shape.INVTRIANGLE); - triangle.setSize(new Dimension((int) (0.2f * 72), (int) ((Math.sin(Math - .toRadians(60)) * 0.2) * 72))); - triangle.setFillColor(Color.decode("#66cd00")); - triangle.setColor(Color.BLACK); - triangle.setLineStyle(LineStyle.SOLID); - outputs.addNode(triangle); - outputControls.put(graph, triangle); - - for (OutputWorkflowPort outputWorkflowPort : outputPorts) { - GraphNode outputNode = createGraphNode(); - outputNode.setId(prefix + "WORKFLOWINTERNALSINK_" - + outputWorkflowPort.getName()); - if (getPortStyle().equals(PortStyle.BLOB)) { - outputNode.setLabel(""); - outputNode.setSize(new Dimension((int) (0.3f * 72), - (int) (0.3f * 72))); - } else - outputNode.setLabel(outputWorkflowPort.getName()); - outputNode.setShape(getPortStyle().outputShape()); - outputNode.setColor(Color.BLACK); - outputNode.setLineStyle(LineStyle.SOLID); - outputNode.setFillColor(Color.decode("#8ed6f0")); - if (depth == 0) - outputNode.setInteractive(true); - if (interactive) - outputNode.setInteractive(true); - if (depth < 2) { - if (workflowPortToProcessorPort.containsKey(outputWorkflowPort)) { - ProcessorPort port = workflowPortToProcessorPort - .get(outputWorkflowPort); - outputNode.setWorkflowBean(port); - workflowToGraph.put(port, outputNode); - } else { - outputNode.setWorkflowBean(outputWorkflowPort); - workflowToGraph.put(outputWorkflowPort, outputNode); - } - } - ports.put(outputWorkflowPort, outputNode); - outputs.addNode(outputNode); - graphElementMap.put(outputNode.getId(), outputNode); - } - return outputs; - } - - private GraphNode generateProcessorNode(Processor processor, String prefix, - int depth) { - // Blatantly ignoring any other activities for now - ProcessorBinding processorBinding = scufl2Tools - .processorBindingForProcessor(processor, profile); - Activity activity = processorBinding.getBoundActivity(); - @SuppressWarnings("unused") - URI activityType = activity.getType(); - - GraphNode node = createGraphNode(); - node.setId(prefix + processor.getName()); - if (getPortStyle().equals(PortStyle.BLOB)) { - node.setLabel(""); - node.setSize(new Dimension((int) (0.3f * 72), (int) (0.3f * 72))); - } else - node.setLabel(processor.getName()); - node.setShape(getPortStyle(processor).processorShape()); - node.setColor(Color.BLACK); - node.setLineStyle(LineStyle.SOLID); - // if (activityType.equals(URI.create(NonExecutableActivity.URI))) { - // if (activityType.equals(URI.create(DisabledActivity.URI))) { - // node.setFillColor(GraphColorManager - // .getFillColor(((DisabledActivity) activity) - // .getActivity(), colourManager)); - // } else { - // node.setFillColor(GraphColorManager - // .getFillColor(activityType, colourManager)); - // } - // node.setOpacity(0.3f); - // } else - node.setFillColor(GraphColorManager.getFillColor(activity, - colourManager)); - - // check whether the nested workflow processors should be clickable or - // not, if top level workflow then should be clickable regardless - if (depth == 0) { - node.setInteractive(true); - node.setWorkflowBean(processor); - } - if (interactive) { - node.setInteractive(true); - node.setWorkflowBean(processor); - } - - if (scufl2Tools.containsNestedWorkflow(processor, profile) - && expandNestedDataflow(activity)) { - Workflow subDataflow = scufl2Tools.nestedWorkflowForProcessor( - processor, profile); - - NamedSet<InputWorkflowPort> inputWorkflowPorts = subDataflow - .getInputPorts(); - for (InputActivityPort inputActivityPort : activity.getInputPorts()) { - InputWorkflowPort inputWorkflowPort = inputWorkflowPorts - .getByName(inputActivityPort.getName()); - InputProcessorPort inputProcessorPort = scufl2Tools - .processorPortBindingForPort(inputActivityPort, profile) - .getBoundProcessorPort(); - nestedWorkflowPorts.put(inputProcessorPort, inputWorkflowPort); - workflowPortToProcessorPort.put(inputWorkflowPort, - inputProcessorPort); - processorBinding.getInputPortBindings(); - } - - NamedSet<OutputWorkflowPort> outputWorkflowPorts = subDataflow - .getOutputPorts(); - for (OutputActivityPort outputActivityPort : activity - .getOutputPorts()) { - OutputWorkflowPort outputWorkflowPort = outputWorkflowPorts - .getByName(outputActivityPort.getName()); - OutputProcessorPort outputProcessorPort = scufl2Tools - .processorPortBindingForPort(outputActivityPort, - profile).getBoundProcessorPort(); - nestedWorkflowPorts - .put(outputProcessorPort, outputWorkflowPort); - workflowPortToProcessorPort.put(outputWorkflowPort, - outputProcessorPort); - } - - Graph subGraph = generateGraph(subDataflow, prefix, - processor.getName(), depth + 1); - // TODO why does this depth matter? - if (depth == 0) - subGraph.setWorkflowBean(processor); - if (interactive) - subGraph.setWorkflowBean(processor); - node.setGraph(subGraph); - node.setExpanded(true); - - workflowToGraph.put(processor, subGraph); - } else { - graphElementMap.put(node.getId(), node); - workflowToGraph.put(processor, node); - } - - NamedSet<InputProcessorPort> inputPorts = processor.getInputPorts(); - if (inputPorts.size() == 0) { - GraphNode portNode = createGraphNode(); - portNode.setShape(Shape.BOX); - portNode.setColor(Color.BLACK); - portNode.setFillColor(node.getFillColor()); - portNode.setLineStyle(LineStyle.SOLID); - node.addSinkNode(portNode); - } else - for (InputPort inputPort : inputPorts) { - GraphNode portNode = createGraphNode(); - portNode.setId("i" + inputPort.getName().replaceAll("\\.", "")); - portNode.setLabel(inputPort.getName()); - portNode.setShape(Shape.BOX); - portNode.setColor(Color.BLACK); - portNode.setFillColor(node.getFillColor()); - portNode.setLineStyle(LineStyle.SOLID); - if (depth == 0) - portNode.setWorkflowBean(inputPort); - if (interactive) - portNode.setWorkflowBean(inputPort); - if (!node.isExpanded()) - workflowToGraph.put(inputPort, portNode); - ports.put(inputPort, portNode); - node.addSinkNode(portNode); - graphElementMap.put(portNode.getId(), portNode); - // portToActivity.put(inputPort, activity); - portToProcessor.put(inputPort, processor); - } - - NamedSet<OutputProcessorPort> outputPorts = processor.getOutputPorts(); - if (outputPorts.size() == 0) { - GraphNode portNode = createGraphNode(); - portNode.setShape(Shape.BOX); - portNode.setColor(Color.BLACK); - portNode.setFillColor(node.getFillColor()); - portNode.setLineStyle(LineStyle.SOLID); - node.addSourceNode(portNode); - } else - for (OutputPort outputPort : outputPorts) { - GraphNode portNode = createGraphNode(); - portNode.setId("o" + outputPort.getName().replaceAll("\\.", "")); - portNode.setLabel(outputPort.getName()); - portNode.setShape(Shape.BOX); - portNode.setColor(Color.BLACK); - portNode.setFillColor(node.getFillColor()); - portNode.setLineStyle(LineStyle.SOLID); - if (depth == 0) - portNode.setWorkflowBean(outputPort); - if (interactive) - portNode.setWorkflowBean(outputPort); - if (!node.isExpanded()) - workflowToGraph.put(outputPort, portNode); - ports.put(outputPort, portNode); - node.addSourceNode(portNode); - graphElementMap.put(portNode.getId(), portNode); - // portToActivity.put(outputPort, activity); - portToProcessor.put(outputPort, processor); - } - - return node; - } - - /** - * Returns the dataflow. - * - * @return the dataflow - */ - public Workflow getWorkflow() { - return workflow; - } - - public Profile getProfile() { - return profile; - } - - /** - * Returns the dataflowSelectionModel. - * - * @return the dataflowSelectionModel - */ - public DataflowSelectionModel getDataflowSelectionModel() { - return dataflowSelectionModel; - } - - /** - * Sets the dataflowSelectionModel. - * - * @param dataflowSelectionModel - * the new dataflowSelectionModel - */ - public void setDataflowSelectionModel( - DataflowSelectionModel dataflowSelectionModel) { - if (this.dataflowSelectionModel != null) - this.dataflowSelectionModel.removeObserver(this); - this.dataflowSelectionModel = dataflowSelectionModel; - this.dataflowSelectionModel.addObserver(this); - } - - /** - * Sets the proportion of the node's jobs that have been completed. - * - * @param nodeId - * the id of the node - * @param complete - * the proportion of the nodes's jobs that have been completed, a - * value between 0.0 and 1.0 - */ - public void setNodeCompleted(String nodeId, float complete) { - if (graphElementMap.containsKey(nodeId)) { - GraphElement graphElement = graphElementMap.get(nodeId); - graphElement.setCompleted(complete); - } - } - - public void setEdgeActive(String edgeId, boolean active) { - } - - /** - * Returns the alignment. - * - * @return the alignment - */ - public Alignment getAlignment() { - return alignment; - } - - /** - * Returns the portStyle. - * - * @return the portStyle - */ - public PortStyle getPortStyle() { - return portStyle; - } - - /** - * Returns the portStyle for a processor. - * - * @return the portStyle for a processor - */ - public PortStyle getPortStyle(Processor processor) { - if (processorPortStyle.containsKey(processor)) - return processorPortStyle.get(processor); - return portStyle; - } - - /** - * Sets the alignment. - * - * @param alignment - * the new alignment - */ - public void setAlignment(Alignment alignment) { - this.alignment = alignment; - } - - /** - * Sets the portStyle. - * - * @param style - * the new portStyle - */ - public void setPortStyle(PortStyle portStyle) { - this.portStyle = portStyle; - processorPortStyle.clear(); - } - - /** - * Sets the portStyle for a processor. - * - * @param style - * the new portStyle for the processor - */ - public void setPortStyle(Processor processor, PortStyle portStyle) { - processorPortStyle.put(processor, portStyle); - } - - /** - * Shut down any processing and update threads related to this controller. - * - */ - public void shutdown() { - } - - /** - * Returns true if the default is to expand nested workflows. - * - * @return true if the default is to expand nested workflows - */ - public boolean expandNestedDataflows() { - return expandNestedDataflows; - } - - /** - * Returns true if the nested dataflow should be expanded. - * - * @param dataflow - * @return true if the nested dataflow should be expanded - */ - public boolean expandNestedDataflow(Activity dataflow) { - if (dataflowExpansion.containsKey(dataflow)) - return dataflowExpansion.get(dataflow); - return expandNestedDataflows; - } - - /** - * Sets the default for expanding nested workflows. - * - * @param expand - * the default for expanding nested workflows - */ - public void setExpandNestedDataflows(boolean expand) { - dataflowExpansion.clear(); - this.expandNestedDataflows = expand; - } - - /** - * Sets whether the nested dataflow should be expanded. - * - * @param expand - * whether the nested dataflow should be expanded - * @param dataflow - * the nested dataflow - */ - public void setExpandNestedDataflow(Activity dataflow, boolean expand) { - dataflowExpansion.put(dataflow, expand); - } - - private boolean isSingleOutputProcessor(Object dataflowObject) { - boolean result = false; - if (dataflowObject instanceof Processor) { - Processor processor = (Processor) dataflowObject; - result = processor.getOutputPorts().size() == 1; - } - return result; - } - - public boolean startEdgeCreation(GraphElement graphElement, Point point) { - if (!edgeCreationFromSource && !edgeCreationFromSink) { - Object dataflowObject = graphElement.getWorkflowBean(); - if (dataflowObject instanceof ReceiverPort) { - edgeCreationSink = graphElement; - edgeCreationFromSink = true; - } else if (dataflowObject instanceof SenderPort - || isSingleOutputProcessor(dataflowObject)) { - edgeCreationSource = graphElement; - edgeCreationFromSource = true; - } else if (graphElement instanceof GraphEdge) { - GraphEdge edge = (GraphEdge) graphElement; - edgeCreationSource = edge.getSource(); - edgeCreationFromSource = true; - edgeMoveElement = edge; - } - } - return edgeCreationFromSource || edgeCreationFromSink; - } - - public boolean moveEdgeCreationTarget(GraphElement graphElement, Point point) { - boolean edgeValid = false; - Object dataflowObject = graphElement.getWorkflowBean(); - if (edgeCreationFromSink) { - if (graphElement instanceof GraphNode) { - Object sinkObject = edgeCreationSink.getWorkflowBean(); - if (dataflowObject instanceof OutputPort) { - Processor sourceProcessor = portToProcessor - .get(dataflowObject); - if (sourceProcessor != null) { - Processor sinkProcessor = null; - if (sinkObject instanceof Processor) - sinkProcessor = (Processor) sinkObject; - else if (portToProcessor.containsKey(sinkObject)) - sinkProcessor = portToProcessor.get(sinkObject); - if (sinkProcessor != null) { - Set<Processor> possibleSinkProcessors = scufl2Tools - .possibleDownStreamProcessors(workflow, - sourceProcessor); - if (possibleSinkProcessors.contains(sinkProcessor)) { - edgeCreationSource = graphElement; - edgeValid = true; - } - } - if (sinkObject instanceof OutputWorkflowPort) { - edgeCreationSource = graphElement; - edgeValid = true; - } - } - } else if (dataflowObject instanceof InputWorkflowPort) { - edgeCreationSource = graphElement; - edgeValid = true; - } else if (dataflowObject instanceof Processor) { - Processor sourceProcessor = (Processor) dataflowObject; - Processor sinkProcessor = null; - if (sinkObject instanceof Processor) - sinkProcessor = (Processor) sinkObject; - else if (portToProcessor.containsKey(sinkObject)) - sinkProcessor = portToProcessor.get(sinkObject); - if (sinkProcessor != null) { - Set<Processor> possibleSinkProcessors = scufl2Tools - .possibleDownStreamProcessors(workflow, - sourceProcessor); - if (possibleSinkProcessors.contains(sinkProcessor)) { - edgeCreationSource = graphElement; - edgeValid = true; - } - } - if (sinkObject instanceof OutputWorkflowPort) { - edgeCreationSource = graphElement; - edgeValid = true; - } - } - } - if (!edgeValid) - edgeCreationSource = null; - } else if (edgeCreationFromSource) { - if (graphElement instanceof GraphNode) { - Object sourceObject = edgeCreationSource.getWorkflowBean(); - if (dataflowObject instanceof InputPort) { - Processor sinkProcessor = portToProcessor - .get(dataflowObject); - if (sinkProcessor != null) { - Processor sourceProcessor = null; - if (sourceObject instanceof Processor) - sourceProcessor = (Processor) sourceObject; - else if (portToProcessor.containsKey(sourceObject)) - sourceProcessor = portToProcessor.get(sourceObject); - if (sourceProcessor != null) { - Set<Processor> possibleSourceProcessors = scufl2Tools - .possibleUpStreamProcessors(workflow, - sinkProcessor); - if (possibleSourceProcessors - .contains(sourceProcessor)) { - edgeCreationSink = graphElement; - edgeValid = true; - } - } - if (sourceObject instanceof InputWorkflowPort) { - edgeCreationSink = graphElement; - edgeValid = true; - } - } - } else if (dataflowObject instanceof OutputWorkflowPort) { - if (sourceObject != null) { - edgeCreationSink = graphElement; - edgeValid = true; - } - } else if (dataflowObject instanceof Processor) { - Processor sinkProcessor = (Processor) dataflowObject; - Processor sourceProcessor = null; - if (sourceObject instanceof Processor) - sourceProcessor = (Processor) sourceObject; - else if (portToProcessor.containsKey(sourceObject)) - sourceProcessor = portToProcessor.get(sourceObject); - if (sourceProcessor != null) { - Set<Processor> possibleSourceProcessors = scufl2Tools - .possibleUpStreamProcessors(workflow, - sinkProcessor); - if (possibleSourceProcessors.contains(sourceProcessor)) { - edgeCreationSink = graphElement; - edgeValid = true; - } - } - if (sourceObject instanceof InputWorkflowPort) { - edgeCreationSink = graphElement; - edgeValid = true; - } - } - } - if (!edgeValid) - edgeCreationSink = null; - } - return edgeValid; - } - - public boolean stopEdgeCreation(GraphElement graphElement, Point point) { - boolean edgeCreated = false; - if (edgeCreationSource != null && edgeCreationSink != null) { - SenderPort source = null; - ReceiverPort sink = null; - Object sourceDataflowObject = edgeCreationSource.getWorkflowBean(); - Object sinkDataflowObject = edgeCreationSink.getWorkflowBean(); - if (sourceDataflowObject instanceof SenderPort) - source = (SenderPort) sourceDataflowObject; - else if (sourceDataflowObject instanceof Processor) { - Processor processor = (Processor) sourceDataflowObject; - source = showPortOptions(processor.getOutputPorts(), "output", - componentForPopups, point); - } - if (sinkDataflowObject instanceof ReceiverPort) - sink = (ReceiverPort) sinkDataflowObject; - else if (sinkDataflowObject instanceof Processor) { - Processor processor = (Processor) sinkDataflowObject; - sink = showPortOptions(processor.getInputPorts(), "input", - componentForPopups, point); - } - if (source != null && sink != null) { - Edit<?> edit = null; - if (edgeMoveElement == null) { - DataLink dataLink = new DataLink(); - dataLink.setReceivesFrom(source); - dataLink.setSendsTo(sink); - edit = new AddDataLinkEdit(workflow, dataLink); - } else { - Object existingSink = edgeMoveElement.getSink() - .getWorkflowBean(); - if (existingSink != sink) { - List<Edit<?>> editList = new ArrayList<Edit<?>>(); - DataLink existingDataLink = (DataLink) edgeMoveElement - .getWorkflowBean(); - DataLink newDataLink = new DataLink(); - newDataLink.setReceivesFrom(existingDataLink - .getReceivesFrom()); - newDataLink.setSendsTo(sink); - editList.add(new RemoveDataLinkEdit(workflow, - existingDataLink)); - editList.add(new AddDataLinkEdit(workflow, newDataLink)); - edit = new CompoundEdit(editList); - } - } - try { - if (edit != null) { - editManager.doDataflowEdit(workflow.getParent(), edit); - edgeCreated = true; - } - } catch (EditException e) { - logger.debug("Failed to create datalink from '" - + source.getName() + "' to '" + sink.getName() - + "'"); - } - } - } - edgeCreationSource = null; - edgeCreationSink = null; - edgeMoveElement = null; - edgeCreationFromSource = false; - edgeCreationFromSink = false; - - return edgeCreated; - } - - private <T extends Port> T showPortOptions(NamedSet<T> ports, - String portType, Component component, Point point) { - T result = null; - if (ports.size() == 0) { - showMessageDialog(component, "Service has no " + portType - + " ports to connect to"); - } else if (ports.size() == 1) - result = ports.first(); - else { - Object[] portNames = ports.getNames().toArray(); - String portName = (String) showInputDialog(component, "Select an " - + portType + " port", "Port Chooser", PLAIN_MESSAGE, null, - portNames, portNames[0]); - if (portName != null) - result = ports.getByName(portName); - } - return result; - - } - - public void resetSelection() { - if (dataflowSelectionModel != null) - for (Object dataflowElement : dataflowSelectionModel.getSelection()) { - GraphElement graphElement = workflowToGraph - .get(dataflowElement); - if (graphElement != null) - graphElement.setSelected(true); - } - } - - public void setIteration(String nodeId, int iteration) { - if (graphElementMap.containsKey(nodeId)) { - GraphElement graphElement = graphElementMap.get(nodeId); - graphElement.setIteration(iteration); - } - } - - public void setErrors(String nodeId, int errors) { - if (graphElementMap.containsKey(nodeId)) { - GraphElement graphElement = graphElementMap.get(nodeId); - graphElement.setErrors(errors); - } - } - - @Override - public void notify(Observable<DataflowSelectionMessage> sender, - DataflowSelectionMessage message) throws Exception { - GraphElement graphElement = workflowToGraph.get(message.getElement()); - if (graphElement != null) - graphElement.setSelected(message.getType().equals( - DataflowSelectionMessage.Type.ADDED)); - } - - /** - * Returns the GraphEventManager. - * - * @return the GraphEventManager - */ - public GraphEventManager getGraphEventManager() { - return graphEventManager; - } - - /** - * Sets the GraphEventManager. - * - * @param graphEventManager - * the new GraphEventManager - */ - public void setGraphEventManager(GraphEventManager graphEventManager) { - this.graphEventManager = graphEventManager; - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEdge.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEdge.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEdge.java deleted file mode 100644 index d1348d2..0000000 --- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEdge.java +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2007 The University of Manchester - * - * Modifications to the initial code base are copyright of their - * respective authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.workbench.models.graph; - -import java.awt.Point; -import java.util.List; - -/** - * An edge connecting two nodes in a graph. - * - * @author David Withers - */ -public class GraphEdge extends GraphElement { - public enum ArrowStyle {NONE, NORMAL, DOT} - - private GraphNode source; - private GraphNode sink; - private ArrowStyle arrowHeadStyle = ArrowStyle.NORMAL; - private ArrowStyle arrowTailStyle = ArrowStyle.NONE; - private List<Point> path; - - /** - * Constructs a new instance of Edge. - * - */ - public GraphEdge(GraphController graphController) { - super(graphController); - } - - /** - * Returns the source. - * - * @return the source - */ - public GraphNode getSource() { - return source; - } - - /** - * Sets the source. - * - * @param source the new source - */ - public void setSource(GraphNode source) { - this.source = source; - } - - /** - * Returns the sink. - * - * @return the sink - */ - public GraphNode getSink() { - return sink; - } - - /** - * Sets the sink. - * - * @param sink the new sink - */ - public void setSink(GraphNode sink) { - this.sink = sink; - } - - /** - * Returns the arrowHeadStyle. - * - * @return the arrowHeadStyle - */ - public ArrowStyle getArrowHeadStyle() { - return arrowHeadStyle; - } - - /** - * Sets the arrowHeadStyle. - * - * @param arrowHeadStyle the new arrowHeadStyle - */ - public void setArrowHeadStyle(ArrowStyle arrowHeadStyle) { - this.arrowHeadStyle = arrowHeadStyle; - } - - /** - * Returns the arrowTailStyle. - * - * @return the arrowTailStyle - */ - public ArrowStyle getArrowTailStyle() { - return arrowTailStyle; - } - - /** - * Sets the arrowTailStyle. - * - * @param arrowTailStyle the new arrowTailStyle - */ - public void setArrowTailStyle(ArrowStyle arrowTailStyle) { - this.arrowTailStyle = arrowTailStyle; - } - - /** - * Returns the path. - * - * @return the path - */ - public List<Point> getPath() { - return path; - } - - /** - * Sets the path. - * - * @param path the new path - */ - public void setPath(List<Point> path) { - this.path = path; - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphElement.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphElement.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphElement.java deleted file mode 100644 index 8bb7bc8..0000000 --- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphElement.java +++ /dev/null @@ -1,430 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2007 The University of Manchester - * - * Modifications to the initial code base are copyright of their - * respective authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.workbench.models.graph; - -import java.awt.Color; -import java.awt.Point; - -import uk.org.taverna.scufl2.api.common.WorkflowBean; - -/** - * An element of a graph. - * - * @author David Withers - */ -public abstract class GraphElement { - public enum LineStyle { - NONE, SOLID, DOTTED - } - - private String id; - private String label; - private Point labelPosition; - private LineStyle lineStyle = LineStyle.SOLID; - private Color color = Color.BLACK; - private Color fillColor; - private float opacity = 1f; - private GraphElement parent; - private boolean selected; - private boolean active; - private boolean interactive; - private boolean visible = true; - private boolean filtered; - private WorkflowBean workflowBean; - protected GraphController graphController; - protected float completed; - protected int iteration; - protected int errors; - - protected GraphElement(GraphController graphController) { - this.graphController = graphController; - } - - /** - * Returns the eventManager. - * - * @return the eventManager - */ - public GraphEventManager getEventManager() { - if (graphController != null) { - return graphController.getGraphEventManager(); - } - return null; - } - - /** - * Returns the workflowBean. - * - * @return the workflowBean - */ - public WorkflowBean getWorkflowBean() { - return workflowBean; - } - - /** - * Sets the workflowBean. - * - * @param workflowBean - * the new workflowBean - */ - public void setWorkflowBean(WorkflowBean workflowBean) { - this.workflowBean = workflowBean; - } - - /** - * Returns the parent. - * - * @return the parent - */ - public GraphElement getParent() { - return parent; - } - - /** - * Sets the parent. - * - * @param parent - * the new parent - */ - protected void setParent(GraphElement parent) { - this.parent = parent; - } - - /** - * Returns the label. - * - * @return the label - */ - public String getLabel() { - return label; - } - - /** - * Sets the label. - * - * @param label - * the new label - */ - public void setLabel(String label) { - this.label = label; - } - - /** - * Returns the labelPosition. - * - * @return the labelPosition - */ - public Point getLabelPosition() { - return labelPosition; - } - - /** - * Sets the labelPosition. - * - * @param labelPosition - * the new labelPosition - */ - public void setLabelPosition(Point labelPosition) { - this.labelPosition = labelPosition; - } - - /** - * Returns the id. - * - * @return the id - */ - public String getId() { - return id; - } - - /** - * Sets the id. - * - * @param id - * the new id - */ - public void setId(String id) { - if (graphController != null) { - graphController.mapElement(id, this); - } - this.id = id; - } - - /** - * Returns the colour. - * - * @return the colour - */ - public Color getColor() { - return color; - } - - /** - * Sets the colour. - * - * @param color - * the new colour - */ - public void setColor(Color color) { - this.color = color; - } - - /** - * Returns the fillColor. - * - * @return the fillColor - */ - public Color getFillColor() { - return fillColor; - } - - /** - * Sets the fillColor. - * - * @param fillColor - * the new fillColor - */ - public void setFillColor(Color fillColor) { - this.fillColor = fillColor; - } - - /** - * Returns the lineStyle. - * - * @return the lineStyle - */ - public LineStyle getLineStyle() { - return lineStyle; - } - - /** - * Sets the lineStyle. - * - * @param lineStyle - * the new lineStyle - */ - public void setLineStyle(LineStyle lineStyle) { - this.lineStyle = lineStyle; - } - - @Override - public String toString() { - return id + "[" + label + "]"; - } - - /** - * Returns the selected. - * - * @return the selected - */ - public boolean isSelected() { - return selected; - } - - /** - * Sets the selected. - * - * @param selected - * the new selected - */ - public void setSelected(boolean selected) { - this.selected = selected; - } - - /** - * Returns the iteration. - * - * @return the value of iteration - */ - public int getIteration() { - return iteration; - } - - /** - * Sets the iteration. - * - * @param iteration - * the new value for iteration - */ - public void setIteration(int iteration) { - this.iteration = iteration; - } - - /** - * Returns the errors. - * - * @return the value of errors - */ - public int getErrors() { - return errors; - } - - /** - * Sets the errors. - * - * @param errors - * the new value for errors - */ - public void setErrors(int errors) { - this.errors = errors; - } - - /** - * Returns the completed. - * - * @return the value of completed - */ - public float getCompleted() { - return completed; - } - - /** - * Sets the completed value. - * - * @param completed - */ - public void setCompleted(float completed) { - this.completed = completed; - } - - /** - * Returns <code>true</code> if the element is active. The default value is - * <code>false</code>. - * - * @return <code>true</code> if the element is active - */ - public boolean isActive() { - return active; - } - - /** - * Sets the value of active. - * - * @param active - * the new active - */ - public void setActive(boolean active) { - this.active = active; - } - - /** - * Returns <code>true</code> if the element is interactive. The default - * value is <code>false</code>. - * - * @return <code>true</code> if the element is interactive - */ - public boolean isInteractive() { - return interactive; - } - - /** - * Sets the value of interactive. - * - * @param interactive - * the new interactive - */ - public void setInteractive(boolean interactive) { - this.interactive = interactive; - } - - /** - * Returns <code>true</code> if the element is visible. The default value is - * <code>true</code>. - * - * @return <code>true</code> if the element is visible - */ - public boolean isVisible() { - return visible; - } - - /** - * Sets whether the element is visible. - * - * @param visible - * the new value for visible - */ - public void setVisible(boolean visible) { - this.visible = visible; - } - - /** - * Returns the opacity value. The default value is 1.0 - * - * @return the opacity value - */ - public float getOpacity() { - return opacity; - } - - /** - * Sets the opacity of the element. Must be a value between 0.0 and 1.0. - * - * @param opacity - * the new opacity value - */ - public void setOpacity(float opacity) { - this.opacity = opacity; - } - - /** - * Returns <code>true</code> if the element is filtered. - * - * @return <code>true</code> if the element is filtered - */ - public boolean isFiltered() { - return filtered; - } - - /** - * Sets the value of filtered. - * - * @param filtered - * the new value for filtered - */ - public void setFiltered(boolean filtered) { - this.filtered = filtered; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((id == null) ? 0 : id.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - - // Equality by id - GraphElement other = (GraphElement) obj; - if (id == null) - return (other.id == null); - return id.equals(other.id); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEventManager.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEventManager.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEventManager.java deleted file mode 100644 index a6b9b0e..0000000 --- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEventManager.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2007 The University of Manchester - * - * Modifications to the initial code base are copyright of their - * respective authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.workbench.models.graph; - -public interface GraphEventManager { - void mouseClicked(GraphElement graphElement, short button, boolean altKey, - boolean ctrlKey, boolean metaKey, int x, int y, int screenX, - int screenY); - - void mouseDown(GraphElement graphElement, short button, boolean altKey, - boolean ctrlKey, boolean metaKey, int x, int y, int screenX, - int screenY); - - void mouseUp(GraphElement graphElement, short button, boolean altKey, - boolean ctrlKey, boolean metaKey, final int x, final int y, - int screenX, int screenY); - - void mouseMoved(GraphElement graphElement, short button, boolean altKey, - boolean ctrlKey, boolean metaKey, int x, int y, int screenX, - int screenY); - - void mouseOver(GraphElement graphElement, short button, boolean altKey, - boolean ctrlKey, boolean metaKey, int x, int y, int screenX, - int screenY); - - void mouseOut(GraphElement graphElement, short button, boolean altKey, - boolean ctrlKey, boolean metaKey, int x, int y, int screenX, - int screenY); -}
