You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by ma...@apache.org on 2011/08/06 22:28:25 UTC
svn commit: r1154578 -
/oodt/trunk/app/weditor/src/main/java/org/apache/oodt/cas/workflow/gui/perspective/view/impl/JungJGraphModelAdapter.java
Author: mattmann
Date: Sat Aug 6 20:28:24 2011
New Revision: 1154578
URL: http://svn.apache.org/viewvc?rev=1154578&view=rev
Log:
- OODT-296 Workflow Editor GUI: Display of workflows working fine now. Some more work to do, but happy to close this
up as an initial version once the icons are in.
Modified:
oodt/trunk/app/weditor/src/main/java/org/apache/oodt/cas/workflow/gui/perspective/view/impl/JungJGraphModelAdapter.java
Modified: oodt/trunk/app/weditor/src/main/java/org/apache/oodt/cas/workflow/gui/perspective/view/impl/JungJGraphModelAdapter.java
URL: http://svn.apache.org/viewvc/oodt/trunk/app/weditor/src/main/java/org/apache/oodt/cas/workflow/gui/perspective/view/impl/JungJGraphModelAdapter.java?rev=1154578&r1=1154577&r2=1154578&view=diff
==============================================================================
--- oodt/trunk/app/weditor/src/main/java/org/apache/oodt/cas/workflow/gui/perspective/view/impl/JungJGraphModelAdapter.java (original)
+++ oodt/trunk/app/weditor/src/main/java/org/apache/oodt/cas/workflow/gui/perspective/view/impl/JungJGraphModelAdapter.java Sat Aug 6 20:28:24 2011
@@ -23,6 +23,9 @@ import java.awt.Font;
import java.awt.geom.Rectangle2D;
import java.util.HashMap;
import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
import javax.swing.BorderFactory;
//OODT imports
@@ -31,21 +34,17 @@ import org.apache.oodt.cas.workflow.gui.
//JGraph imports
import org.jgraph.event.GraphModelEvent;
import org.jgraph.event.GraphModelListener;
-import org.jgraph.event.GraphModelEvent.GraphModelChange;
import org.jgraph.graph.AttributeMap;
import org.jgraph.graph.ConnectionSet;
import org.jgraph.graph.DefaultEdge;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.DefaultGraphModel;
import org.jgraph.graph.DefaultPort;
-import org.jgraph.graph.GraphCell;
import org.jgraph.graph.GraphConstants;
//Jung imports
import edu.uci.ics.jung.graph.ObservableGraph;
import edu.uci.ics.jung.graph.event.GraphEvent;
-import edu.uci.ics.jung.graph.event.GraphEvent.Edge;
-import edu.uci.ics.jung.graph.event.GraphEvent.Vertex;
import edu.uci.ics.jung.graph.event.GraphEventListener;
/**
@@ -65,47 +64,70 @@ public class JungJGraphModelAdapter exte
private ObservableGraph<ModelNode, IdentifiableEdge> jungGraph;
- private Map<GraphCell, Vertex<ModelNode, IdentifiableEdge>> jgraphVertexToJungVertexMap;
-
- private Map<Vertex<ModelNode, IdentifiableEdge>, GraphCell> jungVertexToJgraphVertexMap;
-
- private Map<GraphCell, Edge<ModelNode, IdentifiableEdge>> jgraphEdgeToJungEdgeMap;
-
- private Map<Edge<ModelNode, IdentifiableEdge>, GraphCell> jungEdgeToJGraphEdgeMap;
+ private Map<String, DefaultGraphCell> cellMap;
+ private static final Logger LOG = Logger.getLogger(JungJGraphModelAdapter.class.getName());
+
public JungJGraphModelAdapter(
- ObservableGraph<ModelNode, IdentifiableEdge> jungGraph) {
+ final ObservableGraph<ModelNode, IdentifiableEdge> jungGraph) {
this.jungGraph = jungGraph;
- this.jgraphVertexToJungVertexMap = new HashMap<GraphCell, GraphEvent.Vertex<ModelNode,IdentifiableEdge>>();
- this.jungVertexToJgraphVertexMap = new HashMap<GraphEvent.Vertex<ModelNode,IdentifiableEdge>, GraphCell>();
- this.jgraphEdgeToJungEdgeMap = new HashMap<GraphCell, GraphEvent.Edge<ModelNode,IdentifiableEdge>>();
- this.jungEdgeToJGraphEdgeMap = new HashMap<GraphEvent.Edge<ModelNode,IdentifiableEdge>, GraphCell>();
- this.jungGraph.addGraphEventListener(new WorkflowChangeListener(this));
+ this.jungGraph.addGraphEventListener(new WorkflowChangeListener(this));
+ this.cellMap = new HashMap<String, DefaultGraphCell>();
this.addGraphModelListener(new GraphModelListener() {
-
+
@Override
public void graphChanged(GraphModelEvent e) {
Object[] added = e.getChange().getInserted();
- //Object[] removed =
-
+ Object[] removed = e.getChange().getRemoved();
+
+ if (added != null && added.length > 0) {
+ for (Object a : added) {
+ LOG.log(Level.FINE, "Jgraph notification of object added: ["
+ + a.getClass().getName() + "]");
+
+ if (a instanceof org.jgraph.graph.Edge) {
+ LOG.log(Level.FINE, "Edge added to jgraph");
+ org.jgraph.graph.DefaultEdge edge = (org.jgraph.graph.DefaultEdge) a;
+ if (!jungGraph.getEdges().contains(edge.getUserObject())) {
+ jungGraph.addEdge(
+ new IdentifiableEdge((ModelNode) edge.getSource(),
+ (ModelNode) edge.getTarget()), (ModelNode) edge
+ .getSource(), (ModelNode) edge.getTarget());
+ }
+ } else if (a instanceof org.jgraph.graph.DefaultGraphCell) {
+ LOG.log(Level.FINE, "Vertex added to jgraph");
+ org.jgraph.graph.DefaultGraphCell cell = (org.jgraph.graph.DefaultGraphCell) a;
+
+ if (!jungGraph.getVertices().contains(cell.getUserObject())) {
+ jungGraph.addVertex((ModelNode) cell.getUserObject());
+ }
+ }
+ }
+ }
+
+ if (removed != null && removed.length > 0) {
+ for (Object r : removed) {
+ LOG.log(Level.FINE, "Jgraph notification of object removed: ["
+ + r.getClass().getName() + "]");
+ }
+ }
+
}
});
-
+
}
public DefaultGraphCell getVertexCell(ModelNode node) {
- for (ModelNode v : this.jungGraph.getVertices()) {
- if (v.getId().equals(node.getId())) {
- DefaultGraphCell cell = new DefaultGraphCell();
- cell.setUserObject(v);
- return cell;
- }
+ if (cellMap.get(node.getId()) != null) {
+ return cellMap.get(node.getId());
}
- return new DefaultGraphCell(node);
+ DefaultGraphCell cell = new DefaultGraphCell(node);
+ cell.add(new DefaultPort());
+ return cell;
}
- private AttributeMap getEdgeAttributes() {
+ private AttributeMap getEdgeAttributes(DefaultEdge edge) {
AttributeMap eMap = new AttributeMap();
GraphConstants.setLineEnd(eMap, GraphConstants.ARROW_TECHNICAL);
GraphConstants.setEndFill(eMap, true);
@@ -114,10 +136,12 @@ public class JungJGraphModelAdapter exte
GraphConstants.setFont(eMap,
GraphConstants.DEFAULTFONT.deriveFont(Font.BOLD, 12));
GraphConstants.setLineColor(eMap, Color.decode("#7AA1E6"));
- return eMap;
+ AttributeMap map = new AttributeMap();
+ map.put(edge, eMap);
+ return map;
}
- private AttributeMap getVertexAttributes() {
+ private AttributeMap getVertexAttributes(DefaultGraphCell cell) {
AttributeMap vMap = new AttributeMap();
Color c = Color.decode("#FF9900");
@@ -128,7 +152,10 @@ public class JungJGraphModelAdapter exte
GraphConstants.setFont(vMap,
GraphConstants.DEFAULTFONT.deriveFont(Font.BOLD, 12));
GraphConstants.setOpaque(vMap, true);
- return vMap;
+
+ AttributeMap map = new AttributeMap();
+ map.put(cell, vMap);
+ return map;
}
private class WorkflowChangeListener implements
@@ -151,34 +178,52 @@ public class JungJGraphModelAdapter exte
@Override
public void handleGraphEvent(GraphEvent<ModelNode, IdentifiableEdge> e) {
if (e.getType().equals(GraphEvent.Type.EDGE_ADDED)) {
- System.out.println("EDGE ADDED!");
+ LOG.log(Level.FINE, "EDGE ADDED!");
GraphEvent.Edge<ModelNode, IdentifiableEdge> event = (GraphEvent.Edge<ModelNode, IdentifiableEdge>) e;
- ConnectionSet set = new ConnectionSet();
- DefaultEdge theEdge = new DefaultEdge(event.getEdge());
- DefaultGraphCell from = new DefaultGraphCell((Object) event.getEdge()
- .getFrom());
- from.add(new DefaultPort((Object) event.getEdge().getFrom()));
- DefaultGraphCell to = new DefaultGraphCell((Object) event.getEdge()
- .getTo());
- to.add(new DefaultPort((Object) event.getEdge().getTo()));
- set.connect(theEdge, (DefaultPort) from.getChildAt(0),
- (DefaultPort) to.getChildAt(0));
- insert(new Object[] { theEdge }, getEdgeAttributes(), set, null, null);
+ addJGraphEdge(event.getEdge());
} else if (e.getType().equals(GraphEvent.Type.EDGE_REMOVED)) {
- System.out.println("EDGE REMOVED!");
+ LOG.log(Level.FINE, "EDGE REMOVED!");
} else if (e.getType().equals(GraphEvent.Type.VERTEX_ADDED)) {
- System.out.println("VERTEX ADDED!");
+ LOG.log(Level.FINE, "VERTEX ADDED!");
GraphEvent.Vertex<ModelNode, IdentifiableEdge> event = (GraphEvent.Vertex<ModelNode, IdentifiableEdge>) e;
- DefaultGraphCell cell = new DefaultGraphCell(event.getVertex());
- cell.add(new DefaultPort());
- insert(new Object[] { cell }, getVertexAttributes(), null, null, null);
-
+ addJGraphVertex(event.getVertex());
} else if (e.getType().equals(GraphEvent.Type.VERTEX_REMOVED)) {
- System.out.println("VERTEX REMOVED!");
+ LOG.log(Level.FINE, "VERTEX REMOVED!");
}
}
}
+ private void addJGraphVertex(ModelNode node) {
+ DefaultGraphCell cell = new DefaultGraphCell(node);
+ cell.add(new DefaultPort());
+ insert(new Object[] { cell }, getVertexAttributes(cell), null, null, null);
+ cellMap.put(node.getId(), cell);
+ }
+
+ private void addJGraphEdge(IdentifiableEdge e) {
+ ConnectionSet set = new ConnectionSet();
+ DefaultEdge theEdge = new DefaultEdge(e);
+ DefaultGraphCell from = null;
+ DefaultGraphCell to = null;
+ String fromVertexId = e.getFrom().getId();
+ String toVertexId = e.getTo().getId();
+ if (!cellMap.containsKey(fromVertexId)) {
+ addJGraphVertex(e.getFrom());
+ }
+ from = cellMap.get(fromVertexId);
+
+ if (!cellMap.containsKey(toVertexId)) {
+ addJGraphVertex(e.getTo());
+ }
+
+ to = cellMap.get(toVertexId);
+
+ set.connect(theEdge, (DefaultPort) from.getChildAt(0),
+ (DefaultPort) to.getChildAt(0));
+ insert(new Object[] { theEdge }, getEdgeAttributes(theEdge), set, null,
+ null);
+ }
+
}