/*
* 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;
import de.tud.kom.p2psim.api.linklayer.mac.PhyType;
import de.tud.kom.p2psim.api.topology.obstacles.ObstacleModel;
import de.tud.kom.p2psim.api.topology.social.SocialView;
import de.tud.kom.p2psim.api.topology.views.TopologyView;
import de.tud.kom.p2psim.api.topology.waypoints.WaypointModel;
import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tudarmstadt.maki.simonstrator.api.component.GlobalComponent;
/**
* We provide a global Topology-Object (ie. this object is only created once in
* the simulator and holds all hosts). The topology is just maintaining the
* places of the hosts as well as obstacles. Connectivity is maintained by the
* corresponding {@link TopologyView}.
*
* @author Bjoern Richerzhagen
* @version 1.0, 21.02.2012
*/
public interface Topology extends GlobalComponent {
/**
* This Position Vector contains the upper bounds for each dimension used in
* the Topology. This information is needed by placement and movement models
*
* @return
*/
public PositionVector getWorldDimensions();
/**
* Add an obstacle to the Topology
*
* @param obstacle
*/
/* public void addObstacle(Obstacle obstacle); */
/**
* Add a host to the topology. Hosts are added at the very beginning of the
* simulation, later additions are not supported.
*
* @param comp
*/
public void addComponent(TopologyComponent comp);
/**
* Set the waypoint model that describes the (preferred) movements
*
* @param model
*/
public void setWaypointModel(WaypointModel model);
/**
* Set the obstacle model that describes obstacles placed in the world
*
* @param model
*/
public void setObstacleModel(ObstacleModel model);
/**
* Ensure that if a new topologyListener is added, it is first of all
* informed of all components and all obstacles already added!
*
* @param listener
*/
public void addTopologyListener(TopologyListener listener);
/**
*
* @param listener
*/
public void removeTopologyListener(TopologyListener listener);
/**
* Add a global {@link TopologyView}, this will also register it as a
* {@link TopologyListener}
*
* @param tView
*/
public void addTopologyView(TopologyView tView);
/**
* Returns the {@link TopologyView} for the given {@link PhyType}
*
* @param phy
* @return
*/
public TopologyView getTopologyView(PhyType phy);
/**
* Adds a global {@link SocialView}, this will also register it as a
* {@link TopologyListener}. Also, the identifier from {@link SocialView} is
* used to access a {@link SocialView}.
*
* @param sView
* The {@link SocialView}, which should be added
*/
public void addSocialView(SocialView sView);
/**
* Gets the {@link SocialView} for the given identifier.
*
* @param id
* The identifier of the SocialView.
* @return The {@link SocialView} or null
if the identifier not
* exists
*/
public SocialView getSocialView(String id);
/**
* Should be called after all hosts are generated! This will be initialize
* the {@link SocialView}s for all possible Hosts. A multiple call should be
* do nothing!
*/
public void initializeSocial();
/**
* Gets the WaypointModel, which is configured (Please note, that must not
* be the final configured WaypointModel!)
*
* @return
*/
public WaypointModel getWaypointModel();
/**
* Gets the ObstacleModel, which is configured (Please note, that must not
* be the final configured ObstacleModel!)
*
* @return
* */
public ObstacleModel getObstacleModel();
}