disallowed starting plugins/visualizer skins for non-compatible motes/simulations
This commit is contained in:
parent
e18cc3b6b9
commit
24aafe5554
8 changed files with 95 additions and 51 deletions
|
@ -65,6 +65,7 @@ import se.sics.cooja.GUI;
|
|||
import se.sics.cooja.Mote;
|
||||
import se.sics.cooja.PluginType;
|
||||
import se.sics.cooja.Simulation;
|
||||
import se.sics.cooja.SupportedArguments;
|
||||
import se.sics.cooja.VisPlugin;
|
||||
import se.sics.cooja.interfaces.Radio;
|
||||
import se.sics.cooja.radiomediums.AbstractRadioMedium;
|
||||
|
@ -74,14 +75,15 @@ import se.sics.cooja.radiomediums.DirectedGraphMedium.Edge;
|
|||
import se.sics.cooja.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Simple user interface for configuring edges for the Directed Graph
|
||||
* Simple user interface for configuring edges for the Directed Graph
|
||||
* Radio Medium (DGRM).
|
||||
*
|
||||
*
|
||||
* @see DirectedGraphMedium
|
||||
* @author Fredrik Osterlind
|
||||
*/
|
||||
@ClassDescription("DGRM Links")
|
||||
@PluginType(PluginType.SIM_PLUGIN)
|
||||
@SupportedArguments(radioMediums = {DirectedGraphMedium.class})
|
||||
public class DGRMConfigurator extends VisPlugin {
|
||||
private static final long serialVersionUID = 4769638341635882051L;
|
||||
private static Logger logger = Logger.getLogger(DGRMConfigurator.class);
|
||||
|
@ -177,7 +179,7 @@ public class DGRMConfigurator extends VisPlugin {
|
|||
|
||||
graphTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
|
||||
graphTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
|
||||
|
||||
JPanel southPanel = new JPanel(new GridLayout(1, 3));
|
||||
JButton button = new JButton("Add");
|
||||
button.addActionListener(new ActionListener() {
|
||||
|
@ -202,11 +204,11 @@ public class DGRMConfigurator extends VisPlugin {
|
|||
}
|
||||
});
|
||||
southPanel.add(button);
|
||||
|
||||
|
||||
getContentPane().setLayout(new BorderLayout());
|
||||
add(BorderLayout.CENTER, new JScrollPane(graphTable));
|
||||
add(BorderLayout.SOUTH, southPanel);
|
||||
|
||||
|
||||
graphTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
ListSelectionModel lsm = (ListSelectionModel)e.getSource();
|
||||
|
@ -336,14 +338,14 @@ public class DGRMConfigurator extends VisPlugin {
|
|||
public static DirectedGraphMedium.Edge[] parseDGRMLinksFile(File file, Simulation simulation) {
|
||||
String fileContents = StringUtils.loadFromFile(file);
|
||||
ArrayList<DirectedGraphMedium.Edge> edges = new ArrayList<DirectedGraphMedium.Edge>();
|
||||
|
||||
|
||||
/* format: # [src] [dst] [prr] [prr_ci] [num_tx] [num_rx] [rssi] [rssi_min] [rssi_max] */
|
||||
for (String l: fileContents.split("\n")) {
|
||||
l = l.trim();
|
||||
if (l.startsWith("#")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
Mote m;
|
||||
String[] arr = l.split(" ");
|
||||
int source = Integer.parseInt(arr[INDEX_SRC]);
|
||||
|
@ -365,7 +367,7 @@ public class DGRMConfigurator extends VisPlugin {
|
|||
double rssi = Double.parseDouble(arr[INDEX_RSSI_MEDIAN]);
|
||||
/*int rssiMin <- INDEX_RSSI_MIN;*/
|
||||
/*int rssiMax <- INDEX_RSSI_MAX;*/
|
||||
|
||||
|
||||
DirectedGraphMedium.Edge edge = new DirectedGraphMedium.Edge(sourceRadio, destRadio);
|
||||
destRadio.delay = 0;
|
||||
destRadio.ratio = prr;
|
||||
|
@ -375,7 +377,7 @@ public class DGRMConfigurator extends VisPlugin {
|
|||
}
|
||||
return edges.toArray(new DirectedGraphMedium.Edge[0]);
|
||||
}
|
||||
|
||||
|
||||
final AbstractTableModel model = new AbstractTableModel() {
|
||||
private static final long serialVersionUID = 9101118401527171218L;
|
||||
public String getColumnName(int column) {
|
||||
|
|
|
@ -35,9 +35,6 @@ import java.awt.Color;
|
|||
import java.awt.FontMetrics;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Point;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
|
@ -52,27 +49,29 @@ import org.apache.log4j.Logger;
|
|||
import se.sics.cooja.ClassDescription;
|
||||
import se.sics.cooja.Mote;
|
||||
import se.sics.cooja.Simulation;
|
||||
import se.sics.cooja.SupportedArguments;
|
||||
import se.sics.cooja.interfaces.Position;
|
||||
import se.sics.cooja.interfaces.Radio;
|
||||
import se.sics.cooja.plugins.Visualizer;
|
||||
import se.sics.cooja.plugins.VisualizerSkin;
|
||||
import se.sics.cooja.plugins.Visualizer.SimulationMenuAction;
|
||||
import se.sics.cooja.plugins.VisualizerSkin;
|
||||
import se.sics.cooja.radiomediums.UDGM;
|
||||
|
||||
/**
|
||||
* Visualizer skin for configuring the Unit Disk Graph radio medium (UDGM).
|
||||
*
|
||||
*
|
||||
* Allows a user to change the collective TX/interference ranges, and the TX/RX
|
||||
* success ratio.
|
||||
*
|
||||
*
|
||||
* To also see radio traffic, this skin can be combined with {@link
|
||||
* TrafficVisualizerSkin}.
|
||||
*
|
||||
*
|
||||
* @see TrafficVisualizerSkin
|
||||
* @see UDGM
|
||||
* @author Fredrik Osterlind
|
||||
*/
|
||||
@ClassDescription("Radio environment (UDGM)")
|
||||
@SupportedArguments(radioMediums = {UDGM.class})
|
||||
public class UDGMVisualizerSkin implements VisualizerSkin {
|
||||
private static Logger logger = Logger.getLogger(UDGMVisualizerSkin.class);
|
||||
|
||||
|
@ -179,7 +178,7 @@ public class UDGMVisualizerSkin implements VisualizerSkin {
|
|||
/* UI components */
|
||||
top = Box.createVerticalBox();
|
||||
top.setBorder(BorderFactory.createCompoundBorder(
|
||||
BorderFactory.createLineBorder(Color.BLACK),
|
||||
BorderFactory.createLineBorder(Color.BLACK),
|
||||
BorderFactory.createEmptyBorder(0, 3, 0, 3)));
|
||||
top.setOpaque(true);
|
||||
top.setBackground(Color.LIGHT_GRAY);
|
||||
|
@ -239,7 +238,7 @@ public class UDGMVisualizerSkin implements VisualizerSkin {
|
|||
|
||||
public void paintBeforeMotes(Graphics g) {
|
||||
Mote selectedMote = visualizer.getSelectedMote();
|
||||
if (simulation == null
|
||||
if (simulation == null
|
||||
|| selectedMote == null
|
||||
|| selectedMote.getInterfaces().getRadio() == null) {
|
||||
return;
|
||||
|
@ -264,13 +263,13 @@ public class UDGMVisualizerSkin implements VisualizerSkin {
|
|||
/ (double) selectedRadio.getOutputPowerIndicatorMax());
|
||||
|
||||
Point translatedZero = visualizer.transformPositionToPixel(0.0, 0.0, 0.0);
|
||||
Point translatedInterference =
|
||||
Point translatedInterference =
|
||||
visualizer.transformPositionToPixel(moteInterferenceRange, moteInterferenceRange, 0.0);
|
||||
Point translatedTransmission =
|
||||
Point translatedTransmission =
|
||||
visualizer.transformPositionToPixel(moteTransmissionRange, moteTransmissionRange, 0.0);
|
||||
Point translatedInterferenceMax =
|
||||
Point translatedInterferenceMax =
|
||||
visualizer.transformPositionToPixel(radioMedium.INTERFERENCE_RANGE, radioMedium.INTERFERENCE_RANGE, 0.0);
|
||||
Point translatedTransmissionMax =
|
||||
Point translatedTransmissionMax =
|
||||
visualizer.transformPositionToPixel(radioMedium.TRANSMITTING_RANGE, radioMedium.TRANSMITTING_RANGE, 0.0);
|
||||
|
||||
translatedInterference.x = Math.abs(translatedInterference.x - translatedZero.x);
|
||||
|
@ -313,7 +312,7 @@ public class UDGMVisualizerSkin implements VisualizerSkin {
|
|||
2 * translatedTransmissionMax.x,
|
||||
2 * translatedTransmissionMax.y);
|
||||
|
||||
|
||||
|
||||
FontMetrics fm = g.getFontMetrics();
|
||||
g.setColor(Color.BLACK);
|
||||
|
||||
|
@ -322,18 +321,18 @@ public class UDGMVisualizerSkin implements VisualizerSkin {
|
|||
if (m == selectedMote) {
|
||||
continue;
|
||||
}
|
||||
double prob =
|
||||
double prob =
|
||||
((UDGM) simulation.getRadioMedium()).getSuccessProbability(selectedRadio, m.getInterfaces().getRadio());
|
||||
if (prob == 0.0d) {
|
||||
continue;
|
||||
}
|
||||
String msg = (double)(((int)(1000*prob))/10.0) + "%";
|
||||
String msg = (((int)(1000*prob))/10.0) + "%";
|
||||
Position pos = m.getInterfaces().getPosition();
|
||||
Point pixel = visualizer.transformPositionToPixel(pos);
|
||||
int msgWidth = fm.stringWidth(msg);
|
||||
g.drawString(msg, pixel.x - msgWidth/2, pixel.y + 2*Visualizer.MOTE_RADIUS + 3);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void paintAfterMotes(Graphics g) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue