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. |