|
From: <jan...@us...> - 2007-01-21 12:01:39
|
Revision: 513
http://svn.sourceforge.net/magicmap/?rev=513&view=rev
Author: jan_fride
Date: 2007-01-21 04:01:13 -0800 (Sun, 21 Jan 2007)
Log Message:
-----------
nodemodel and measurementmodel
Modified Paths:
--------------
trunk/magicmapclient/src/net/sf/magicmap/client/controller/PollHandler.java
trunk/magicmapclient/src/net/sf/magicmap/client/gui/views/MapView.java
trunk/magicmapclient/src/net/sf/magicmap/client/gui/views/OutlineView.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/measurement/IMeasurementModel.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/measurement/MeasurementModel.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/AccessPointNode.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/AccessPointSeerNode.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/ClientNode.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/INodeModel.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/LocationNode.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/Node.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModel.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModelSelectionEvent.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModelSelectionListener.java
trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeSelectionModel.java
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/controller/PollHandler.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/controller/PollHandler.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/controller/PollHandler.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -5,6 +5,7 @@
package net.sf.magicmap.client.controller;
import net.sf.magicmap.client.interfaces.ServerPollerListener;
+import net.sf.magicmap.client.model.measurement.IMeasurementModel;
import net.sf.magicmap.client.model.node.*;
import net.sf.magicmap.server.dto.*;
@@ -302,36 +303,15 @@
ArrayList seenAps = client.getSeenAccessPoints();
if (sr != null) {
- for (SimpleScanResultDTO r : sr) {
- String mac = r.getMacAP();
- // Gibt es ggf. einen AP mit der
- // Mac-Adresse?
- AccessPointNode ap = nodeModel.findAccessPoint(mac);
- if (ap == null) {
- // Nein
- ap = new AccessPointNode(nodeModel);
- ap.setMacAddress(mac);
- nodeModel.addNode(ap);
- // ap.setName(mac);
- } else // AccessPoint nur aktualisieren?
- if (seenAps.remove(ap)){ // Nur Signallevel aktualisieren
- client.setSignalLevelForAcessPoint(ap, r.getSignalLevel());
- Controller.getInstance().getMeasurementModel().updateScanResult(client, ap.getMacAddress(), r.getSignalLevel());
- }
- else{
- client.seesAccessPoint(ap, r.getSignalLevel());
- Controller.getInstance().getMeasurementModel().updateScanResult(client, ap.getMacAddress(), r.getSignalLevel());
- }
+ IMeasurementModel measurementModel = Controller.getInstance().getMeasurementModel();
+ double[] signalLevels = new double[sr.length];
+ String[] macs = new String[sr.length];
+ for (int i = 0; i < sr.length; ++i){
+ signalLevels[i] = sr[i].getSignalLevel();
+ macs[i] = sr[i].getMacAP();
}
+ measurementModel.updateScanResult (client, macs, signalLevels);
}
-
- // Alle APs aus seenAps werden demzufolge nicht
- // mehr gesehen und
- // dies teilen wir unserem Modell mit
- for (Object seenAp : seenAps) {
- AccessPointNode ap = (AccessPointNode) seenAp;
- client.notSeesAccessPoint(ap);
- }
}
/*
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/gui/views/MapView.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/gui/views/MapView.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/gui/views/MapView.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -4,60 +4,45 @@
package net.sf.magicmap.client.gui.views;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Image;
-import java.awt.Insets;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.border.EmptyBorder;
-
-import net.sf.magicmap.client.algorithms.InfoNodeMetric;
-import net.sf.magicmap.client.algorithms.MagicMetric;
-import net.sf.magicmap.client.algorithms.NodeMetricManager;
-import net.sf.magicmap.client.gui.PACWGraphDraw;
-import net.sf.magicmap.client.gui.utils.GUIBuilder;
-import net.sf.magicmap.client.gui.utils.GUIConstants;
-import net.sf.magicmap.client.gui.utils.GUIUtils;
-import net.sf.magicmap.client.gui.utils.NodeIcons;
-import net.sf.magicmap.client.meta.MapInfo;
-import net.sf.magicmap.client.model.location.INodePlacer;
-import net.sf.magicmap.client.model.location.jung.JungNodePlacer;
-import net.sf.magicmap.client.model.location.jung.LayoutSettings;
-import net.sf.magicmap.client.model.node.INodeModel;
-import net.sf.magicmap.client.model.node.InfoObjectNode;
-import net.sf.magicmap.client.model.node.Node;
-import net.sf.magicmap.client.model.node.NodeModelSelectionEvent;
-import net.sf.magicmap.client.model.node.NodeModelSelectionListener;
-
-import org.apache.log4j.Logger;
-
import com.brunchboy.util.swing.relativelayout.AttributeConstraint;
import com.brunchboy.util.swing.relativelayout.AttributeType;
import com.brunchboy.util.swing.relativelayout.DependencyManager;
import com.brunchboy.util.swing.relativelayout.RelativeLayout;
-
import edu.uci.ics.jung.graph.Edge;
import edu.uci.ics.jung.graph.Vertex;
import edu.uci.ics.jung.graph.decorators.EdgeColorFunction;
import edu.uci.ics.jung.graph.decorators.StringLabeller;
-import edu.uci.ics.jung.graph.decorators.VertexColorFunction;
import edu.uci.ics.jung.graph.decorators.StringLabeller.UniqueLabelException;
+import edu.uci.ics.jung.graph.decorators.VertexColorFunction;
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.visualization.SpringLayout;
+import net.sf.magicmap.client.algorithms.InfoNodeMetric;
+import net.sf.magicmap.client.algorithms.MagicMetric;
+import net.sf.magicmap.client.algorithms.NodeMetricManager;
+import net.sf.magicmap.client.gui.PACWGraphDraw;
+import net.sf.magicmap.client.gui.utils.GUIBuilder;
+import net.sf.magicmap.client.gui.utils.GUIConstants;
+import net.sf.magicmap.client.gui.utils.GUIUtils;
+import net.sf.magicmap.client.gui.utils.NodeIcons;
+import net.sf.magicmap.client.meta.MapInfo;
+import net.sf.magicmap.client.model.location.INodePlacer;
+import net.sf.magicmap.client.model.location.jung.JungNodePlacer;
+import net.sf.magicmap.client.model.location.jung.LayoutSettings;
+import net.sf.magicmap.client.model.node.*;
+import org.apache.log4j.Logger;
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import java.awt.*;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Set;
+
/**
* Kapselt das JUNG-Framework sowie die Karte
*
@@ -122,7 +107,7 @@
ni = NodeIcons.getInstance();
initializeGraph();
- model.addNodeModelListener(this.layoutModel);
+// model.addNodeModelListener(this.layoutModel);
this.getModel().addNodeModelSelectionListener(this);
}
@@ -257,7 +242,8 @@
MagicMetric magicMetric = new MagicMetric();
NodeMetricManager metrics = new NodeMetricManager(magicMetric);
metrics.addMetric(InfoObjectNode.class, InfoObjectNode.class, new InfoNodeMetric());
- layoutModel = new JungNodePlacer(getModel(), JungNodePlacer.DEFAULT_SETTINGS, metrics);
+ layoutModel = new JungNodePlacer();
+ getModel().setNodePlacer(layoutModel);
graph = layoutModel;// new DirectedSparseGraph();
graphdraw = new PACWGraphDraw(layoutModel);
graphdraw.setVisible(false);
@@ -451,42 +437,14 @@
fireRightClicked(x, y);
}
- /**
- * Verwandelt Node in Vertex und f?gt diesen in den Graphen ein. Es wird
- * keine R?cksicht auf den Typ des Knotens genommen. Eventuelle implizite
- * Kanten mu? der Aufrufer erstellen.
- *
- * @param node
- * @return
- */
- // public Vertex addVertex(Node node){
- // if (findVertex(node) == null){
- // if (node.getType() == INodeModel.NODETYPE_INFO) {
- // System.out.println(node.getDisplayName());
- // }
- // Vertex v = new DirectedSparseVertex();
- // synchronized (this.graph){
- // stopGraph();
- // graph.addVertex(v);
- // v.addUserDatum(NODE_KEY, node, UserData.SHARED);
- // ((SpringLayout) graphdraw.getGraphLayout()).update();
- // if (node.getX() >= 0 && node.getY() >= 0){
- // ((SpringLayout) graphdraw.getGraphLayout()).forceMove(v, node.getX(),
- // node.getY());
- // }
- // resumeGraph();
- // try{
- // labeller.setLabel(v, node.getDisplayName());
- // } catch (UniqueLabelException e){
- // e.printStackTrace();
- // }
- // }
- // return v;
- // } else{
- // return null;
- // }
- // }
- public void removeEdge(Node node1, Node node2){
+ /**
+ * remove an edge
+ * @param node1 node 1
+ * @param node2 node 2
+ */
+ //@TODO PLEASE DONT PUT LOGIC IN THE VIEWS!!!!!!!!!!!!!!!!
+ @Deprecated
+ public void removeEdge(Node node1, Node node2){
Vertex v = findVertex(node1);
Vertex w = findVertex(node2);
if (v != null && w != null) {
@@ -559,30 +517,9 @@
return node;
}
- // public Edge addEdge(Node node1, Node node2){
- // Vertex v = findVertex(node1);
- // Vertex w = findVertex(node2);
- // if (v == null || w == null) return null;
- // return addEdge(v, w);
- // }
-
- // public Edge addEdge(Vertex v1, Vertex v2){
- // Edge e = v1.findEdge(v2);
- // if (e != null){
- // return e;
- // } else{
- // DirectedSparseEdge edge = new DirectedSparseEdge(v1, v2);
- // stopGraph();
- // graph.addEdge(edge);
- // ((SpringLayout) graphdraw.getGraphLayout()).update();
- // resumeGraph();
- // return edge;
- // }
- // }
-
/**
*
- * @see net.sf.magicmap.client.interfaces.NodeModelListener#nodeAddedEvent(net.sf.magicmap.client.model.Node)
+ *
*/
public void nodeAddedEvent(Node node){
// TODO auch unn\xF6tig oder?
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/gui/views/OutlineView.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/gui/views/OutlineView.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/gui/views/OutlineView.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -4,31 +4,21 @@
package net.sf.magicmap.client.gui.views;
-import java.awt.Dimension;
-import java.awt.Insets;
-
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTree;
-import javax.swing.border.EmptyBorder;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.TreePath;
-
+import com.brunchboy.util.swing.relativelayout.RelativeLayout;
import net.sf.magicmap.client.gui.utils.GUIBuilder;
import net.sf.magicmap.client.gui.utils.GUIConstants;
import net.sf.magicmap.client.gui.utils.GUIUtils;
import net.sf.magicmap.client.gui.utils.RelativePanelBuilder;
-import net.sf.magicmap.client.model.node.INodeModel;
-import net.sf.magicmap.client.model.node.Node;
-import net.sf.magicmap.client.model.node.NodeModelConstants;
-import net.sf.magicmap.client.model.node.NodeModelSelectionEvent;
-import net.sf.magicmap.client.model.node.NodeModelSelectionListener;
+import net.sf.magicmap.client.model.node.*;
import net.sf.magicmap.client.model.outline.OutlineModel;
import net.sf.magicmap.client.model.outline.OutlineTreeNode;
-import com.brunchboy.util.swing.relativelayout.RelativeLayout;
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.TreePath;
+import java.awt.*;
/**
* View for the outline (left side list view of the application)
@@ -161,7 +151,6 @@
/**
* Get the alphabetical index for given OutlineNode in its parent
- * @param parent - the parent OutlineNode
* @param node - the OutlineNode to find out the index
* @return the index of node in parent
*/
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/location/INodePlacer.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -1,11 +1,11 @@
package net.sf.magicmap.client.model.location;
-import java.util.HashMap;
-
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
@@ -87,7 +87,8 @@
*/
public void addNodeUpdateHandler(NodeUpdateHandler handler);
- static final class NodeHandlerFactory {
+ public void updateNode(Node node, int type, Object data);
+ static final class NodeHandlerFactory {
public final HashMap<Integer, NodeUpdateHandler> handlerMap;
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 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/location/jung/JungNodePlacer.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -1,35 +1,6 @@
package net.sf.magicmap.client.model.location.jung;
-import java.awt.Dimension;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import net.sf.magicmap.client.algorithms.MagicMetric;
-import net.sf.magicmap.client.algorithms.NodeModelMetric;
-import net.sf.magicmap.client.interfaces.NodeModelListener;
-import net.sf.magicmap.client.model.location.INodePlacer;
-import net.sf.magicmap.client.model.location.NodeUpdateHandler;
-import net.sf.magicmap.client.model.location.jung.handler.AccessPointHiddenStateHandler;
-import net.sf.magicmap.client.model.location.jung.handler.FixStateHandler;
-import net.sf.magicmap.client.model.location.jung.handler.InfoNodeHandler;
-import net.sf.magicmap.client.model.location.jung.handler.LabelChangeHandler;
-import net.sf.magicmap.client.model.location.jung.handler.NotSeeAccessPointHandler;
-import net.sf.magicmap.client.model.location.jung.handler.PositionUpdateHandler;
-import net.sf.magicmap.client.model.location.jung.handler.SeeAccessPointHandler;
-import net.sf.magicmap.client.model.node.ClientNode;
-import net.sf.magicmap.client.model.node.IMagicEdge;
-import net.sf.magicmap.client.model.node.INodeModel;
-import net.sf.magicmap.client.model.node.LocationNode;
-import net.sf.magicmap.client.model.node.Node;
-import net.sf.magicmap.client.model.node.NodeModelConstants;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
import edu.uci.ics.jung.graph.Edge;
import edu.uci.ics.jung.graph.Vertex;
import edu.uci.ics.jung.graph.decorators.StringLabeller;
@@ -38,7 +9,19 @@
import edu.uci.ics.jung.graph.impl.DirectedSparseVertex;
import edu.uci.ics.jung.utils.UserData;
import edu.uci.ics.jung.visualization.SpringLayout;
+import net.sf.magicmap.client.algorithms.MagicMetric;
+import net.sf.magicmap.client.algorithms.NodeModelMetric;
+import net.sf.magicmap.client.interfaces.NodeModelListener;
+import net.sf.magicmap.client.model.location.INodePlacer;
+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 java.awt.*;
+import java.util.*;
+
/**
* Dieses Model benutzt die Layoutfunktionen von Jung und einige Angepasste
* Layoutalgorithmen um die Knotenposition zu berechnen.
@@ -46,7 +29,7 @@
* @author Jan
*
*/
-public class JungNodePlacer extends DirectedSparseGraph implements INodePlacer, NodeModelListener, NodeModelConstants {
+public class JungNodePlacer extends DirectedSparseGraph implements INodePlacer, NodeModelConstants {
/**
* Logger
@@ -111,17 +94,16 @@
* @param model
* das Knotenmodel.
*/
- public JungNodePlacer(INodeModel model) {
- this(model, JungNodePlacer.DEFAULT_SETTINGS, new MagicMetric());
+ public JungNodePlacer() {
+ this(JungNodePlacer.DEFAULT_SETTINGS, new MagicMetric());
}
/**
*
- * @param model
* @param settings
* @param metric
*/
- public JungNodePlacer(INodeModel model, LayoutSettings settings, NodeModelMetric metric) {
+ public JungNodePlacer(LayoutSettings settings, NodeModelMetric metric) {
super();
this.clientLocationMap = new HashMap<ClientNode, HashSet<LocationNode>>();
@@ -215,7 +197,7 @@
* @param data ---?
* @see NodeModelListener, INodeModel, NodeModel
*/
- public void nodeUpdatedEvent(Node node, int type, Object data){
+ public void updateNode(Node node, int type, Object data){
// first try if we have a handler for this event.
if (!this.nodeHandler.handleNodeUpdated(node, type, data, this)) if (type == NodeModelConstants.UPDATE_CLEAR) {
this.worker.suspend(); // stopGraph();
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/measurement/IMeasurementModel.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/measurement/IMeasurementModel.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/measurement/IMeasurementModel.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -10,11 +10,11 @@
*/
public interface IMeasurementModel {
- void addAccessPoint(AccessPointSeerNode client, SeenAccessPoint ap);
- public void updateAccessPoint(AccessPointSeerNode client, SeenAccessPoint ap);
- void removeAccessPoint(AccessPointSeerNode client, SeenAccessPoint ap);
- public void addMeasurementModelListener(MeasurementModelListener l);
- public void removeMeasurementModelListener(MeasurementModelListener l);
+ /**
+ *
+ * @param forNode the node seeing the accesspoints
+ * @return a collection of nodes seen by a given client.
+ */
public Collection<SeenAccessPoint> get(AccessPointSeerNode forNode);
/**
@@ -25,11 +25,22 @@
*/
void updateScanResult(AccessPointSeerNode client, String apMac, double signalLevel);
+
/**
+ * Batch update to avoid event overflow ;-)
+ * @param client
+ * @param apMac
+ * @param signalLevel
+ */
+ void updateScanResult(AccessPointSeerNode client, String[] apMac, double[] signalLevel);
+ /**
* Gets the SeenAccessPoint for a given seer.
* @param client the seer of the ap.
* @param mac th aps mac
* @return the SeenAccessPoint
*/
SeenAccessPoint getAccessPoint(AccessPointSeerNode client, String mac);
+
+ void addMeasurementModelListener(MeasurementModelListener listener);
+ void removeMeasurementModelListener(MeasurementModelListener listener);
}
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/measurement/MeasurementModel.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/measurement/MeasurementModel.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/measurement/MeasurementModel.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -1,16 +1,19 @@
package net.sf.magicmap.client.model.measurement;
import net.sf.magicmap.client.interfaces.MeasurementModelListener;
+import net.sf.magicmap.client.model.node.AccessPointNode;
import net.sf.magicmap.client.model.node.AccessPointSeerNode;
+import net.sf.magicmap.client.model.node.INodeModel;
import javax.swing.event.EventListenerList;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
* New Model for measurements. contains all measurement made.
- *
+ *
*/
public class MeasurementModel implements IMeasurementModel {
@@ -18,7 +21,7 @@
private final MeasurementMap apMap = new MeasurementMap();
public MeasurementModel(){
-
+
}
/**
@@ -32,19 +35,58 @@
if (apMap.put(client, ap)){
fireAccessPointAdded(client,ap);
}
+ client.getModel().updateNode(client, 1, null);
}
public void updateScanResult(AccessPointSeerNode client, String apMac, double signalLevel){
SeenAccessPoint accessPoint = getAccessPoint(client, apMac);
+ final INodeModel nodeModel = client.getModel();
if (accessPoint == null) {
accessPoint = new SeenAccessPoint(apMac, signalLevel);
addAccessPoint(client, accessPoint);
+ AccessPointNode apNode = nodeModel.findAccessPoint(apMac);
+ if (apNode == null){
+ nodeModel.addNode(new AccessPointNode(apMac, nodeModel));
+ apNode = nodeModel.findAccessPoint(apMac);
+ }
+ client.setSignalLevelForAcessPoint(apNode, signalLevel);
}else{
- accessPoint.addSignalLevel(signalLevel);
- updateAccessPoint(client, accessPoint);
+ if (signalLevel != 0){
+ accessPoint.addSignalLevel(signalLevel);
+ }else{
+ accessPoint.addDeadSignal();
+ }
+ if (accessPoint.isTotallyDead()){
+ client.notSeesAccessPoint(nodeModel.findAccessPoint(apMac));
+ }
+ else{
+ updateAccessPoint(client, accessPoint);
+ client.setSignalLevelForAcessPoint(nodeModel.findAccessPoint(apMac), signalLevel);
+ }
}
+ }
+ public void updateScanResult(AccessPointSeerNode client, String[] apMac, double[] signalLevel) {
+ ArrayList<AccessPointNode> seenAps = client.getSeenAccessPoints();
+ INodeModel nodeModel = client.getModel();
+ for (int i = 0; i < apMac.length; ++i){
+ AccessPointNode ap = nodeModel.findAccessPoint(apMac[i]);
+ if (ap != null){
+ seenAps.remove(ap);
+ updateScanResult(client, apMac[i], signalLevel[i]);
+ client.setSignalLevelForAcessPoint(ap, signalLevel[i]);
+ }
+ else{
+ ap = new AccessPointNode(apMac[i], nodeModel);
+ nodeModel.addNode(ap);
+ client.seesAccessPoint(ap, signalLevel[i]);
+ }
+ }
+ for (AccessPointNode ap: seenAps){
+ client.notSeesAccessPoint(ap);
+ }
}
+
/**
* Returns a list of seen access points for a given client.
* @param forNode
@@ -53,7 +95,7 @@
public Collection<SeenAccessPoint> get(AccessPointSeerNode forNode){
return apMap.get(forNode).values();
}
-
+
public void updateAccessPoint(AccessPointSeerNode client, SeenAccessPoint ap) {
fireAccessPointChanged(client, ap);
}
@@ -95,7 +137,7 @@
}
private static class MeasurementMap extends HashMap<AccessPointSeerNode, Map<String, SeenAccessPoint>>{
-
+
public boolean put(AccessPointSeerNode node, SeenAccessPoint ap){
if (containsKey(node)){
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/AccessPointNode.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/AccessPointNode.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/AccessPointNode.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -18,10 +18,14 @@
private boolean hiddenStatus;
public AccessPointNode(INodeModel model) {
+ this("", model);
+ }
+ public AccessPointNode(String mac, INodeModel model) {
super(model);
- }
+ this.macAddress = mac;
+ }
- private String macAddress;
+ private String macAddress;
public String getMacAddress(){
return this.macAddress;
@@ -36,12 +40,14 @@
return this.macAddress;
}
- // Ein AccessPoint hat von sich aus keine
- // verbindungen irgendwohin
+ /**
+ * Access points dont have neighbours..... not for now
+ *
+ * @return an empty List
+ */
@Override
- public ArrayList getNeighbors(){
- // TODO: implementieren
- return new ArrayList();
+ public ArrayList<Node> getNeighbors(){
+ return new ArrayList<Node>();
}
/*
@@ -51,7 +57,6 @@
*/
@Override
public int getType(){
- // TODO Auto-generated method stub
return NodeModelConstants.NODETYPE_ACCESSPOINT;
}
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/AccessPointSeerNode.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/AccessPointSeerNode.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/AccessPointSeerNode.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -4,122 +4,105 @@
package net.sf.magicmap.client.model.node;
-import java.util.ArrayList;
-import java.util.Iterator;
-
import net.sf.magicmap.client.measurement.Constants;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
/**
- * Ein Objekt was Access Points in einer Umgebung mit Signalst\xE4rken sehen kann.
- *
+ * Ein Objekt das Access Points in einer Umgebung mit Signalst\xE4rken sehen kann.
+ *
* @author thuebner
*/
public abstract class AccessPointSeerNode extends Node {
- /*
- * Alle Kanten zu AccessPoints (AccessPointEdge) mit entsprechenden
- * Informationen \xFCber die Signalst\xE4rke
- *
- */
- private ArrayList<AccessPointEdge> apEdges;
+ /*
+ * Alle Kanten zu AccessPoints (AccessPointEdge) mit entsprechenden
+ * Informationen \xFCber die Signalst\xE4rke
+ *
+ */
+ private final Map<String, AccessPointEdge> apEdges = new HashMap<String, AccessPointEdge>();
- public AccessPointSeerNode(INodeModel model) {
- super(model);
- this.apEdges = new ArrayList<AccessPointEdge>();
- }
+ public AccessPointSeerNode(INodeModel model) {
+ super(model);
+ }
- public ArrayList<AccessPointEdge> getApEdges(){
- return this.apEdges;
- }
+ public ArrayList<AccessPointEdge> getApEdges(){
+ return new ArrayList<AccessPointEdge>(this.apEdges.values());
+ }
- public ArrayList<AccessPointNode> getSeenAccessPoints(){
- ArrayList<AccessPointNode> result = new ArrayList<AccessPointNode>();
+ public ArrayList<AccessPointNode> getSeenAccessPoints(){
+ ArrayList<AccessPointNode> result = new ArrayList<AccessPointNode>();
- // Alle AccessPoints, die gesehen werden
- Iterator it = this.apEdges.iterator();
- while (it.hasNext()) {
- AccessPointEdge ae = (AccessPointEdge) it.next();
- result.add(ae.getAccessPoint());
- }
- return result;
- }
+ for (AccessPointEdge apEdge : this.apEdges.values()) {
+ result.add(apEdge.getAccessPoint());
+ }
+ return result;
+ }
- /**
- * Liefert Signalst\xE4rke eines AccessPoints zur\xFCck, die vom
- * AccessPointer-Seher gemessen wurde oder
- * net.sf.magicmap.client.measurement.Constants.MIN_SIGNALLEVEL wenn
- * AccessPoint nicht gesehen wird.
- *
- * @param ap
- * @return
- */
- public double getSignalLevelForAccessPoint(AccessPointNode ap){
- Iterator it = this.apEdges.iterator();
- while (it.hasNext()) {
- AccessPointEdge ae = (AccessPointEdge) it.next();
- if (ae.getAccessPoint() == ap) return ae.getSignalLevel();
- }
- return -Constants.MIN_SIGNALLEVEL;
- }
+ /**
+ * Liefert Signalst\xE4rke eines AccessPoints zur\xFCck, die vom
+ * AccessPointer-Seher gemessen wurde oder
+ * net.sf.magicmap.client.measurement.Constants.MIN_SIGNALLEVEL wenn
+ * AccessPoint nicht gesehen wird.
+ *
+ * @param ap
+ * @return
+ */
+ public double getSignalLevelForAccessPoint(AccessPointNode ap){
+ if (apEdges.containsKey(ap.getMacAddress()))
+ return apEdges.get(ap.getMacAddress()).getSignalLevel();
+ return -Constants.MIN_SIGNALLEVEL;
+ }
- /**
- * Setzt / Aktualisiert die Signalst\xE4rke zu einem Access Point
- *
- * @param ap
- * @param level
- */
- public void setSignalLevelForAcessPoint(AccessPointNode ap, double level){
- Iterator it = this.apEdges.iterator();
- while (it.hasNext()) {
- AccessPointEdge ae = (AccessPointEdge) it.next();
- if (ae.getAccessPoint() == ap) {
- ae.setSignalLevel(level);
- // Wichtig!
- this.getModel().fireSeesAccessPoint(this, ap);
- return;
- }
- }
- // Gibt es noch nicht
- AccessPointEdge ae = new AccessPointEdge();
- ae.setAccessPoint(ap);
- ae.setSignalLevel(level);
- this.apEdges.add(ae);
- this.getModel().fireSeesAccessPoint(this, ap);
- }
+ /**
+ * Setzt / Aktualisiert die Signalst\xE4rke zu einem Access Point
+ *
+ * @param ap the access point
+ * @param level the signal strength of the ap
+ */
+ public void setSignalLevelForAcessPoint(AccessPointNode ap, double level){
+ if (!apEdges.containsKey(ap.getMacAddress())){
+ seesAccessPoint(ap, level);
+ }
+ else{
+ AccessPointEdge ae = apEdges.get(ap.getMacAddress());
+ ae.setSignalLevel(level);
+ this.getModel().updateNode(this, NodeModelConstants.UPDATE_SEESACCESSPOINT, ap);
+ }
- public void seesAccessPoint(AccessPointNode ap, double signalStrength){
- if (!getSeenAccessPoints().contains(ap) && !ap.isHidden()) {
- AccessPointEdge ae = new AccessPointEdge();
- ae.setAccessPoint(ap);
- ae.setSignalLevel(signalStrength);
- this.apEdges.add(ae);
- getModel().fireSeesAccessPoint(this, ap);
- }
- }
+ }
- public void notSeesAccessPoint(AccessPointNode ap){
- Iterator it = this.apEdges.iterator();
- while (it.hasNext()) {
- AccessPointEdge ae = (AccessPointEdge) it.next();
- if (ae.getAccessPoint() == ap) {
- it.remove();
- break;
- }
- }
- getModel().fireNotSeesAccessPoint(this, ap);
- }
+ public void seesAccessPoint(AccessPointNode ap, double signalStrength){
+ if (!getSeenAccessPoints().contains(ap) && !ap.isHidden()) {
+ AccessPointEdge ae = new AccessPointEdge();
+ ae.setAccessPoint(ap);
+ ae.setSignalLevel(signalStrength);
+ this.apEdges.put(ap.getMacAddress(), ae);
+ getModel().updateNode(this, NodeModelConstants.UPDATE_SEESACCESSPOINT, ap);
+ }
+ }
- /**
- * Liefert alle Knoten zur\xFCck, zu denen eine gerichtete Kante gezeichnet
- * werden mu\xDF. Dies sind bei einen AccessPoint-Seher nur die AccessPoints
- * selbst.
- */
- @Override
- public ArrayList getNeighbors(){
- return getSeenAccessPoints();
- }
+ public void notSeesAccessPoint(AccessPointNode ap){
- public void clearAllEdges(){
- this.apEdges.clear();
- }
+ if (apEdges.containsKey(ap.getMacAddress())){
+ apEdges.remove(ap.getMacAddress());
+ getModel().updateNode(this, NodeModelConstants.UPDATE_NOTSEESACCESSPOINT, ap);
+ }
+ }
+
+ /**
+ * Liefert alle Knoten zur\xFCck, zu denen eine gerichtete Kante gezeichnet
+ * werden mu\xDF. Dies sind bei einen AccessPoint-Seher nur die AccessPoints
+ * selbst.
+ */
+ @Override
+ public ArrayList getNeighbors(){
+ return getSeenAccessPoints();
+ }
+
+ public void clearAllEdges(){
+ this.apEdges.clear();
+ }
}
\ No newline at end of file
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/ClientNode.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/ClientNode.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/ClientNode.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -9,7 +9,6 @@
/**
* Ein Client sieht Access Points und ist dabei in der Regel
* frei beweglich.
- * @see net.sf.magicmap.client.models#AccessPointSeerNode
* @author thuebner
*/
public class ClientNode extends AccessPointSeerNode {
@@ -44,7 +43,6 @@
*/
@Override
public int getType(){
- // TODO Auto-generated method stub
return NodeModelConstants.NODETYPE_CLIENT;
}
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/INodeModel.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/INodeModel.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/INodeModel.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -1,11 +1,12 @@
package net.sf.magicmap.client.model.node;
+import net.sf.magicmap.client.interfaces.NodeModelListener;
+import net.sf.magicmap.client.model.location.INodePlacer;
+
import java.util.ArrayList;
import java.util.Collection;
-import net.sf.magicmap.client.interfaces.NodeModelListener;
-
/**
* Das NodeModel enth\xE4lt eine Menge von Knoten. Die Bestimmung der Position
* wird von einem anderen Objekt \xFCbernommen. Die Standart Positionsbestimmung
@@ -16,139 +17,157 @@
*/
public interface INodeModel extends NodeModelConstants {
- /**
- * Add a new node
- * @param node
- */
- public abstract void addNode(Node node);
+ /**
+ * Add a new node to the model.
+ *
+ * @param node the node to add
+ */
+ public abstract void addNode(Node node);
- /**
- * Remove a node
- * @param node
- */
- public abstract void removeNode(Node node);
+ /**
+ * Remove a node
+ * @param node removes a node from the model
+ */
+ public abstract void removeNode(Node node);
- /**
- *
- * @param node
- * @param ap
- */
- public abstract void fireSeesAccessPoint(Node node, AccessPointNode ap);
+ /**
+ * Notifies all listeners that the state of a given node
+ * has changed.
+ * Invoke this method after you've changed a node
+ *
+ * @param node the changed node
+ * @param type th type of change
+ * @param data new data, may be null.
+ * @see NodeModelListener
+ */
+ public abstract void updateNode(Node node, int type, Object data);
- /**
- *
- * @param node
- * @param ap
- */
- public abstract void fireNotSeesAccessPoint(Node node, AccessPointNode ap);
+ /**
+ * Aktualisiert den Hash-Schl\xFCssel f\xFCr einen Knoten.
+ * Unter Node.name wird der neue Hashwert erwartet.
+ *
+ * @param node Knoten der aktualisiert werden soll
+ * @param name Alter Hash-Wert
+ */
+ public abstract void rehashNode(Node node, String name);
- /**
- * Notifiziert alle Listener das sich der Zustand eines Knoten ver\xE4ndert hat.
- * TODO: should be private and only in the implementation!
- * @param node der zu \xE4ndernde Knoten
- * @param type der Typ des Knotens.
- * @param data die neuen Daten.
- * @see NodeModelListener
- */
- public abstract void updateNode(Node node, int type, Object data);
+ /**
+ * returns all neighbours for the given node.
+ *
+ * @param node the node
+ * @return all neighbours of the given node.
+ */
+ public abstract ArrayList<? extends Node> findNeighbors(Node node);
- /**
- * Aktualisiert den Hash-Schl\xFCssel f\xFCr einen Knoten.
- * Unter Node.name wird der neue Hashwert erwartet.
- *
- * @param node Knoten der aktualisiert werden soll
- * @param name Alter Hash-Wert
- */
- public abstract void rehashNode(Node node, String name);
+ /**
+ * what for?
+ * @param node
+ * @return
+ */
+ @Deprecated
+ public abstract ArrayList<? extends Node> findNonNeighbors(Node node);
- /**
- *
- * @param node
- * @return
- */
- public abstract ArrayList findNeighbors(Node node);
+ /**
+ * Adds a NodeModelListener
+ * @param nodeModelListener the list\xE9ner to add.
+ */
+ public abstract void addNodeModelListener(NodeModelListener nodeModelListener);
- /**
- *
- * @param node
- * @return
- */
- public abstract ArrayList findNonNeighbors(Node node);
+ /**
+ * remove a NodeModelListener
+ * @param l the listener to remove
+ */
+ public abstract void removeNodeModelListener(NodeModelListener l);
- /**
- *
- * @param nodeModelListener
- */
- public abstract void addNodeModelListener(NodeModelListener nodeModelListener);
+ /**
+ * returns an array of all NodeModelListener.
+ * @return an array of all NodeModelListener registered to this model.
+ */
+ public abstract NodeModelListener[] nodeModelListeners();
- /**
- *
- * @param l
- */
- public abstract void removeNodeModelListener(NodeModelListener l);
+ /**
+ *
+ * @param accesspoints
+ * @return
+ */
+ public abstract ArrayList<LocationNode> getLocationsWithAtLeastOneAccessPoint(
+ ArrayList<AccessPointNode> accesspoints);
- /**
- *
- * @return
- */
- public abstract NodeModelListener[] nodeModelListeners();
+ /**
+ * Gibt alle Orte/Referenzpunkte zur?ck, die mindestens einen
+ * AccessPoint mit der ?bergebenen gemeinsam haben.
+ * @param accesspoints
+ * @param exclude
+ * @return
+ */
+ public abstract ArrayList<LocationNode> getLocationsWithAtLeastOneAccessPoint(
+ ArrayList<AccessPointNode> accesspoints, Node exclude);
- public abstract ArrayList<LocationNode> getLocationsWithAtLeastOneAccessPoint(
- ArrayList<AccessPointNode> accesspoints);
+ /**
+ *
+ * @param name
+ * @return
+ */
+ public abstract Node findNode(String name);
- /**
- * Gibt alle Orte/Referenzpunkte zur?ck, die mindestens einen
- * AccessPoint mit der ?bergebenen gemeinsam haben.
- * @param accesspoints
- * @param exclude
- * @return
- */
- public abstract ArrayList<LocationNode> getLocationsWithAtLeastOneAccessPoint(
- ArrayList<AccessPointNode> accesspoints, Node exclude);
+ /**
+ *
+ * @param name
+ * @return
+ */
+ public abstract boolean nodeExists(String name);
- /**
- *
- * @param name
- * @return
- */
- public abstract Node findNode(String name);
+ /**
+ *
+ * @param mac
+ * @return
+ */
+ public abstract AccessPointNode findAccessPoint(String mac);
- /**
- *
- * @param name
- * @return
- */
- public abstract boolean nodeExists(String name);
+ /**
+ * Abfrage ob ein Accesspoint mit einer mac existiert.
+ * @param mac the mac address of the access point
+ * @return true if the model contains an ap with the given mac.
+ */
+ public abstract boolean accessPointExists(String mac);
- public abstract AccessPointNode findAccessPoint(String mac);
+ /**
+ * Liefert alle Knoten des Models.
+ * @return alle Knoten des Models.
+ */
+ public abstract Collection<Node> getNodes();
- /**
- * Abfrage ob ein Accesspoint mit einer mac existiert.
- * @param mac
- * @return
- */
- public abstract boolean accessPointExists(String mac);
+ /**
+ * Entfernt alles aus dem Model
+ *
+ */
+ public abstract void clear();
- /**
- * Liefert alle Knoten des Models.
- * @return alle Knoten des Models.
- */
- public abstract Collection getNodes();
+ /**
+ *
+ * @param l
+ */
+ @Deprecated
+ public abstract void addNodeModelSelectionListener(NodeModelSelectionListener l);
- /**
- * Entfernt alles aus dem Model
- *
- */
- public abstract void clear();
+ /**
+ *
+ * @param l
+ */
+ @Deprecated
+ public abstract void removeNodeModelSelectionListener(NodeModelSelectionListener l);
- public abstract void addNodeModelSelectionListener(NodeModelSelectionListener l);
+ /**
+ *
+ * @param selectedNode
+ * @return
+ */
+ @Deprecated
+ public Node selectNode(Node selectedNode);
- public abstract void removeNodeModelSelectionListener(NodeModelSelectionListener l);
+ void setNodePlacer(INodePlacer placer);
+ INodePlacer getNodePlacer();
- /**
- *
- * @param selectedNode
- * @return
- */
- public Node selectNode(Node selectedNode);
+ void setCurrentMap(MapNode map);
+ MapNode getCurrentMap();
}
\ No newline at end of file
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/LocationNode.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/LocationNode.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/LocationNode.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -20,12 +20,9 @@
/**
* Liefert AccessPoints mit denen dieser Referenzpunkt
* verbunden werden soll.
+ * @return something
*/
- /*public ArrayList getNeighbors() {
- return super.getNeighbors();
- }*/
-
- public ArrayList getLocations(){
+ public ArrayList getLocations(){
ArrayList locations = getModel().getLocationsWithAtLeastOneAccessPoint(super.getNeighbors(), this);
return locations;
}
@@ -43,12 +40,12 @@
return result;
}
- /* (non-Javadoc)
- * @see net.sf.magicmap.client.model.Node#getType()
+ /**
+ * the nodes type
+ * @return NodeModelConstants.NODETYPE_LOCATION
*/
@Override
public int getType(){
- // TODO Auto-generated method stub
return NodeModelConstants.NODETYPE_LOCATION;
}
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/Node.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/Node.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/Node.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -154,7 +154,7 @@
model.updateNode(this, NodeModel.UPDATE_POSITION, null);
}
- public abstract ArrayList getNeighbors();
+ public abstract ArrayList<? extends Node> getNeighbors();
public INodeModel getModel(){
return model;
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModel.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModel.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModel.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -1,22 +1,14 @@
package net.sf.magicmap.client.model.node;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
+import net.sf.magicmap.client.interfaces.NodeModelListener;
+import net.sf.magicmap.client.model.location.INodePlacer;
+import net.sf.magicmap.client.model.location.jung.JungNodePlacer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.*;
-import net.sf.magicmap.client.interfaces.NodeModelListener;
-
/**
* Model zur Beschreibung des aktuellen Zustands in der
* Welt der Clients und AccessPoints. Es k\xF6nnen Anfragen
@@ -42,17 +34,19 @@
private Node selectedNode = Node.EMPTY_NODE;
private final Log log = LogFactory.getLog(NodeModel.class);
+ private INodePlacer placer;
+ private MapNode currentMap;
+
/**
* Erzeugt neues leeres Model
*
*/
public NodeModel() {
- // Collections.synchronizedMap(new HashMap<String, Double>());
-
this.nodes = Collections.synchronizedMap(new HashMap<String, Node>());
this.accesspoints = Collections.synchronizedMap(new HashMap<String, AccessPointNode>());
this.listeners = Collections.synchronizedList(new ArrayList<NodeModelListener>());
this.selectListeners = Collections.synchronizedList(new ArrayList<NodeModelSelectionListener>());
+ setNodePlacer(new JungNodePlacer());
}
/**
@@ -62,6 +56,7 @@
*/
public void addNode(Node node){
if (this.nodes.containsKey(node.getName())) return;
+ this.placer.insertNode(node);
log.info("Adding Node: " + node.getName());
this.nodes.put(node.getName(), node);
// special handling for APs
@@ -72,6 +67,7 @@
NodeModelListener l = (NodeModelListener) listener;
l.nodeAddedEvent(node);
}
+
}
/**
@@ -79,7 +75,9 @@
* @param node
*/
public void removeNode(Node node){
+ if (!this.nodes.containsKey(node.getName())) return;
this.nodes.remove(node.getName());
+ this.placer.deleteNode(node);
if (node.getType() == NodeModelConstants.NODETYPE_ACCESSPOINT) // Wenn AccessPoint, dann nach MAC-Adresse extra hashen
this.accesspoints.remove(((AccessPointNode) node).getMacAddress());
@@ -89,14 +87,6 @@
}
}
- public void fireSeesAccessPoint(Node node, AccessPointNode ap){
- updateNode(node, NodeModelConstants.UPDATE_SEESACCESSPOINT, ap);
- }
-
- public void fireNotSeesAccessPoint(Node node, AccessPointNode ap){
- updateNode(node, NodeModelConstants.UPDATE_NOTSEESACCESSPOINT, ap);
- }
-
/**
* Notofiziert alle Listener das sich ein Knoten ge\xE4ndert hat.
*
@@ -105,7 +95,7 @@
* @param data Daten, z.B. ein AccessPoint
*/
public void updateNode(Node node, int type, Object data){
-
+ this.placer.updateNode(node, type, data);
for (NodeModelListener listener : this.listeners) {
NodeModelListener l = (NodeModelListener) listener;
l.nodeUpdatedEvent(node, type, data);
@@ -141,7 +131,7 @@
public void addNodeModelListener(NodeModelListener nodeModelListener){
if (!this.listeners.contains(nodeModelListener)) {
this.listeners.add(nodeModelListener);
-
+ //TODO BUG ODER?!
for (Node node1 : this.nodes.values()) {
Node node = (Node) node1;
nodeModelListener.nodeAddedEvent(node);
@@ -195,8 +185,7 @@
* @return a node or null if node with given name exists
*/
public Node findNode(String name){
- Node node = this.nodes.get(name);
- return node;
+ return this.nodes.get(name);
}
/**
@@ -214,8 +203,7 @@
* @return an ap or null
*/
public AccessPointNode findAccessPoint(String mac){
- AccessPointNode node = (AccessPointNode) this.accesspoints.get(mac);
- return node;
+ return this.accesspoints.get(mac);
}
public boolean accessPointExists(String mac){
@@ -223,9 +211,9 @@
}
/**
- * @return
+ * @return a copied list of all nodes in this model.
*/
- public Collection getNodes(){
+ public Collection<Node> getNodes(){
return Collections.unmodifiableCollection(this.nodes.values());
}
@@ -243,22 +231,41 @@
public void addNodeModelSelectionListener(NodeModelSelectionListener l){
this.selectListeners.add(l);
-
}
public void removeNodeModelSelectionListener(NodeModelSelectionListener l){
this.selectListeners.remove(l);
}
+ /**
+ *
+ * @param newSelectedNode
+ * @return
+ */
public Node selectNode(Node newSelectedNode){
if (null == newSelectedNode) throw new IllegalArgumentException("node must not be null");
-
NodeModelSelectionEvent e = new NodeModelSelectionEvent(this, newSelectedNode, this.selectedNode);
this.selectedNode = newSelectedNode;
updateSelection(e);
return this.selectedNode;
}
+ public void setNodePlacer(INodePlacer placer) {
+ this.placer = placer;
+ }
+
+ public INodePlacer getNodePlacer() {
+ return placer;
+ }
+
+ public void setCurrentMap(MapNode map) {
+ this.currentMap = map;
+ }
+
+ public MapNode getCurrentMap() {
+ return currentMap;
+ }
+
/**
*
* @param e
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModelSelectionEvent.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModelSelectionEvent.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModelSelectionEvent.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -22,22 +22,29 @@
/**
*
- * @param source
+ * @param source the source of the event.
* @param selectedNode the new selected node.
- * @param oldSelectedNode
+ * @param oldSelectedNode the node that was selected before the selection changed.
*/
public NodeModelSelectionEvent(Object source, Node selectedNode, Node oldSelectedNode) {
super(source);
- // TODO Auto-generated constructor stub
this.selectedNode = selectedNode;
this.oldSelectedNode = oldSelectedNode;
}
- public Node getSelectedNode(){
+ /**
+ * Get the new selected node
+ * @return
+ */
+ public Node getSelectedNode(){
return this.selectedNode;
}
- public Node getOldSelectedNode(){
+ /**
+ * Get the node that was selected before.
+ * @return
+ */
+ public Node getOldSelectedNode(){
return this.oldSelectedNode;
}
}
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModelSelectionListener.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModelSelectionListener.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeModelSelectionListener.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -8,5 +8,9 @@
*/
public interface NodeModelSelectionListener {
- public void selectionChanged(NodeModelSelectionEvent selectEvent);
+ /**
+ * Called when the selection changed.
+ * @param selectEvent
+ */
+ public void selectionChanged (NodeModelSelectionEvent selectEvent);
}
Modified: trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeSelectionModel.java
===================================================================
--- trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeSelectionModel.java 2007-01-16 14:06:27 UTC (rev 512)
+++ trunk/magicmapclient/src/net/sf/magicmap/client/model/node/NodeSelectionModel.java 2007-01-21 12:01:13 UTC (rev 513)
@@ -9,11 +9,16 @@
private final EventListenerList listeners;
private Node selectedNode;
+ private MapNode currentNode;
+ /**
+ *
+ */
public NodeSelectionModel(){
listeners = new EventListenerList();
selectedNode = Node.EMPTY_NODE;
}
+
public void addNodeModelSelectionListener(INodeModelSelectionListener l){
listeners.add(INodeModelSelectionListener.class, l);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|