/*
* 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.impl.topology;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import de.tud.kom.p2psim.api.linklayer.mac.PhyType;
import de.tud.kom.p2psim.api.topology.Topology;
import de.tud.kom.p2psim.api.topology.TopologyComponent;
import de.tud.kom.p2psim.api.topology.TopologyListener;
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.movement.modularosm.GPSCalculation;
import de.tud.kom.p2psim.impl.topology.util.PositionVector;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
import de.tud.kom.p2psim.impl.topology.views.visualization.world.SocialViewComponentVis;
/**
* Very basic Topology
*
* @author Bjoern Richerzhagen
* @version 1.0, 29.02.2012
*/
public class DefaultTopology implements Topology {
private List components;
// private List obstacles;
private WaypointModel waypointModel;
private ObstacleModel obstacleModel;
private List topoListeners;
private List topoViews;
private List socialViews;
private PositionVector worldDimensions;
private boolean initializedSocial = false;
public DefaultTopology(PositionVector worldDimensions) {
this.worldDimensions = worldDimensions;
components = new LinkedList();
// obstacles = new LinkedList();
topoListeners = new LinkedList();
topoViews = new ArrayList();
socialViews = new ArrayList();
}
/*
* @Override public void addObstacle(Obstacle obstacle) {
* obstacles.add(obstacle); for (TopologyListener listener : topoListeners)
* { listener.addedObstacle(obstacle); } }
*/
@Override
public void addComponent(TopologyComponent comp) {
components.add(comp);
for (TopologyListener listener : topoListeners) {
listener.addedComponent(comp);
}
}
@Override
public void setWaypointModel(WaypointModel model) {
waypointModel = model;
for (TopologyListener listener : topoListeners) {
listener.changedWaypointModel(model);
}
}
@Override
public WaypointModel getWaypointModel() {
return waypointModel;
}
@Override
public void setObstacleModel(ObstacleModel model) {
obstacleModel = model;
for (TopologyListener listener : topoListeners) {
listener.changedObstacleModel(model);
}
}
@Override
public ObstacleModel getObstacleModel() {
return obstacleModel;
}
@Override
public void addTopologyListener(TopologyListener listener) {
if (!topoListeners.contains(listener)) {
topoListeners.add(listener);
for (TopologyComponent comp : components) {
listener.addedComponent(comp);
}
/*
* for (Obstacle obstacle : obstacles) {
* listener.addedObstacle(obstacle); }
*/
listener.changedWaypointModel(waypointModel);
listener.changedObstacleModel(obstacleModel);
}
}
@Override
public void removeTopologyListener(TopologyListener listener) {
topoListeners.remove(listener);
}
@Override
public void addTopologyView(TopologyView tView) {
topoViews.add(tView);
addTopologyListener(tView);
}
@Override
public TopologyView getTopologyView(PhyType phy) {
for (TopologyView view : topoViews) {
if (view.getPhyType() != null && view.getPhyType().equals(phy)) {
return view;
}
}
return null;
}
@Override
public PositionVector getWorldDimensions() {
return worldDimensions;
}
@Override
public void addSocialView(SocialView sView) {
socialViews.add(sView);
addTopologyListener(sView);
}
@Override
public SocialView getSocialView(String id) {
for (SocialView view : socialViews) {
if (view != null && view.getIdentifier().equals(id)) {
return view;
}
}
return null;
}
@Override
public void initializeSocial() {
if (!initializedSocial) {
for (SocialView view : socialViews) {
view.initialize();
// SocialViewComponentVis vis = new SocialViewComponentVis(view);
// VisualizationInjector.injectComponent(vis);
}
initializedSocial = true;
}
}
}