/*
* Copyright (c) 2005-2010 KOM – Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see .
*
*/
package de.tud.kom.p2psim.api.topology.waypoints;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import de.tud.kom.p2psim.api.topology.obstacles.ObstacleModel;
import de.tud.kom.p2psim.api.util.geo.maps.Map;
import de.tud.kom.p2psim.impl.topology.util.PositionVector;
import de.tud.kom.p2psim.impl.topology.waypoints.graph.DefaultWeightedEdgeRetrievableGraph;
import de.tud.kom.p2psim.impl.topology.waypoints.graph.Path;
import de.tud.kom.p2psim.impl.topology.waypoints.graph.Waypoint;
import de.tud.kom.p2psim.impl.util.Tuple;
public interface WaypointModel {
/**
* Sets the current world dimensions which can be used by the
* waypoint model to correctly position the waypoints.
*
* @param worldDimensions
*/
public abstract void setWorldDimensions(PositionVector worldDimensions);
/**
* Returns all waypoints as a set.
*
* @return
*/
public abstract Collection getWaypoints();
/**
* Returns all waypoints of type "type"
*
* @param type
* @return
*/
public abstract Collection getWaypoints(Class type);
/**
* Returns the closest waypoint to the given position.
*
* @param position
* @return
*/
public abstract Waypoint getClosestWaypoint(PositionVector position);
/**
* Returns the closest waypoint of a specific type to the current position.
*
* @param position
* @param type
* @return
*/
public abstract Waypoint getClosestWaypoint(PositionVector position, Class type);
/**
* Returns a list of Tuple that are connected to the given waypoint.
*
* @param waypoint
* @return
*/
public abstract List> getConnectedWaypoints(Waypoint waypoint);
/**
* Returns a list of Tuple of a specific type that are connected to the given waypoint.
*
* @param waypoint
* @param type
* @return
*/
public abstract List> getConnectedWaypoints(Waypoint waypoint, Class type);
/**
* Returns all paths that are part of the waypoint model.
*
* @return
*/
public abstract Set getPaths();
/**
* Returns the shortest path between the two given waypoints.
*
* @param start
* @param end
* @return
*/
public abstract List getShortestPath(Waypoint start, Waypoint end);
/**
* Returns the total number of waypoints.
*
* @return
*/
public abstract int getNumberOfWaypoints();
/**
* Return the total number of waypoints of a specific type.
*
* @param type
* @return
*/
public abstract int getNumberOfWaypoints(Class type);
public abstract void addListener(WaypointModelListener listener);
public abstract void removeListener(WaypointModelListener listener);
/**
* Starts the waypoint generation process. After this method has
* been called all waypoints should be placed.
*/
public abstract void generateWaypoints();
/**
* Sets the obstacle model an may be called before or after the
* call to generateWaypoints, depending on the configuration.
*
* Should the waypoint model support the placement of waypoints with
* regard to the obstacles it should print a warning if the obstacle
* model hasn't been called beforethe generation has been started.
*
* @param model
*/
public abstract void setObstacleModel(ObstacleModel model);
/**
* Sets the strong waypoint strategy that should be used to generate the
* strong waypoints.
*
* @param strongWaypointStrategy
*/
/*
public abstract void setStrongWaypointStrategy(StrongWaypointStrategy strongWaypointStrategy);
*/
public DefaultWeightedEdgeRetrievableGraph getGraph();
/**
* Indicates if this model is scaled to the required world coordinates.
*
* @return
*/
public boolean isScaled();
/**
* Returns the metric dimensions of the underlying map. This dimensions may
* differ from the used world dimensions and can be used for scaling.
*
* @return
*/
public abstract PositionVector getMetricDimensions();
/**
* Returns the scaling factor if {@link isScaled} is true
* otherwise it should return 1.0
*
* @return
*/
public abstract double getScaleFactor();
public abstract Map getMap();
public abstract void addWaypoint(Waypoint waypoint);
}