DefaultTopologyComponent.java 4.35 KB
Newer Older
1
2
3
4
/*
 * Copyright (c) 2005-2010 KOM – Multimedia Communications Lab
 *
 * This file is part of PeerfactSim.KOM.
5
 *
6
7
8
9
 * 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.
10
 *
11
12
13
14
 * 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.
15
 *
16
17
18
19
20
 * You should have received a copy of the GNU General Public License
 * along with PeerfactSim.KOM.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

21
package de.tud.kom.p2psim.impl.topology.component;
22
23
24
25
26
27
28
29

import java.util.Random;
import java.util.Set;

import de.tud.kom.p2psim.api.common.HostProperties;
import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.api.topology.Topology;
import de.tud.kom.p2psim.api.topology.TopologyComponent;
30
import de.tud.kom.p2psim.api.topology.movement.MovementModel;
31
32
import de.tud.kom.p2psim.api.topology.placement.PlacementModel;
import de.tudarmstadt.maki.simonstrator.api.Randoms;
33
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.IAttractionPoint;
34
35


36
37
38

/**
 * Default implementation of a {@link TopologyComponent}.
39
 *
40
41
 * @author Bjoern Richerzhagen, Julian Zobel
 * @version 2.0, 05.09.2018
42
 */
43
public class DefaultTopologyComponent extends AbstractTopologyComponent {
44

45
	protected static Random rnd = Randoms.getRandom(DefaultTopologyComponent.class);
46

47
	private double currentMovementSpeed = -1;
48

49
	/**
50
	 * Create a TopologyComponent for the current host.
51
	 *
52
53
54
	 * @param host
	 * @param topology
	 * @param movementModel
55
56
	 */
	public DefaultTopologyComponent(SimHost host, Topology topology,
57
			MovementModel movementModel, PlacementModel placementModel, boolean registerAsInformationProviderInSiS) {
58
		super(host, topology, movementModel, placementModel, registerAsInformationProviderInSiS);		
59
60
61
62
	}

	@Override
	public void initialize() {
63
		super.initialize();
64
	}
65
66
67

	@Override
	public double getMinMovementSpeed() {
68
69
70
71
72
73
74
75
76
		try {
			return movementModel.getMovementSpeedDistribution().getMinSpeed();
		}
		catch (UnsupportedOperationException e) {
			// FIXME should not be used in the future anymore
			// fallback
			HostProperties properties = getHost().getProperties();			
			return properties.getMinMovementSpeed();
		}
77
78
79
	}

	@Override
80
81
82
83
84
85
86
87
88
89
	public double getMaxMovementSpeed() {		
		try {
			return movementModel.getMovementSpeedDistribution().getMaxSpeed();
		}
		catch (UnsupportedOperationException e) {
			// FIXME should not be used in the future anymore
			// fallback
			HostProperties properties = getHost().getProperties();			
			return properties.getMaxMovementSpeed();
		}	
90
	}
91

92
93
94
95
96
	private void calcRandomMovementSpeed() {
		double min_speed = getMinMovementSpeed();
		double max_speed = getMaxMovementSpeed();

		double value = rnd.nextDouble();
97
98
		this.currentMovementSpeed = (value * (max_speed - min_speed))
				+ min_speed;
99
	}
100
101
102

	@Override
	public double getMovementSpeed() {
103
104
105
106
107
		
		try {
			if (currentMovementSpeed == -1) {
				this.currentMovementSpeed  = movementModel.getMovementSpeedDistribution().calculateSpeed();				
			}
108
		}
109
110
111
112
113
114
		catch (UnsupportedOperationException e) {
			if (currentMovementSpeed == -1) {
				calcRandomMovementSpeed();
			}
		}		
		
115
116
		return this.currentMovementSpeed;
	}
117

118
119
120
	@Override
	public void setMovementSpeed(double speed) {
		this.currentMovementSpeed = speed;
121
	}
122
	
123
	@Override
124
	public void setTargetAttractionPoint(IAttractionPoint targetAttractionPoint)
125
126
127
			throws UnsupportedOperationException {
		movementModel.changeTargetLocation(this, targetAttractionPoint);
	}
128

129
	@Override
130
	public IAttractionPoint getCurrentTargetAttractionPoint() {
131
132
		return movementModel.getTargetLocation(this);
	}
133

134
	@Override
135
	public Set<IAttractionPoint> getAllAttractionPoints() {
136
		return movementModel.getAllAttractionPoints();
137
	}	
138
139
	
	
140
	public static class Factory implements TopologyComponentFactory {
141
				
142
143
144
145
146
147
148
149
150
		@Override
		public TopologyComponent createTopologyComponent(SimHost host,
				Topology topology, MovementModel movementModel,
				PlacementModel placementModel,
				boolean registerAsInformationProviderInSiS) {
			return new DefaultTopologyComponent(host, topology, movementModel, placementModel, registerAsInformationProviderInSiS);
		}
		
	}
151
}