Commit 2fa7daee authored by Björn Richerzhagen's avatar Björn Richerzhagen
Browse files

Refactored Visualization of Underlay-Links

- re-enabled neighbors on hover & click
- preparations for scaled visualizations
parent 20020ed4
...@@ -123,7 +123,9 @@ public class RangedTopologyView extends AbstractTopologyView<RangedLink> { ...@@ -123,7 +123,9 @@ public class RangedTopologyView extends AbstractTopologyView<RangedLink> {
determineLinkBandwidth(source, destination), determineLinkBandwidth(source, destination),
determineLinkLatency(source, destination), getPhyType() determineLinkLatency(source, destination), getPhyType()
.getDefaultMTU(), getRange()); .getDefaultMTU(), getRange());
linkList.add(link); synchronized (linkList) {
linkList.add(link);
}
return link; return link;
} }
......
...@@ -77,6 +77,7 @@ import de.tud.kom.p2psim.impl.topology.views.visualization.world.StrongWaypointC ...@@ -77,6 +77,7 @@ import de.tud.kom.p2psim.impl.topology.views.visualization.world.StrongWaypointC
import de.tud.kom.p2psim.impl.topology.views.visualization.world.TopologyComponentVis; import de.tud.kom.p2psim.impl.topology.views.visualization.world.TopologyComponentVis;
import de.tud.kom.p2psim.impl.topology.views.visualization.world.WeakWaypointComponentVis; import de.tud.kom.p2psim.impl.topology.views.visualization.world.WeakWaypointComponentVis;
import de.tud.kom.p2psim.impl.util.NotSupportedException; import de.tud.kom.p2psim.impl.util.NotSupportedException;
import de.tudarmstadt.maki.simonstrator.api.common.graph.INodeID;
import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor; import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
/** /**
...@@ -101,7 +102,7 @@ public class VisualizationTopologyView extends JFrame implements TopologyView, ...@@ -101,7 +102,7 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
public static double SCALE; public static double SCALE;
protected HashMap<Long, TopologyComponentVis> compVisPerHost = new HashMap<Long, TopologyComponentVis>(); protected HashMap<INodeID, TopologyComponentVis> compVisPerHost = new HashMap<INodeID, TopologyComponentVis>();
protected final WorldPanel worldPanel; protected final WorldPanel worldPanel;
...@@ -213,9 +214,9 @@ public class VisualizationTopologyView extends JFrame implements TopologyView, ...@@ -213,9 +214,9 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
@Override @Override
public void addedComponent(TopologyComponent comp) { public void addedComponent(TopologyComponent comp) {
if (!compVisPerHost.containsKey(comp.getHost().getHostId())) { if (!compVisPerHost.containsKey(comp.getHost().getId())) {
TopologyComponentVis tVis = new TopologyComponentVis(this, comp); TopologyComponentVis tVis = new TopologyComponentVis(this, comp);
compVisPerHost.put(comp.getHost().getHostId(), tVis); compVisPerHost.put(comp.getHost().getId(), tVis);
// this.visManager.addComponent("Topology", 0, new // this.visManager.addComponent("Topology", 0, new
// TopologyComponentVis(this, comp)); // TopologyComponentVis(this, comp));
worldPanel.add(new TopologyComponentVis(this, comp)); worldPanel.add(new TopologyComponentVis(this, comp));
...@@ -338,6 +339,7 @@ public class VisualizationTopologyView extends JFrame implements TopologyView, ...@@ -338,6 +339,7 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
g2.setColor(Color.WHITE); g2.setColor(Color.WHITE);
g2.fillRect(0, 0, (int) (WORLD_X / SCALE), (int) (WORLD_Y / SCALE)); g2.fillRect(0, 0, (int) (WORLD_X / SCALE), (int) (WORLD_Y / SCALE));
g2.setPaint(Color.BLACK); g2.setPaint(Color.BLACK);
g2.drawLine(10, 10, (int) (10 + 50 / SCALE), 10);
} }
} }
...@@ -397,8 +399,6 @@ public class VisualizationTopologyView extends JFrame implements TopologyView, ...@@ -397,8 +399,6 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
public static int WORLD_Y = 0; public static int WORLD_Y = 0;
private static double mapScale = 1;
protected static Map<String, PlottingView> plottingViews = Maps protected static Map<String, PlottingView> plottingViews = Maps
.newHashMap(); .newHashMap();
...@@ -452,6 +452,19 @@ public class VisualizationTopologyView extends JFrame implements TopologyView, ...@@ -452,6 +452,19 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
return view; return view;
} }
/**
* Returns the {@link TopologyComponentVis} corresponding to the
* provided host ID
*
* @param nodeID
* id of the host.
* @return
*/
public static TopologyComponentVis getTopologyComponentVis(
INodeID nodeID) {
return view.compVisPerHost.get(nodeID);
}
private static void setupAWTEventListener() { private static void setupAWTEventListener() {
Toolkit tk = Toolkit.getDefaultToolkit(); Toolkit tk = Toolkit.getDefaultToolkit();
...@@ -560,21 +573,6 @@ public class VisualizationTopologyView extends JFrame implements TopologyView, ...@@ -560,21 +573,6 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
return WORLD_Y; return WORLD_Y;
} }
public static double getVisualScaleFactor() {
return SCALE;
}
/**
* Do not apply the scale factor to values that are cached for later
* use. If used in a constructor this factor can be wrong, as it might
* not have been initialized yet.
*
* @return
*/
public static double getMapScale() {
return mapScale;
}
public static void injectComponent(String name, int priority, public static void injectComponent(String name, int priority,
JComponent component) { JComponent component) {
injectComponent(name, priority, component, true); injectComponent(name, priority, component, true);
......
...@@ -20,14 +20,19 @@ ...@@ -20,14 +20,19 @@
package de.tud.kom.p2psim.impl.topology.views.visualization.world; package de.tud.kom.p2psim.impl.topology.views.visualization.world;
import java.awt.Color;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JComponent; import javax.swing.JComponent;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView; import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
import de.tud.kom.p2psim.impl.topology.views.visualization.ui.VisHelper;
import de.tudarmstadt.maki.simonstrator.api.common.graph.IEdge;
import de.tudarmstadt.maki.simonstrator.api.component.network.NetworkComponent.NetInterfaceName;
import de.tudarmstadt.maki.simonstrator.api.component.topology.TopologyID;
/** /**
* Visualization of a Link * Visualization of a Link
...@@ -41,20 +46,23 @@ public class LinkComponentVis extends JComponent { ...@@ -41,20 +46,23 @@ public class LinkComponentVis extends JComponent {
* *
*/ */
private final VisualizationTopologyView visualizationTopologyView; private final VisualizationTopologyView visualizationTopologyView;
private Link link;
private TopologyComponentVis src; private TopologyComponentVis src;
private TopologyComponentVis dst; public LinkComponentVis(VisualizationTopologyView visualizationTopologyView,
TopologyComponentVis src) {
public LinkComponentVis(VisualizationTopologyView visualizationTopologyView, Link link, TopologyComponentVis src, TopologyComponentVis dst) {
this.visualizationTopologyView = visualizationTopologyView; this.visualizationTopologyView = visualizationTopologyView;
this.link = link;
this.src = src; this.src = src;
this.dst = dst; setBounds(0, 0,
setBounds(0, 0, (int)(this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int)(this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale())); (int) (this.visualizationTopologyView.getWorldDimensions()
setBounds(0, 0, (int) (this.visualizationTopologyView.getWorldDimensions().getX() / this.visualizationTopologyView.getScale()), (int) (this.visualizationTopologyView.getWorldDimensions().getY() / this.visualizationTopologyView.getScale())); .getX() / this.visualizationTopologyView.getScale()),
(int) (this.visualizationTopologyView.getWorldDimensions()
.getY() / this.visualizationTopologyView.getScale()));
setBounds(0, 0,
(int) (this.visualizationTopologyView.getWorldDimensions()
.getX() / this.visualizationTopologyView.getScale()),
(int) (this.visualizationTopologyView.getWorldDimensions()
.getY() / this.visualizationTopologyView.getScale()));
setOpaque(false); setOpaque(false);
} }
...@@ -63,19 +71,16 @@ public class LinkComponentVis extends JComponent { ...@@ -63,19 +71,16 @@ public class LinkComponentVis extends JComponent {
super.paintComponent(g); super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g; Graphics2D g2 = (Graphics2D) g;
if (link.isConnected()) { TopologyID tId = src.getTopologyComp().getTopologyID(NetInterfaceName.WIFI, true);
Set<IEdge> neighbors = new HashSet<IEdge>(src.getTopologyComp().getNeighbors(tId));
for (IEdge mAddr : neighbors) {
TopologyComponentVis dst = VisualizationInjector
.getTopologyComponentVis(mAddr.toId());
double scale = this.visualizationTopologyView.getScale(); double scale = this.visualizationTopologyView.getScale();
VisHelper.drawArrow(g2, src.getPosition().getX() / scale,
g2.setColor(Color.BLUE); src.getPosition().getY() / scale,
g2.drawLine((int) (src.getPosition().getX() / scale), (int) (src dst.getPosition().getX() / scale,
.getPosition().getY() / scale), (int) (dst.getPosition() dst.getPosition().getY() / scale, 2);
.getX() / scale), (int) (dst.getPosition().getY() / scale));
g2.drawLine((int) (src.getPosition().getX() / scale),
(int) (src.getPosition().getY() / scale), (int) (dst
.getPosition().getX() / scale), (int) (dst
.getPosition().getY() / scale));
} else {
//
} }
} }
......
...@@ -27,8 +27,6 @@ import java.awt.Point; ...@@ -27,8 +27,6 @@ import java.awt.Point;
import java.awt.RenderingHints; import java.awt.RenderingHints;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.List;
import java.util.Vector;
import javax.swing.JComponent; import javax.swing.JComponent;
...@@ -64,7 +62,7 @@ public class TopologyComponentVis extends JComponent { ...@@ -64,7 +62,7 @@ public class TopologyComponentVis extends JComponent {
protected final long hostid; protected final long hostid;
private List<LinkComponentVis> myLinks = new Vector<LinkComponentVis>(); private LinkComponentVis lcVis = null;
protected boolean active = false; protected boolean active = false;
...@@ -117,10 +115,21 @@ public class TopologyComponentVis extends JComponent { ...@@ -117,10 +115,21 @@ public class TopologyComponentVis extends JComponent {
}); });
} }
/**
* Access to the visualized {@link TopologyComponent}
*
* @return
*/
public TopologyComponent getTopologyComp() {
return tComp;
}
protected void paintComponent(Graphics g) { protected void paintComponent(Graphics g) {
super.paintComponent(g); super.paintComponent(g);
setLocation((int) ((posVec.getX() - COMPONENT_PADDING) / this.visualizationTopologyView.getScale()), setLocation((int) ((posVec.getX() / this.visualizationTopologyView.getScale() - COMPONENT_PADDING)),
(int) ((posVec.getY() - COMPONENT_PADDING) / this.visualizationTopologyView.getScale())); (int) ((posVec.getY()
/ this.visualizationTopologyView.getScale()
- COMPONENT_PADDING)));
Graphics2D g2 = (Graphics2D) g; Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON); RenderingHints.VALUE_ANTIALIAS_ON);
...@@ -149,34 +158,15 @@ public class TopologyComponentVis extends JComponent { ...@@ -149,34 +158,15 @@ public class TopologyComponentVis extends JComponent {
} }
protected void toggleActive() { protected void toggleActive() {
return;
/*
active = !active; active = !active;
if (active) { if (active) {
lcVis = new LinkComponentVis(this.visualizationTopologyView,
TopologyView tView = tComp.getTopology().getTopologyView(this.visualizationTopologyView.PHY); TopologyComponentVis.this);
if (tView == null) { VisualizationInjector.getWorldPanel().add(lcVis);
active = !active; } else if (lcVis != null) {
return; VisualizationInjector.getWorldPanel().remove(lcVis);
}
Simulator.getScheduler().pause();
List<MacAddress> neighbors = tView.getNeighbors(mac
.getMacAddress());
for (MacAddress mAddr : neighbors) {
Link l = tView.getLinkBetween(mac.getMacAddress(), mAddr);
LinkComponentVis lVis = new LinkComponentVis(this.visualizationTopologyView, l, this,
this.visualizationTopologyView.getComponentVis(mAddr));
myLinks.add(lVis);
VisualizationInjector.getWorldPanel().add(lVis);
}
Simulator.getScheduler().unpause();
} else {
for (LinkComponentVis lVis : myLinks) {
VisualizationInjector.getWorldPanel().remove(lVis);
}
} }
VisualizationInjector.getWorldPanel().invalidate(); VisualizationInjector.getWorldPanel().invalidate();
*/
} }
protected PositionVector getPosition() { protected PositionVector getPosition() {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment