Commit 0c80da45 authored by Björn Richerzhagen's avatar Björn Richerzhagen
Browse files

Removed deprecated `Position`-Interface

parent db566de9
...@@ -9,12 +9,12 @@ import java.io.UnsupportedEncodingException; ...@@ -9,12 +9,12 @@ import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Random; import java.util.Random;
import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB; import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB;
import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy; import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy;
import de.tud.kom.p2psim.impl.util.positioning.GeoSpherePosition; import de.tud.kom.p2psim.impl.util.positioning.GeoSpherePosition;
import de.tudarmstadt.maki.simonstrator.api.Randoms; import de.tudarmstadt.maki.simonstrator.api.Randoms;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
public class AppJobberPositioning implements PositioningStrategy { public class AppJobberPositioning implements PositioningStrategy {
...@@ -25,7 +25,7 @@ public class AppJobberPositioning implements PositioningStrategy { ...@@ -25,7 +25,7 @@ public class AppJobberPositioning implements PositioningStrategy {
private Random rnd = Randoms.getRandom(AppJobberPositioning.class); private Random rnd = Randoms.getRandom(AppJobberPositioning.class);
@Override @Override
public Position getPosition( public Location getPosition(
SimHost host, SimHost host,
NetMeasurementDB db, NetMeasurementDB db,
NetMeasurementDB.Host hostMeta) { NetMeasurementDB.Host hostMeta) {
......
...@@ -24,12 +24,12 @@ package de.tud.kom.p2psim.impl.network.modular.st.positioning; ...@@ -24,12 +24,12 @@ package de.tud.kom.p2psim.impl.network.modular.st.positioning;
import java.util.List; import java.util.List;
import java.util.Vector; import java.util.Vector;
import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.impl.network.modular.common.GNPToolkit; import de.tud.kom.p2psim.impl.network.modular.common.GNPToolkit;
import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB; import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB;
import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy; import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
/** /**
* Applies the (virtual) GNP position as the host's position * Applies the (virtual) GNP position as the host's position
...@@ -40,7 +40,7 @@ import de.tud.kom.p2psim.impl.topology.PositionVector; ...@@ -40,7 +40,7 @@ import de.tud.kom.p2psim.impl.topology.PositionVector;
public class GNPPositioning implements PositioningStrategy { public class GNPPositioning implements PositioningStrategy {
@Override @Override
public Position getPosition(SimHost host, NetMeasurementDB db, public Location getPosition(SimHost host, NetMeasurementDB db,
NetMeasurementDB.Host hostMeta) { NetMeasurementDB.Host hostMeta) {
if (hostMeta == null) if (hostMeta == null)
...@@ -51,7 +51,7 @@ public class GNPPositioning implements PositioningStrategy { ...@@ -51,7 +51,7 @@ public class GNPPositioning implements PositioningStrategy {
} }
public static class GNPPosition extends PositionVector implements Position { public static class GNPPosition extends PositionVector {
private List<Double> coords; private List<Double> coords;
...@@ -63,7 +63,7 @@ public class GNPPositioning implements PositioningStrategy { ...@@ -63,7 +63,7 @@ public class GNPPositioning implements PositioningStrategy {
} }
@Override @Override
public double getDistance(Position netPosition) { public double distanceTo(Location netPosition) {
if (!(netPosition instanceof PositionVector)) if (!(netPosition instanceof PositionVector))
throw new AssertionError( throw new AssertionError(
"Can not calculate distances between different position classes: " "Can not calculate distances between different position classes: "
......
...@@ -21,12 +21,12 @@ ...@@ -21,12 +21,12 @@
package de.tud.kom.p2psim.impl.network.modular.st.positioning; package de.tud.kom.p2psim.impl.network.modular.st.positioning;
import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.impl.network.modular.common.GeoToolkit; import de.tud.kom.p2psim.impl.network.modular.common.GeoToolkit;
import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB; import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB;
import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy; import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
/** /**
* Applies a geographical position as defined by the GeoIP project. * Applies a geographical position as defined by the GeoIP project.
...@@ -49,8 +49,7 @@ public class GeographicalPositioning implements PositioningStrategy { ...@@ -49,8 +49,7 @@ public class GeographicalPositioning implements PositioningStrategy {
} }
public class GeographicalPosition extends PositionVector implements public class GeographicalPosition extends PositionVector {
Position {
private double latitude; private double latitude;
private double longitude; private double longitude;
...@@ -70,7 +69,7 @@ public class GeographicalPositioning implements PositioningStrategy { ...@@ -70,7 +69,7 @@ public class GeographicalPositioning implements PositioningStrategy {
* *
*/ */
@Override @Override
public double getDistance(Position netPosition) { public double distanceTo(Location netPosition) {
if (!(netPosition instanceof PositionVector)) if (!(netPosition instanceof PositionVector))
throw new AssertionError( throw new AssertionError(
"Can not calculate the distance between two different position classes: " "Can not calculate the distance between two different position classes: "
...@@ -80,12 +79,6 @@ public class GeographicalPositioning implements PositioningStrategy { ...@@ -80,12 +79,6 @@ public class GeographicalPositioning implements PositioningStrategy {
return GeoToolkit.getDistance(this.latitude, this.longitude, return GeoToolkit.getDistance(this.latitude, this.longitude,
other.getEntry(1), other.getEntry(0)); other.getEntry(1), other.getEntry(0));
} }
@Override
public double getAngle(Position target) {
throw new AssertionError(
"getAngle is not defined for this Position-Type");
}
@Override @Override
public int getTransmissionSize() { public int getTransmissionSize() {
......
...@@ -20,11 +20,11 @@ ...@@ -20,11 +20,11 @@
package de.tud.kom.p2psim.impl.network.modular.st.positioning; package de.tud.kom.p2psim.impl.network.modular.st.positioning;
import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB; import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB;
import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy; import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy;
import de.tud.kom.p2psim.impl.topology.placement.PositionDistribution; import de.tud.kom.p2psim.impl.topology.placement.PositionDistribution;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
/** /**
* Positioning on a 2D-Plane, used for all Movement-Enabled Routing-Scenarios * Positioning on a 2D-Plane, used for all Movement-Enabled Routing-Scenarios
...@@ -42,7 +42,7 @@ public class PlanePositioning implements PositioningStrategy { ...@@ -42,7 +42,7 @@ public class PlanePositioning implements PositioningStrategy {
} }
@Override @Override
public Position getPosition( public Location getPosition(
SimHost host, SimHost host,
NetMeasurementDB db, NetMeasurementDB db,
de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB.Host hostMeta) { de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB.Host hostMeta) {
......
...@@ -22,13 +22,13 @@ package de.tud.kom.p2psim.impl.network.modular.st.positioning; ...@@ -22,13 +22,13 @@ package de.tud.kom.p2psim.impl.network.modular.st.positioning;
import java.util.Random; import java.util.Random;
import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB; import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB;
import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy; import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy;
import de.tud.kom.p2psim.impl.network.simple.SimpleSubnet; import de.tud.kom.p2psim.impl.network.simple.SimpleSubnet;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tudarmstadt.maki.simonstrator.api.Randoms; import de.tudarmstadt.maki.simonstrator.api.Randoms;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
/** /**
* Implementation of the <code>NetPosition</code> interface representing a two * Implementation of the <code>NetPosition</code> interface representing a two
...@@ -48,7 +48,7 @@ public class SimpleEuclidianPositioning implements PositioningStrategy { ...@@ -48,7 +48,7 @@ public class SimpleEuclidianPositioning implements PositioningStrategy {
* @see de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy#getPosition(de.tud.kom.p2psim.api.common.Host, de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB, de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB.Host) * @see de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy#getPosition(de.tud.kom.p2psim.api.common.Host, de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB, de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB.Host)
*/ */
@Override @Override
public Position getPosition( public Location getPosition(
SimHost host, SimHost host,
NetMeasurementDB db, NetMeasurementDB db,
NetMeasurementDB.Host hostMeta) { NetMeasurementDB.Host hostMeta) {
...@@ -59,7 +59,7 @@ public class SimpleEuclidianPositioning implements PositioningStrategy { ...@@ -59,7 +59,7 @@ public class SimpleEuclidianPositioning implements PositioningStrategy {
} }
public class SimpleEuclidianPosition extends PositionVector implements Position { public class SimpleEuclidianPosition extends PositionVector {
private double xPos; private double xPos;
...@@ -93,7 +93,8 @@ public class SimpleEuclidianPositioning implements PositioningStrategy { ...@@ -93,7 +93,8 @@ public class SimpleEuclidianPositioning implements PositioningStrategy {
* de.tud.kom.p2psim.api.network.NetPosition#getDistance(de.tud.kom. * de.tud.kom.p2psim.api.network.NetPosition#getDistance(de.tud.kom.
* p2psim .api.network.NetPosition) * p2psim .api.network.NetPosition)
*/ */
public double getDistance(Position ep) { @Override
public double distanceTo(Location ep) {
double xDiff = 0; double xDiff = 0;
double yDiff = 0; double yDiff = 0;
SimpleEuclidianPosition point = (SimpleEuclidianPosition) ep; SimpleEuclidianPosition point = (SimpleEuclidianPosition) ep;
...@@ -118,11 +119,6 @@ public class SimpleEuclidianPositioning implements PositioningStrategy { ...@@ -118,11 +119,6 @@ public class SimpleEuclidianPositioning implements PositioningStrategy {
return Math.pow(Math.pow(xDiff, 2) + Math.pow(yDiff, 2), 0.5); return Math.pow(Math.pow(xDiff, 2) + Math.pow(yDiff, 2), 0.5);
} }
@Override
public double getAngle(Position target) {
throw new AssertionError("getAngle is not defined for this Position-Type");
}
@Override @Override
public int getTransmissionSize() { public int getTransmissionSize() {
return 16; // 2 * double return 16; // 2 * double
......
...@@ -23,12 +23,12 @@ package de.tud.kom.p2psim.impl.network.modular.st.positioning; ...@@ -23,12 +23,12 @@ package de.tud.kom.p2psim.impl.network.modular.st.positioning;
import java.util.Random; import java.util.Random;
import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB; import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB;
import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy; import de.tud.kom.p2psim.impl.network.modular.st.PositioningStrategy;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tudarmstadt.maki.simonstrator.api.Randoms; import de.tudarmstadt.maki.simonstrator.api.Randoms;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
/** /**
* Applies a uniformly-distributed random position on a 2-or multi-dimensional * Applies a uniformly-distributed random position on a 2-or multi-dimensional
...@@ -48,7 +48,7 @@ public class TorusPositioning implements PositioningStrategy { ...@@ -48,7 +48,7 @@ public class TorusPositioning implements PositioningStrategy {
Random rand = Randoms.getRandom(TorusPosition.class); Random rand = Randoms.getRandom(TorusPosition.class);
@Override @Override
public Position getPosition(SimHost host, NetMeasurementDB db, public Location getPosition(SimHost host, NetMeasurementDB db,
NetMeasurementDB.Host hostMeta) { NetMeasurementDB.Host hostMeta) {
double[] rawPos = getRawTorusPositionFor(host); double[] rawPos = getRawTorusPositionFor(host);
...@@ -93,7 +93,7 @@ public class TorusPositioning implements PositioningStrategy { ...@@ -93,7 +93,7 @@ public class TorusPositioning implements PositioningStrategy {
this.halfTorusDimensionSize = torusDimensionSize * 0.5d; this.halfTorusDimensionSize = torusDimensionSize * 0.5d;
} }
public class TorusPosition extends PositionVector implements Position { public class TorusPosition extends PositionVector {
TorusPosition(double[] rawPos) { TorusPosition(double[] rawPos) {
...@@ -101,7 +101,7 @@ public class TorusPositioning implements PositioningStrategy { ...@@ -101,7 +101,7 @@ public class TorusPositioning implements PositioningStrategy {
} }
@Override @Override
public double getDistance(Position netPosition) { public double distanceTo(Location netPosition) {
if (!(netPosition instanceof PositionVector)) if (!(netPosition instanceof PositionVector))
throw new AssertionError( throw new AssertionError(
"Can not calculate distances between different position classes: " "Can not calculate distances between different position classes: "
......
...@@ -28,7 +28,6 @@ import java.util.Map; ...@@ -28,7 +28,6 @@ import java.util.Map;
import de.tud.kom.p2psim.api.analyzer.ConnectivityAnalyzer; import de.tud.kom.p2psim.api.analyzer.ConnectivityAnalyzer;
import de.tud.kom.p2psim.api.analyzer.MessageAnalyzer.Reason; import de.tud.kom.p2psim.api.analyzer.MessageAnalyzer.Reason;
import de.tud.kom.p2psim.api.analyzer.NetlayerAnalyzer; import de.tud.kom.p2psim.api.analyzer.NetlayerAnalyzer;
import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.api.common.SimHostComponent; import de.tud.kom.p2psim.api.common.SimHostComponent;
import de.tud.kom.p2psim.api.linklayer.LinkLayer; import de.tud.kom.p2psim.api.linklayer.LinkLayer;
...@@ -57,6 +56,7 @@ import de.tudarmstadt.maki.simonstrator.api.component.network.Bandwidth; ...@@ -57,6 +56,7 @@ import de.tudarmstadt.maki.simonstrator.api.component.network.Bandwidth;
import de.tudarmstadt.maki.simonstrator.api.component.network.NetID; import de.tudarmstadt.maki.simonstrator.api.component.network.NetID;
import de.tudarmstadt.maki.simonstrator.api.component.network.NetInterface; import de.tudarmstadt.maki.simonstrator.api.component.network.NetInterface;
import de.tudarmstadt.maki.simonstrator.api.component.network.NetworkComponent; import de.tudarmstadt.maki.simonstrator.api.component.network.NetworkComponent;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
import de.tudarmstadt.maki.simonstrator.api.component.transport.ConnectivityListener; import de.tudarmstadt.maki.simonstrator.api.component.transport.ConnectivityListener;
/** /**
...@@ -548,7 +548,7 @@ public class RoutedNetLayer implements SimNetworkComponent, NetworkComponent, ...@@ -548,7 +548,7 @@ public class RoutedNetLayer implements SimNetworkComponent, NetworkComponent,
} }
@Override @Override
public Position getNetPosition() { public Location getNetPosition() {
return host.getTopologyComponent().getRealPosition(); return host.getTopologyComponent().getRealPosition();
} }
......
...@@ -19,11 +19,10 @@ ...@@ -19,11 +19,10 @@
*/ */
package de.tud.kom.p2psim.impl.network.simple; package de.tud.kom.p2psim.impl.network.simple;
import de.tud.kom.p2psim.api.analyzer.MessageAnalyzer.Reason; import de.tud.kom.p2psim.api.analyzer.MessageAnalyzer.Reason;
import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.api.network.BandwidthImpl; import de.tud.kom.p2psim.api.network.BandwidthImpl;
import de.tud.kom.p2psim.api.network.NetMessage; import de.tud.kom.p2psim.api.network.NetMessage;
...@@ -34,105 +33,106 @@ import de.tud.kom.p2psim.impl.transport.AbstractTransMessage; ...@@ -34,105 +33,106 @@ import de.tud.kom.p2psim.impl.transport.AbstractTransMessage;
import de.tudarmstadt.maki.simonstrator.api.Message; import de.tudarmstadt.maki.simonstrator.api.Message;
import de.tudarmstadt.maki.simonstrator.api.Monitor; import de.tudarmstadt.maki.simonstrator.api.Monitor;
import de.tudarmstadt.maki.simonstrator.api.component.network.NetID; import de.tudarmstadt.maki.simonstrator.api.component.network.NetID;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
public class SimpleNetLayer extends AbstractNetLayer {
public class SimpleNetLayer extends AbstractNetLayer {
private double currentDownBandwidth;
private double currentDownBandwidth;
private double currentUpBandwidth;
private double currentUpBandwidth;
private final SimpleSubnet subNet;
private final SimpleSubnet subNet;
public SimpleNetLayer(SimHost host, SimpleSubnet subNet, SimpleNetID netID,
Position netPosition, BandwidthImpl bandwidth) { public SimpleNetLayer(SimHost host, SimpleSubnet subNet, SimpleNetID netID,
super(host, netID, bandwidth, netPosition, null); Location netPosition, BandwidthImpl bandwidth) {
this.subNet = subNet; super(host, netID, bandwidth, netPosition, null);
subNet.registerNetLayer(this); this.subNet = subNet;
} subNet.registerNetLayer(this);
}
public boolean isSupported(TransProtocol transProtocol) {
if (transProtocol.equals(TransProtocol.UDP)) public boolean isSupported(TransProtocol transProtocol) {
return true; if (transProtocol.equals(TransProtocol.UDP))
else return true;
return false; else
} return false;
}
public void send(Message msg, NetID receiver, NetProtocol netProtocol) {
// outer if-else-block is used to avoid sending although the host is public void send(Message msg, NetID receiver, NetProtocol netProtocol) {
// offline // outer if-else-block is used to avoid sending although the host is
if (this.isOnline()) { // offline
TransProtocol usedTransProtocol = ((AbstractTransMessage) msg) if (this.isOnline()) {
.getProtocol(); TransProtocol usedTransProtocol = ((AbstractTransMessage) msg)
if (this.isSupported(usedTransProtocol)) { .getProtocol();
if (this.isSupported(usedTransProtocol)) {
NetMessage netMsg = new SimpleNetMessage(msg, receiver, NetMessage netMsg = new SimpleNetMessage(msg, receiver,
getLocalInetAddress(), getLocalInetAddress(),
netProtocol); netProtocol);
if (hasAnalyzer) { if (hasAnalyzer) {
netAnalyzerProxy netAnalyzerProxy
.netMsgEvent(netMsg, getHost(), Reason.SEND); .netMsgEvent(netMsg, getHost(), Reason.SEND);
} }
subNet.send(netMsg); subNet.send(netMsg);
} else { } else {
throw new IllegalArgumentException("Transport protocol " throw new IllegalArgumentException("Transport protocol "
+ usedTransProtocol + usedTransProtocol
+ " not supported by this NetLayer implementation."); + " not supported by this NetLayer implementation.");
} }
} else { } else {
int assignedMsgId = subNet.determineTransMsgNumber(msg); int assignedMsgId = subNet.determineTransMsgNumber(msg);
Monitor.log(SimpleNetLayer.class, Monitor.Level.DEBUG, Monitor.log(SimpleNetLayer.class, Monitor.Level.DEBUG,
"During send: Assigning MsgId " + assignedMsgId "During send: Assigning MsgId " + assignedMsgId
+ " to dropped message"); + " to dropped message");
((AbstractTransMessage) msg).setCommId(assignedMsgId); ((AbstractTransMessage) msg).setCommId(assignedMsgId);
NetMessage netMsg = new SimpleNetMessage(msg, receiver, NetMessage netMsg = new SimpleNetMessage(msg, receiver,
getLocalInetAddress(), getLocalInetAddress(),
netProtocol); netProtocol);
if (hasAnalyzer) { if (hasAnalyzer) {
netAnalyzerProxy.netMsgEvent(netMsg, getHost(), Reason.DROP); netAnalyzerProxy.netMsgEvent(netMsg, getHost(), Reason.DROP);
} }
} }
} }
@Override @Override
public String toString() { public String toString() {
return "NetLayer(netID=" + getLocalInetAddress() + ", " return "NetLayer(netID=" + getLocalInetAddress() + ", "
+ (isOffline() ? "online" : "offline") + ")"; + (isOffline() ? "online" : "offline") + ")";
} }
@Override @Override
public int hashCode() { public int hashCode() {
final int PRIME = 31; final int PRIME = 31;
int result = 1; int result = 1;
long temp; long temp;
temp = Double.doubleToLongBits(currentDownBandwidth); temp = Double.doubleToLongBits(currentDownBandwidth);
result = PRIME * result + (int) (temp ^ (temp >>> 32)); result = PRIME * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(currentUpBandwidth); temp = Double.doubleToLongBits(currentUpBandwidth);
result = PRIME * result + (int) (temp ^ (temp >>> 32)); result = PRIME * result + (int) (temp ^ (temp >>> 32));
result = PRIME * result + ((subNet == null) ? 0 : subNet.hashCode()); result = PRIME * result + ((subNet == null) ? 0 : subNet.hashCode());
return result; return result;
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (this == obj) if (this == obj)
return true; return true;
if (obj == null) if (obj == null)
return false; return false;
if (getClass() != obj.getClass()) if (getClass() != obj.getClass())
return false; return false;
final SimpleNetLayer other = (SimpleNetLayer) obj; final SimpleNetLayer other = (SimpleNetLayer) obj;
if (Double.doubleToLongBits(currentDownBandwidth) != Double if (Double.doubleToLongBits(currentDownBandwidth) != Double
.doubleToLongBits(other.currentDownBandwidth)) .doubleToLongBits(other.currentDownBandwidth))
return false; return false;
if (Double.doubleToLongBits(currentUpBandwidth) != Double if (Double.doubleToLongBits(currentUpBandwidth) != Double
.doubleToLongBits(other.currentUpBandwidth)) .doubleToLongBits(other.currentUpBandwidth))
return false; return false;
if (subNet == null) { if (subNet == null) {
if (other.subNet != null) if (other.subNet != null)
return false; return false;
} else if (!subNet.equals(other.subNet)) } else if (!subNet.equals(other.subNet))
return false; return false;
return true; return true;
} }
} }
...@@ -28,7 +28,6 @@ import java.util.Random; ...@@ -28,7 +28,6 @@ import java.util.Random;
import java.util.Set; import java.util.Set;
import de.tud.kom.p2psim.api.common.HostProperties; import de.tud.kom.p2psim.api.common.HostProperties;
import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
...@@ -178,7 +177,7 @@ public class DefaultTopologyComponent implements TopologyComponent { ...@@ -178,7 +177,7 @@ public class DefaultTopologyComponent implements TopologyComponent {
@Override @Override
public void positionChanged() { public void positionChanged() {
for (PositionListener listener : positionListener) { for (PositionListener listener : positionListener) {
if (listener.getPosition().getDistance(position) < listener if (listener.getPosition().distanceTo(position) < listener
.getRadius()) { .getRadius()) {
listener.reachedPosition(); listener.reachedPosition();
} }
...@@ -212,14 +211,6 @@ public class DefaultTopologyComponent implements TopologyComponent { ...@@ -212,14 +211,6 @@ public class DefaultTopologyComponent implements TopologyComponent {
return position; return position;
} }
@Override
public Position getPosition(PositionAccuracy accuracy) {
/*
* TODO :)
*/
return position;
}
@Override @Override
public Topology getTopology() { public Topology getTopology() {
return topology; return topology;
......
...@@ -25,7 +25,6 @@ import java.util.Arrays; ...@@ -25,7 +25,6 @@ import java.util.Arrays;
import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Coordinate;
import de.tud.kom.p2psim.api.common.Position;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
/** /**
...@@ -50,7 +49,7 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location; ...@@ -50,7 +49,7 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
* @author Bjoern Richerzhagen * @author Bjoern Richerzhagen
* @version 1.0, 04/25/2011 * @version 1.0, 04/25/2011
*/ */
public class PositionVector implements Position, Location { public class PositionVector implements Location {
private int dimensions; private int dimensions;
...@@ -255,55 +254,6 @@ public class PositionVector implements Position, Location { ...@@ -255,55 +254,6 @@ public class PositionVector implements Position, Location {
return result; return result;
} }
@Override
public double getDistance(Position position) {
if (position instanceof PositionVector) {
PositionVector pv = (PositionVector) position;
if (pv.getDimensions() == getDimensions()) {
double dist = 0;
for (int i = 0; i < dimensions; i++) {
// faster as Math.pow
dist += (pv.getEntry(i) - getEntry(i))
* (pv.getEntry(i) - getEntry(i));
}
return Math.sqrt(dist);
} else {
throw new AssertionError(
"Can not compute distance between Vectors of different length!");
}
} else {
throw new AssertionError("Incompatible Types!");
}
}
@Override
public double getAngle(Position target) {
if (target instanceof PositionVector) {
PositionVector t = (PositionVector) target;
/*
* Calculates the angle using atan2 - this implies that the first
* two dimensions in your vector are the plane you are interested
* in.
*/
return Math.atan2(t.getEntry(1) - this.getEntry(1), t.getEntry(0)
- this.getEntry(0));
} else {
throw new AssertionError(
"Can only calculate an Angle on elements of type position vector");
}
}
@Override
public Position getTarget(double distance, double angle) {
/*
* The call to "clone" ensures correct typing
*/
PositionVector newPos = clone();
newPos.setEntry(0, newPos.getEntry(0) + distance * Math.cos(angle));
newPos.setEntry(1, newPos.getEntry(1) + distance * Math.sin(angle));
return newPos;
}
@Override @Override
public int getTransmissionSize() { public int getTransmissionSize() {
return getDimensions() * 8; return getDimensions() * 8;
...@@ -496,13 +446,39 @@ public class PositionVector implements Position, Location { ...@@ -496,13 +446,39 @@ public class PositionVector implements Position, Location {
@Override @Override
public double distanceTo(Location dest) { public double distanceTo(Location dest) {
assert (dest instanceof PositionVector); if (dest instanceof PositionVector) {
return this.getDistance((PositionVector) dest); PositionVector pv = (PositionVector) dest;
if (pv.getDimensions() == getDimensions()) {
double dist = 0;
for (int i = 0; i < dimensions; i++) {
// faster as Math.pow
dist += (pv.getEntry(i) - getEntry(i))
* (pv.getEntry(i) - getEntry(i));
}
return Math.sqrt(dist);
} else {
throw new AssertionError(
"Can not compute distance between Vectors of different length!");
}
} else {
throw new AssertionError("Incompatible Types!");
}
} }
@Override @Override
public float bearingTo(Location dest) { public float bearingTo(Location dest) {
assert (dest instanceof PositionVector); if (dest instanceof PositionVector) {
return (float) ((this.getAngle((PositionVector) dest) - (Math.PI / 2)) * 180 / Math.PI); PositionVector t = (PositionVector) dest;
/*
* Calculates the angle using atan2 - this implies that the first
* two dimensions in your vector are the plane you are interested
* in.
*/
return (float) Math.atan2(t.getEntry(1) - this.getEntry(1),
t.getEntry(0) - this.getEntry(0));
} else {
throw new AssertionError(
"Can only calculate an Angle on elements of type position vector");
}
} }
} }
...@@ -39,6 +39,7 @@ import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB; ...@@ -39,6 +39,7 @@ import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB;
import de.tud.kom.p2psim.impl.topology.movement.AbstractWaypointMovementModel; import de.tud.kom.p2psim.impl.topology.movement.AbstractWaypointMovementModel;
import de.tud.kom.p2psim.impl.topology.placement.GNPPlacement; import de.tud.kom.p2psim.impl.topology.placement.GNPPlacement;
import de.tud.kom.p2psim.impl.topology.views.latency.GNPLatency; import de.tud.kom.p2psim.impl.topology.views.latency.GNPLatency;
import de.tudarmstadt.maki.simonstrator.api.Binder;
import de.tudarmstadt.maki.simonstrator.api.Host; import de.tudarmstadt.maki.simonstrator.api.Host;
import de.tudarmstadt.maki.simonstrator.api.Monitor; import de.tudarmstadt.maki.simonstrator.api.Monitor;
import de.tudarmstadt.maki.simonstrator.api.Monitor.Level; import de.tudarmstadt.maki.simonstrator.api.Monitor.Level;
...@@ -88,7 +89,8 @@ public class TopologyFactory implements HostComponentFactory { ...@@ -88,7 +89,8 @@ public class TopologyFactory implements HostComponentFactory {
@XMLConfigurableConstructor({ "worldX", "worldY" }) @XMLConfigurableConstructor({ "worldX", "worldY" })
public TopologyFactory(double worldX, double worldY) { public TopologyFactory(double worldX, double worldY) {
topo = new DefaultTopology(new PositionVector(worldX, worldY)); topo = new DefaultTopology(new PositionVector(worldX, worldY));
de.tud.kom.p2psim.impl.topology.Topology.setTopology(topo); // Make the topology component available globally
Binder.registerComponent(topo);
} }
@Override @Override
......
...@@ -26,11 +26,12 @@ import java.util.List; ...@@ -26,11 +26,12 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
import de.tud.kom.p2psim.api.topology.Topology;
import de.tud.kom.p2psim.api.topology.movement.MovementListener; import de.tud.kom.p2psim.api.topology.movement.MovementListener;
import de.tud.kom.p2psim.api.topology.movement.MovementModel; import de.tud.kom.p2psim.api.topology.movement.MovementModel;
import de.tud.kom.p2psim.api.topology.movement.MovementSupported; import de.tud.kom.p2psim.api.topology.movement.MovementSupported;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tud.kom.p2psim.impl.topology.Topology; import de.tudarmstadt.maki.simonstrator.api.Binder;
import de.tudarmstadt.maki.simonstrator.api.Event; import de.tudarmstadt.maki.simonstrator.api.Event;
import de.tudarmstadt.maki.simonstrator.api.EventHandler; import de.tudarmstadt.maki.simonstrator.api.EventHandler;
import de.tudarmstadt.maki.simonstrator.api.Randoms; import de.tudarmstadt.maki.simonstrator.api.Randoms;
...@@ -87,7 +88,8 @@ public abstract class AbstractMovementModel implements MovementModel { ...@@ -87,7 +88,8 @@ public abstract class AbstractMovementModel implements MovementModel {
@Override @Override
public void addComponent(MovementSupported component) { public void addComponent(MovementSupported component) {
if (worldDimensions == null) { if (worldDimensions == null) {
worldDimensions = Topology.getWorldDimension(); worldDimensions = Binder.getComponentOrNull(Topology.class)
.getWorldDimensions();
} }
components.add(component); components.add(component);
} }
......
...@@ -27,26 +27,19 @@ import java.util.LinkedHashMap; ...@@ -27,26 +27,19 @@ import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random;
import java.util.Set; import java.util.Set;
import org.jfree.data.io.CSV;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.api.common.SimHostComponent;
import de.tud.kom.p2psim.api.network.SimNetInterface; import de.tud.kom.p2psim.api.network.SimNetInterface;
import de.tud.kom.p2psim.api.topology.Topology;
import de.tud.kom.p2psim.api.topology.movement.MovementInformation; import de.tud.kom.p2psim.api.topology.movement.MovementInformation;
import de.tud.kom.p2psim.api.topology.movement.MovementModel;
import de.tud.kom.p2psim.api.topology.movement.MovementSupported; import de.tud.kom.p2psim.api.topology.movement.MovementSupported;
import de.tud.kom.p2psim.impl.network.gnp.topology.Host;
import de.tud.kom.p2psim.impl.simengine.Simulator; import de.tud.kom.p2psim.impl.simengine.Simulator;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tud.kom.p2psim.impl.topology.Topology;
import de.tud.kom.p2psim.impl.topology.movement.modular.ModularMovementModel; import de.tud.kom.p2psim.impl.topology.movement.modular.ModularMovementModel;
import de.tud.kom.p2psim.impl.topology.movement.modular.attraction.AttractionPoint; import de.tud.kom.p2psim.impl.topology.movement.modular.attraction.AttractionPoint;
import de.tud.kom.p2psim.impl.topology.movement.modular.transition.FixedAssignmentStrategy; import de.tud.kom.p2psim.impl.topology.movement.modular.transition.FixedAssignmentStrategy;
import de.tud.kom.p2psim.impl.topology.movement.modular.transition.TransitionStrategy; import de.tudarmstadt.maki.simonstrator.api.Binder;
import de.tudarmstadt.maki.simonstrator.api.Randoms;
import de.tudarmstadt.maki.simonstrator.api.Time; import de.tudarmstadt.maki.simonstrator.api.Time;
import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor; import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
...@@ -82,7 +75,8 @@ public class CsvMovement extends AbstractMovementModel { ...@@ -82,7 +75,8 @@ public class CsvMovement extends AbstractMovementModel {
@XMLConfigurableConstructor({ "movementPointsFile" , "minMovementSpeed", "maxMovementSpeed" }) @XMLConfigurableConstructor({ "movementPointsFile" , "minMovementSpeed", "maxMovementSpeed" })
public CsvMovement(String movementPointsFile, double minMovementSpeed, double maxMovementSpeed) { public CsvMovement(String movementPointsFile, double minMovementSpeed, double maxMovementSpeed) {
super(); super();
this.worldDimensions = Topology.getWorldDimension(); this.worldDimensions = Binder.getComponentOrNull(Topology.class)
.getWorldDimensions();
this.file = movementPointsFile; this.file = movementPointsFile;
this.readPathInfos = new LinkedList<LinkedList<CsvPathInfo>>(); this.readPathInfos = new LinkedList<LinkedList<CsvPathInfo>>();
this.stateInfo = new LinkedHashMap<MovementSupported, CsvMovementInfo>(); this.stateInfo = new LinkedHashMap<MovementSupported, CsvMovementInfo>();
...@@ -144,7 +138,7 @@ public class CsvMovement extends AbstractMovementModel { ...@@ -144,7 +138,7 @@ public class CsvMovement extends AbstractMovementModel {
double distancePerMoveOperation = pathInfo.getSpeed() double distancePerMoveOperation = pathInfo.getSpeed()
* getTimeBetweenMoveOperations() / Time.SECOND; * getTimeBetweenMoveOperations() / Time.SECOND;
double distance = actPos.getDistance(targetPos); double distance = actPos.distanceTo(targetPos);
steps = (int) Math.round(distance / distancePerMoveOperation); steps = (int) Math.round(distance / distancePerMoveOperation);
......
...@@ -59,7 +59,7 @@ public class TargetMovement extends AbstractMovementModel { ...@@ -59,7 +59,7 @@ public class TargetMovement extends AbstractMovementModel {
PositionVector rVec = new PositionVector(x, y); PositionVector rVec = new PositionVector(x, y);
rVec = rVec.minus(pos); rVec = rVec.minus(pos);
double length = rVec.getDistance(new PositionVector(0, 0)); double length = rVec.distanceTo(new PositionVector(0, 0));
PositionVector vec; PositionVector vec;
if (length > distance) { if (length > distance) {
......
...@@ -25,6 +25,7 @@ import java.io.InputStream; ...@@ -25,6 +25,7 @@ import java.io.InputStream;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.HashMap; import java.util.HashMap;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
...@@ -34,12 +35,13 @@ import com.graphhopper.util.PointList; ...@@ -34,12 +35,13 @@ import com.graphhopper.util.PointList;
import com.graphhopper.util.shapes.GHPoint; import com.graphhopper.util.shapes.GHPoint;
import com.graphhopper.util.shapes.GHPoint3D; import com.graphhopper.util.shapes.GHPoint3D;
import de.tud.kom.p2psim.api.topology.Topology;
import de.tud.kom.p2psim.api.topology.movement.MovementSupported; import de.tud.kom.p2psim.api.topology.movement.MovementSupported;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tud.kom.p2psim.impl.topology.Topology;
import de.tud.kom.p2psim.impl.topology.movement.modularosm.GPSCalculation; import de.tud.kom.p2psim.impl.topology.movement.modularosm.GPSCalculation;
import de.tud.kom.p2psim.impl.util.Either; import de.tud.kom.p2psim.impl.util.Either;
import de.tud.kom.p2psim.impl.util.Left; import de.tud.kom.p2psim.impl.util.Left;
import de.tudarmstadt.maki.simonstrator.api.Binder;
/** /**
* This movement strategy uses the data from MapQuest * This movement strategy uses the data from MapQuest
...@@ -63,7 +65,8 @@ public class OnlineMapQuestMovement extends AbstractLocalMovementStrategy { ...@@ -63,7 +65,8 @@ public class OnlineMapQuestMovement extends AbstractLocalMovementStrategy {
//if the distance is smaller than the given one, the node will choose the next point in the list //if the distance is smaller than the given one, the node will choose the next point in the list
public OnlineMapQuestMovement() { public OnlineMapQuestMovement() {
this.worldDimensions = Topology.getWorldDimension(); this.worldDimensions = Binder.getComponentOrNull(Topology.class)
.getWorldDimensions();
latLeft = GPSCalculation.getLatLower(); latLeft = GPSCalculation.getLatLower();
latRight = GPSCalculation.getLatUpper(); latRight = GPSCalculation.getLatUpper();
lonLeft = GPSCalculation.getLonLeft(); lonLeft = GPSCalculation.getLonLeft();
...@@ -74,7 +77,8 @@ public class OnlineMapQuestMovement extends AbstractLocalMovementStrategy { ...@@ -74,7 +77,8 @@ public class OnlineMapQuestMovement extends AbstractLocalMovementStrategy {
PositionVector destination) { PositionVector destination) {
PositionVector newPosition = null; PositionVector newPosition = null;
if (destination.getDistance(comp.getRealPosition()) < getMovementSpeed(comp)) { if (destination
.distanceTo(comp.getRealPosition()) < getMovementSpeed(comp)) {
newPosition = destination.clone(); newPosition = destination.clone();
} else { } else {
//if not set already for this node or new destination is different than last one //if not set already for this node or new destination is different than last one
......
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