package org.lucci.madhoc.env;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.lucci.madhoc.network.Station;
import org.lucci.madhoc.simulation.Configurable;
import org.lucci.madhoc.simulation.random.RandomNumberGenerator;
import org.lucci.up.data.Point;
public abstract class MobilityModel implements Configurable
{
private Station mobileNode;
private MobilityMedium mobilityMedium;
private File file;
private FileOutputStream fos;
public void configure() throws Throwable
{
if (getMobileNode().getNetwork().getSimulation().getConfiguration().getBoolean("mobility_write_xy_files"))
{
String s = getMobileNode().getNetwork().getSimulation().getConfiguration().getString("xy_mobility_directory");
s += File.separator + getMobileNode().getIdentifier() + ".txt";
this.file = new File(s);
this.fos = new FileOutputStream(this.file);
}
}
public void saveLocation()
{
if (fos != null)
{
Point p = getMobileNode().getLocation();
String s = p.getX() + ", " + p.getY() + '\n';
try
{
fos.write(s.getBytes());
fos.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void setMobileNode(Station station)
{
if (this.mobileNode != null)
throw new IllegalStateException("station is already defined");
this.mobileNode = station;
setMobilityMedium(new MobilityMedium.Legs(getMobileNode().getNetwork().getSimulation().getRandomNumberGenerator().getRandom()));
}
public abstract void moveStation(double duration, double simulatedTime);
public Station getMobileNode()
{
return mobileNode;
}
public MobilityMedium getMobilityMedium()
{
return mobilityMedium;
}
public void setMobilityMedium(MobilityMedium mobilityMedium)
{
if (mobilityMedium == null)
throw new IllegalArgumentException();
this.mobilityMedium = mobilityMedium;
}
}