Skip to content

Commit

Permalink
Add ScnObservable class with setChangedAndNotify() function
Browse files Browse the repository at this point in the history
The ScnObservable extends the normal Observable with the combined setChangedAndNotify() function
  • Loading branch information
darki2002 authored and cmorty committed Aug 31, 2015
1 parent ddf970d commit 42077ad
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 54 deletions.
22 changes: 9 additions & 13 deletions tools/cooja/apps/mrm/java/org/contikios/mrm/ChannelModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@
import org.contikios.cooja.interfaces.DirectionalAntennaRadio;
import org.contikios.cooja.interfaces.Radio;
import org.contikios.cooja.radiomediums.AbstractRadioMedium;
import org.contikios.cooja.util.ScnObservable;

import statistics.GaussianWrapper;

/**
Expand Down Expand Up @@ -103,13 +105,7 @@ enum TransmissionData { SIGNAL_STRENGTH, SIGNAL_STRENGTH_VAR, SNR, SNR_VAR, PROB
/**
* Notifies observers when this channel model has changed settings.
*/
private class SettingsObservable extends Observable {
private void notifySettingsChanged() {
setChanged();
notifyObservers();
}
}
private SettingsObservable settingsObservable = new SettingsObservable();
private ScnObservable settingsObservable = new ScnObservable();
public enum Parameter {
apply_random,
snr_threshold,
Expand Down Expand Up @@ -330,7 +326,7 @@ public void deleteSettingsObserver(Observer obs) {
*/
public void removeAllObstacles() {
myObstacleWorld.removeAll();
settingsObservable.notifySettingsChanged();
settingsObservable.setChangedAndNotify();
}

/**
Expand Down Expand Up @@ -360,7 +356,7 @@ public void addRectObstacle(double startX, double startY, double width, double h
myObstacleWorld.addObstacle(startX, startY, width, height);

if (notify) {
settingsObservable.notifySettingsChanged();
settingsObservable.setChangedAndNotify();
}
}

Expand Down Expand Up @@ -442,17 +438,17 @@ public void setParameterValue(Parameter id, Object newValue) {
needToPrecalculateFSPL = true;
needToPrecalculateOutputPower = true;

settingsObservable.notifySettingsChanged();
settingsObservable.setChangedAndNotify();
}

/**
* When this method is called all settings observers
* will be notified.
*/
public void notifySettingsChanged() {
settingsObservable.notifySettingsChanged();
settingsObservable.setChangedAndNotify();
}

/**
* Path loss component from Friis' transmission equation.
* Uses frequency and distance only.
Expand Down Expand Up @@ -1884,7 +1880,7 @@ public boolean setConfigXML(Collection<Element> configXML) {
}
needToPrecalculateFSPL = true;
needToPrecalculateOutputPower = true;
settingsObservable.notifySettingsChanged();
settingsObservable.setChangedAndNotify();
return true;
}

Expand Down
10 changes: 2 additions & 8 deletions tools/cooja/apps/mrm/java/org/contikios/mrm/MRM.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import org.contikios.cooja.interfaces.Radio;
import org.contikios.cooja.plugins.Visualizer;
import org.contikios.cooja.radiomediums.AbstractRadioMedium;
import org.contikios.cooja.util.ScnObservable;
import org.contikios.mrm.ChannelModel.Parameter;
import org.contikios.mrm.ChannelModel.RadioPair;
import org.contikios.mrm.ChannelModel.TxPair;
Expand Down Expand Up @@ -93,7 +94,7 @@ public class MRM extends AbstractRadioMedium {
/**
* Notifies observers when this radio medium has changed settings.
*/
private SettingsObservable settingsObservable = new SettingsObservable();
private ScnObservable settingsObservable = new ScnObservable();

/**
* Creates a new Multi-path Ray-tracing Medium (MRM).
Expand Down Expand Up @@ -449,13 +450,6 @@ public ChannelModel getChannelModel() {
return currentChannelModel;
}

class SettingsObservable extends Observable {
private void notifySettingsChanged() {
setChanged();
notifyObservers();
}
}

class MRMRadioConnection extends RadioConnection {
private Hashtable<Radio, Double> signalStrengths = new Hashtable<Radio, Double>();

Expand Down
18 changes: 4 additions & 14 deletions tools/cooja/java/org/contikios/cooja/Cooja.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@
import org.contikios.cooja.plugins.SimControl;
import org.contikios.cooja.plugins.SimInformation;
import org.contikios.cooja.util.ExecuteJAR;
import org.contikios.cooja.util.ScnObservable;

/**
* Main file of COOJA Simulator. Typically contains a visualizer for the
Expand Down Expand Up @@ -325,21 +326,10 @@ public String toString() {

private Vector<Class<? extends Positioner>> positionerClasses = new Vector<Class<? extends Positioner>>();

private class HighlightObservable extends Observable {
private void setChangedAndNotify(Mote mote) {
setChanged();
notifyObservers(mote);
}
}
private HighlightObservable moteHighlightObservable = new HighlightObservable();

private class MoteRelationsObservable extends Observable {
private void setChangedAndNotify() {
setChanged();
notifyObservers();
}
}
private MoteRelationsObservable moteRelationObservable = new MoteRelationsObservable();
private ScnObservable moteHighlightObservable = new ScnObservable();

private ScnObservable moteRelationObservable = new ScnObservable();

private JTextPane quickHelpTextPane;
private JScrollPane quickHelpScroll;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,10 @@
import org.contikios.cooja.TimeEvent;
import org.contikios.cooja.interfaces.CustomDataRadio;
import org.contikios.cooja.interfaces.Radio;
import org.contikios.cooja.util.ScnObservable;
import org.jdom.Element;


/**
* Abstract radio medium provides basic functionality for implementing radio
* mediums.
Expand Down Expand Up @@ -90,17 +92,7 @@ public abstract class AbstractRadioMedium extends RadioMedium {
public int COUNTER_RX = 0;
public int COUNTER_INTERFERED = 0;

public class RadioMediumObservable extends Observable {
public void setRadioMediumChanged() {
setChanged();
}
public void setRadioMediumChangedAndNotify() {
setChanged();
notifyObservers();
}
}

private RadioMediumObservable radioMediumObservable = new RadioMediumObservable();
protected ScnObservable radioMediumObservable = new ScnObservable();

/**
* This constructor should always be called from implemented radio mediums.
Expand Down Expand Up @@ -288,7 +280,7 @@ public void execute(long t) {

/* Notify observers */
lastConnection = null;
radioMediumObservable.setRadioMediumChangedAndNotify();
radioMediumObservable.setChangedAndNotify();
}
break;
case TRANSMISSION_FINISHED: {
Expand Down Expand Up @@ -333,7 +325,7 @@ public void execute(long t) {
updateSignalStrengths();

/* Notify observers */
radioMediumObservable.setRadioMediumChangedAndNotify();
radioMediumObservable.setChangedAndNotify();
}
break;
case CUSTOM_DATA_TRANSMITTED: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,7 @@ public void addEdge(Edge e) {
edges.add(e);
requestEdgeAnalysis();

((AbstractRadioMedium.RadioMediumObservable)
this.getRadioMediumObservable()).setRadioMediumChangedAndNotify();
radioMediumObservable.setChangedAndNotify();
}

public void removeEdge(Edge edge) {
Expand All @@ -105,16 +104,14 @@ public void removeEdge(Edge edge) {
edges.remove(edge);
requestEdgeAnalysis();

((AbstractRadioMedium.RadioMediumObservable)
this.getRadioMediumObservable()).setRadioMediumChangedAndNotify();
radioMediumObservable.setChangedAndNotify();
}

public void clearEdges() {
edges.clear();
requestEdgeAnalysis();

((AbstractRadioMedium.RadioMediumObservable)
this.getRadioMediumObservable()).setRadioMediumChangedAndNotify();
radioMediumObservable.setChangedAndNotify();
}

public Edge[] getEdges() {
Expand Down
16 changes: 16 additions & 0 deletions tools/cooja/java/org/contikios/cooja/util/ScnObservable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.contikios.cooja.util;

import java.util.Observable;

public class ScnObservable extends Observable {
public void setChangedAndNotify() {
setChanged();
notifyObservers();
}

public void setChangedAndNotify(Object obj) {
setChanged();
notifyObservers(obj);
}

}

0 comments on commit 42077ad

Please sign in to comment.