|
From: <jan...@us...> - 2008-01-21 22:19:06
|
Revision: 716
http://magicmap.svn.sourceforge.net/magicmap/?rev=716&view=rev
Author: jan_fride
Date: 2008-01-21 14:18:23 -0800 (Mon, 21 Jan 2008)
Log Message:
-----------
Added NodeGraphListener and INodePlacer#getLength(IMagicEdge....)
Modified Paths:
--------------
trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java
Added Paths:
-----------
trunk/magicmapclient/src/net/sf/magicmap/client/model/location/MagicGraphEvent.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/location/NodeGraphListener.java
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java 2008-01-21 22:01:28 UTC (rev 715)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java 2008-01-21 22:18:23 UTC (rev 716)
@@ -1,12 +1,12 @@
package net.sf.magicmap.client.model.location;
-import java.util.HashMap;
-
import net.sf.magicmap.client.algorithms.NodeMetricManager;
import net.sf.magicmap.client.model.node.IMagicEdge;
import net.sf.magicmap.client.model.node.Node;
+import java.util.HashMap;
+
/**
* Berechnet die Orte von Knoten. Um einem Model ein INodePlacer hinzuzfügen
* muss man nur
@@ -33,7 +33,15 @@
*/
void deleteNode(Node node);
+
/**
+ * get the edges length.
+ * @param egde the edge
+ * @return the edges Length or Double.NaN.
+ */
+ double getLength(IMagicEdge egde);
+
+ /**
* Legt eine gerichtete Kante zwischen den beiden Knoten an.
*
* @param n1 die Quelle der Kante
@@ -113,7 +121,27 @@
/**
*
+ * @param l
*/
+ void addNodeGraphListener(NodeGraphListener l);
+
+ /**
+ *
+ * @param l
+ */
+ void removeNodeGraphListener(NodeGraphListener l);
+
+ /**
+ *
+ * @return
+ */
+ NodeGraphListener[] getNodeGraphListeners();
+
+
+
+ /**
+ *
+ */
static final class NodeHandlerFactory {
public final HashMap<Integer, NodeUpdateHandler> handlerMap;
Added: trunk/magicmapclient/src/net/sf/magicmap/client/model/location/MagicGraphEvent.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/MagicGraphEvent.java (rev 0)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/location/MagicGraphEvent.java 2008-01-21 22:18:23 UTC (rev 716)
@@ -0,0 +1,34 @@
+package net.sf.magicmap.client.model.location;
+
+import net.sf.magicmap.client.model.node.IMagicEdge;
+
+import java.util.EventObject;
+
+/**
+ * <p>
+ * Class MagicGraphEvent ZUSAMMENFASSUNG
+ * </p>
+ * <p>
+ * DETAILS
+ * </p>
+ *
+ * @author Jan Friderici
+ * Date: 21.01.2008
+ * Time: 09:07:01
+ */
+public class MagicGraphEvent extends EventObject {
+ private final IMagicEdge edge;
+
+ public MagicGraphEvent(INodePlacer placer, IMagicEdge edge) {
+ super(placer);
+ this.edge = edge;
+ }
+
+ public INodePlacer getSource() {
+ return (INodePlacer)super.getSource();
+ }
+
+ public IMagicEdge getEdge() {
+ return edge;
+ }
+}
Added: trunk/magicmapclient/src/net/sf/magicmap/client/model/location/NodeGraphListener.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/NodeGraphListener.java (rev 0)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/location/NodeGraphListener.java 2008-01-21 22:18:23 UTC (rev 716)
@@ -0,0 +1,31 @@
+package net.sf.magicmap.client.model.location;
+
+
+import java.util.EventListener;
+
+/**
+ * <p>
+ * Class NodeGraphListener ZUSAMMENFASSUNG
+ * </p>
+ * <p>
+ * DETAILS
+ * </p>
+ *
+ * @author Jan Friderici
+ * Date: 21.01.2008
+ * Time: 09:06:43
+ */
+public interface NodeGraphListener extends EventListener{
+
+ /**
+ *
+ * @param edge
+ */
+ void edgeAdded(MagicGraphEvent edge);
+
+ /**
+ *
+ * @param edge
+ */
+ void edgeRemoved(MagicGraphEvent edge);
+}
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java 2008-01-21 22:01:28 UTC (rev 715)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java 2008-01-21 22:18:23 UTC (rev 716)
@@ -4,6 +4,9 @@
import edu.uci.ics.jung.graph.Edge;
import edu.uci.ics.jung.graph.Vertex;
import edu.uci.ics.jung.graph.decorators.StringLabeller;
+import edu.uci.ics.jung.graph.event.GraphEvent;
+import edu.uci.ics.jung.graph.event.GraphEventListener;
+import edu.uci.ics.jung.graph.event.GraphEventType;
import edu.uci.ics.jung.graph.impl.DirectedSparseGraph;
import edu.uci.ics.jung.graph.impl.DirectedSparseVertex;
import edu.uci.ics.jung.utils.UserData;
@@ -12,12 +15,15 @@
import net.sf.magicmap.client.algorithms.NodeMetricManager;
import net.sf.magicmap.client.algorithms.NodeModelMetric;
import net.sf.magicmap.client.model.location.INodePlacer;
+import net.sf.magicmap.client.model.location.MagicGraphEvent;
+import net.sf.magicmap.client.model.location.NodeGraphListener;
import net.sf.magicmap.client.model.location.NodeUpdateHandler;
import net.sf.magicmap.client.model.location.jung.handler.*;
import net.sf.magicmap.client.model.node.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.swing.event.EventListenerList;
import java.awt.*;
import java.util.*;
@@ -82,6 +88,33 @@
private final Map<Edge, IMagicEdge> magicEdges = new HashMap<Edge, IMagicEdge>();
+
+ private final EventListenerList listeners = new EventListenerList();
+
+ /**
+ * Listener thet lstens on the original graph.
+ */
+ private GraphEventListener edgeAddListener = new GraphEventListener() {
+ public void vertexAdded(GraphEvent event) {
+ // NOP
+ }
+
+ public void vertexRemoved(GraphEvent event) {
+ // NOP
+ }
+
+ public void edgeAdded(GraphEvent event) {
+ JungEdge edge = (JungEdge) event.getGraphElement();
+ fireEdgeAdded(edge);
+ }
+
+ public void edgeRemoved(GraphEvent event) {
+ JungEdge edge = (JungEdge) event.getGraphElement();
+ fireEdgeRemoved(edge);
+ }
+ };
+
+
public JungNodePlacer() {
this(new MagicMetric());
}
@@ -111,6 +144,7 @@
this.labeller = StringLabeller.getLabeller(this);
initNodeHandler();
+ super.addListener(edgeAddListener, GraphEventType.ALL_SINGLE_EVENTS);
}
/**
@@ -421,4 +455,59 @@
return edgeCopy.iterator();
}
}
+
+
+ /**
+ *
+ * @param l
+ */
+ public void addNodeGraphListener(NodeGraphListener l) {
+ listeners.add(NodeGraphListener.class, l);
+ }
+
+ /**
+ *
+ * @param l
+ */
+ public void removeNodeGraphListener(NodeGraphListener l) {
+ listeners.remove(NodeGraphListener.class, l);
+ }
+
+ /**
+ *
+ * @return
+ */
+ public NodeGraphListener[] getNodeGraphListeners() {
+ return listeners.getListeners(NodeGraphListener.class);
+ }
+
+ /**
+ * Forward to the springlayout....
+ * @param egde
+ * @return
+ */
+ public double getLength(IMagicEdge egde) {
+ return this.layout.getLength((JungEdge)egde);
+ }
+
+ /**
+ *
+ * @param edge
+ */
+ private void fireEdgeAdded(JungEdge edge) {
+ final MagicGraphEvent e = new MagicGraphEvent(this,edge);
+ for (NodeGraphListener l: getNodeGraphListeners()) {
+ l.edgeAdded(e);
+ }
+ }
+ /**
+ *
+ * @param edge
+ */
+ private void fireEdgeRemoved(JungEdge edge) {
+ final MagicGraphEvent e = new MagicGraphEvent(this,edge);
+ for (NodeGraphListener l: getNodeGraphListeners()) {
+ l.edgeRemoved(e);
+ }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|