From 1de811e31374b6b189a4d121723e32684a91db3d Mon Sep 17 00:00:00 2001 From: Julian Zobel Date: Fri, 7 Sep 2018 14:28:56 +0200 Subject: [PATCH] Moved energy models and components into their own packages, this is more convenient w/ a better overview --- .../kom/p2psim/api/energy/ComponentType.java | 6 +- .../kom/p2psim/api/energy/EnergyModel.java | 2 +- .../impl/energy/EnergyModelFactory.java | 1 + .../components/ActuatorEnergyComponent.java | 110 +++++++++++ .../OneStateEnergyComponent.java | 3 +- ...eCellularCommunicationEnergyComponent.java | 3 +- ...martphoneCommunicationEnergyComponent.java | 3 +- .../StateEnergyCommunicationComponent.java | 3 +- .../StatelessCommunicationComponent.java | 4 +- .../configs/BasicEnergyConsumptionConfig.java | 2 +- .../energy/configs/CellularTimeBased.java | 2 +- .../impl/energy/configs/MessageBased.java | 2 +- .../configs/NexusOneWirelessConfig.java | 2 +- .../p2psim/impl/energy/configs/TimeBased.java | 2 +- .../impl/energy/configs/WifiBCM4329Chip.java | 2 +- .../energy/models/AbstractEnergyModel.java | 187 ++++++++++++++++++ .../{ => models}/ModularEnergyModel.java | 85 +------- 17 files changed, 330 insertions(+), 89 deletions(-) create mode 100644 src/de/tud/kom/p2psim/impl/energy/components/ActuatorEnergyComponent.java rename src/de/tud/kom/p2psim/impl/energy/{ => components}/OneStateEnergyComponent.java (96%) rename src/de/tud/kom/p2psim/impl/energy/{ => components}/SmartphoneCellularCommunicationEnergyComponent.java (98%) rename src/de/tud/kom/p2psim/impl/energy/{ => components}/SmartphoneCommunicationEnergyComponent.java (98%) rename src/de/tud/kom/p2psim/impl/energy/{ => components}/StateEnergyCommunicationComponent.java (97%) rename src/de/tud/kom/p2psim/impl/energy/{ => components}/StatelessCommunicationComponent.java (97%) create mode 100644 src/de/tud/kom/p2psim/impl/energy/models/AbstractEnergyModel.java rename src/de/tud/kom/p2psim/impl/energy/{ => models}/ModularEnergyModel.java (75%) diff --git a/src/de/tud/kom/p2psim/api/energy/ComponentType.java b/src/de/tud/kom/p2psim/api/energy/ComponentType.java index cd46a3a3..334b6174 100644 --- a/src/de/tud/kom/p2psim/api/energy/ComponentType.java +++ b/src/de/tud/kom/p2psim/api/energy/ComponentType.java @@ -52,6 +52,10 @@ public enum ComponentType { /** * Other components which consume energy */ - BASIC + BASIC, + /** + * Actuators, Motors, Rotors + */ + ACTUATOR } diff --git a/src/de/tud/kom/p2psim/api/energy/EnergyModel.java b/src/de/tud/kom/p2psim/api/energy/EnergyModel.java index a4523c1a..acef5237 100644 --- a/src/de/tud/kom/p2psim/api/energy/EnergyModel.java +++ b/src/de/tud/kom/p2psim/api/energy/EnergyModel.java @@ -55,7 +55,7 @@ public interface EnergyModel extends SimHostComponent { * * @return */ - public EnergyInfo getInfo(); + public EnergyInfo getEnergyInfo(); /** * Save some casting and use this method to return all components of the diff --git a/src/de/tud/kom/p2psim/impl/energy/EnergyModelFactory.java b/src/de/tud/kom/p2psim/impl/energy/EnergyModelFactory.java index 961d54fd..59eae2e9 100644 --- a/src/de/tud/kom/p2psim/impl/energy/EnergyModelFactory.java +++ b/src/de/tud/kom/p2psim/impl/energy/EnergyModelFactory.java @@ -28,6 +28,7 @@ import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.energy.EnergyConfiguration; import de.tud.kom.p2psim.api.energy.EnergyModel; import de.tud.kom.p2psim.api.scenario.ConfigurationException; +import de.tud.kom.p2psim.impl.energy.models.ModularEnergyModel; import de.tudarmstadt.maki.simonstrator.api.Host; import de.tudarmstadt.maki.simonstrator.api.Monitor; import de.tudarmstadt.maki.simonstrator.api.Monitor.Level; diff --git a/src/de/tud/kom/p2psim/impl/energy/components/ActuatorEnergyComponent.java b/src/de/tud/kom/p2psim/impl/energy/components/ActuatorEnergyComponent.java new file mode 100644 index 00000000..b52cf76f --- /dev/null +++ b/src/de/tud/kom/p2psim/impl/energy/components/ActuatorEnergyComponent.java @@ -0,0 +1,110 @@ +/* + * 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.energy.components; + +import de.tud.kom.p2psim.api.energy.ComponentType; +import de.tud.kom.p2psim.api.energy.EnergyComponent; +import de.tud.kom.p2psim.api.energy.EnergyEventListener; +import de.tud.kom.p2psim.api.energy.EnergyState; +import de.tud.kom.p2psim.impl.energy.DefaultEnergyState; +import de.tudarmstadt.maki.simonstrator.api.Time; + + +public class ActuatorEnergyComponent implements EnergyComponent { + + /** + * States supported by this energy component + * + * TODO More states reflecting a more accurate energy consumption? + */ + public final EnergyState OFF, HOVER, FLY; + + private EnergyState currentState; + + private EnergyEventListener energyModel; + + private long lastStateChange; + + public ActuatorEnergyComponent(int numberOfActuators, double volt, double hoverAmp, double flyAmp) { + OFF = new DefaultEnergyState("OFF", 0); + HOVER = new DefaultEnergyState("HOVER", numberOfActuators * (hoverAmp * volt) * 1000000); + FLY = new DefaultEnergyState("FLY", numberOfActuators * (flyAmp * volt) * 1000000); + + this.currentState = OFF; + this.lastStateChange = Time.getCurrentTime(); + } + + public void doStateChange(EnergyState newState) { + + // FIXME TODO + long timeSpentInState = Time.getCurrentTime() - lastStateChange; + + energyModel.switchedState(this, currentState, newState, + timeSpentInState); + currentState = newState; + lastStateChange = Time.getCurrentTime(); + + } + + @Override + public void eventOccurred(Object content, int type) { + // TODO Auto-generated method stub + + } + + @Override + public ComponentType getType() { + return ComponentType.ACTUATOR; + } + + @Override + public void turnOff() { + if(!currentState.equals(OFF)) { + doStateChange(OFF); + } + } + + @Override + public boolean turnOn() { + // TODO + return false; + } + + public boolean isAvailable() { + // TODO + return false; + } + + @Override + public boolean isOn() { + // TODO + return false; + } + + @Override + public void setEnergyEventListener(EnergyEventListener listener) { + energyModel = listener; + } + + public EnergyState getCurrentState() { + return currentState; + } +} diff --git a/src/de/tud/kom/p2psim/impl/energy/OneStateEnergyComponent.java b/src/de/tud/kom/p2psim/impl/energy/components/OneStateEnergyComponent.java similarity index 96% rename from src/de/tud/kom/p2psim/impl/energy/OneStateEnergyComponent.java rename to src/de/tud/kom/p2psim/impl/energy/components/OneStateEnergyComponent.java index dc094eac..74a83486 100644 --- a/src/de/tud/kom/p2psim/impl/energy/OneStateEnergyComponent.java +++ b/src/de/tud/kom/p2psim/impl/energy/components/OneStateEnergyComponent.java @@ -18,11 +18,12 @@ * */ -package de.tud.kom.p2psim.impl.energy; +package de.tud.kom.p2psim.impl.energy.components; import de.tud.kom.p2psim.api.energy.ComponentType; import de.tud.kom.p2psim.api.energy.EnergyComponent; import de.tud.kom.p2psim.api.energy.EnergyEventListener; +import de.tud.kom.p2psim.impl.energy.DefaultEnergyState; import de.tudarmstadt.maki.simonstrator.api.Event; import de.tudarmstadt.maki.simonstrator.api.Time; diff --git a/src/de/tud/kom/p2psim/impl/energy/SmartphoneCellularCommunicationEnergyComponent.java b/src/de/tud/kom/p2psim/impl/energy/components/SmartphoneCellularCommunicationEnergyComponent.java similarity index 98% rename from src/de/tud/kom/p2psim/impl/energy/SmartphoneCellularCommunicationEnergyComponent.java rename to src/de/tud/kom/p2psim/impl/energy/components/SmartphoneCellularCommunicationEnergyComponent.java index 8781308e..d9730004 100644 --- a/src/de/tud/kom/p2psim/impl/energy/SmartphoneCellularCommunicationEnergyComponent.java +++ b/src/de/tud/kom/p2psim/impl/energy/components/SmartphoneCellularCommunicationEnergyComponent.java @@ -18,7 +18,7 @@ * */ -package de.tud.kom.p2psim.impl.energy; +package de.tud.kom.p2psim.impl.energy.components; import de.tud.kom.p2psim.api.energy.ComponentType; import de.tud.kom.p2psim.api.energy.EnergyCommunicationComponent; @@ -26,6 +26,7 @@ import de.tud.kom.p2psim.api.energy.EnergyEventListener; import de.tud.kom.p2psim.api.energy.EnergyModel; import de.tud.kom.p2psim.api.energy.EnergyState; import de.tud.kom.p2psim.api.linklayer.mac.PhyType; +import de.tud.kom.p2psim.impl.energy.DefaultEnergyState; import de.tud.kom.p2psim.impl.simengine.Simulator; import de.tudarmstadt.maki.simonstrator.api.Message; import de.tudarmstadt.maki.simonstrator.api.Monitor; diff --git a/src/de/tud/kom/p2psim/impl/energy/SmartphoneCommunicationEnergyComponent.java b/src/de/tud/kom/p2psim/impl/energy/components/SmartphoneCommunicationEnergyComponent.java similarity index 98% rename from src/de/tud/kom/p2psim/impl/energy/SmartphoneCommunicationEnergyComponent.java rename to src/de/tud/kom/p2psim/impl/energy/components/SmartphoneCommunicationEnergyComponent.java index f255acde..5cc658ab 100644 --- a/src/de/tud/kom/p2psim/impl/energy/SmartphoneCommunicationEnergyComponent.java +++ b/src/de/tud/kom/p2psim/impl/energy/components/SmartphoneCommunicationEnergyComponent.java @@ -18,7 +18,7 @@ * */ -package de.tud.kom.p2psim.impl.energy; +package de.tud.kom.p2psim.impl.energy.components; import de.tud.kom.p2psim.api.energy.ComponentType; import de.tud.kom.p2psim.api.energy.EnergyCommunicationComponent; @@ -26,6 +26,7 @@ import de.tud.kom.p2psim.api.energy.EnergyEventListener; import de.tud.kom.p2psim.api.energy.EnergyModel; import de.tud.kom.p2psim.api.energy.EnergyState; import de.tud.kom.p2psim.api.linklayer.mac.PhyType; +import de.tud.kom.p2psim.impl.energy.DefaultEnergyState; import de.tud.kom.p2psim.impl.simengine.Simulator; import de.tudarmstadt.maki.simonstrator.api.Message; import de.tudarmstadt.maki.simonstrator.api.Monitor; diff --git a/src/de/tud/kom/p2psim/impl/energy/StateEnergyCommunicationComponent.java b/src/de/tud/kom/p2psim/impl/energy/components/StateEnergyCommunicationComponent.java similarity index 97% rename from src/de/tud/kom/p2psim/impl/energy/StateEnergyCommunicationComponent.java rename to src/de/tud/kom/p2psim/impl/energy/components/StateEnergyCommunicationComponent.java index 12d11fb8..81451a93 100644 --- a/src/de/tud/kom/p2psim/impl/energy/StateEnergyCommunicationComponent.java +++ b/src/de/tud/kom/p2psim/impl/energy/components/StateEnergyCommunicationComponent.java @@ -18,13 +18,14 @@ * */ -package de.tud.kom.p2psim.impl.energy; +package de.tud.kom.p2psim.impl.energy.components; import de.tud.kom.p2psim.api.energy.ComponentType; import de.tud.kom.p2psim.api.energy.EnergyCommunicationComponent; import de.tud.kom.p2psim.api.energy.EnergyEventListener; import de.tud.kom.p2psim.api.energy.EnergyState; import de.tud.kom.p2psim.api.linklayer.mac.PhyType; +import de.tud.kom.p2psim.impl.energy.DefaultEnergyState; import de.tudarmstadt.maki.simonstrator.api.Message; import de.tudarmstadt.maki.simonstrator.api.Time; diff --git a/src/de/tud/kom/p2psim/impl/energy/StatelessCommunicationComponent.java b/src/de/tud/kom/p2psim/impl/energy/components/StatelessCommunicationComponent.java similarity index 97% rename from src/de/tud/kom/p2psim/impl/energy/StatelessCommunicationComponent.java rename to src/de/tud/kom/p2psim/impl/energy/components/StatelessCommunicationComponent.java index 5d311b93..80e790c1 100644 --- a/src/de/tud/kom/p2psim/impl/energy/StatelessCommunicationComponent.java +++ b/src/de/tud/kom/p2psim/impl/energy/components/StatelessCommunicationComponent.java @@ -18,13 +18,15 @@ * */ -package de.tud.kom.p2psim.impl.energy; +package de.tud.kom.p2psim.impl.energy.components; import de.tud.kom.p2psim.api.energy.ComponentType; import de.tud.kom.p2psim.api.energy.EnergyCommunicationComponent; import de.tud.kom.p2psim.api.energy.EnergyEventListener; import de.tud.kom.p2psim.api.energy.EnergyState; import de.tud.kom.p2psim.api.linklayer.mac.PhyType; +import de.tud.kom.p2psim.impl.energy.DefaultEnergyState; +import de.tud.kom.p2psim.impl.energy.models.ModularEnergyModel; import de.tudarmstadt.maki.simonstrator.api.Message; import de.tudarmstadt.maki.simonstrator.api.Time; diff --git a/src/de/tud/kom/p2psim/impl/energy/configs/BasicEnergyConsumptionConfig.java b/src/de/tud/kom/p2psim/impl/energy/configs/BasicEnergyConsumptionConfig.java index 2dfe5e1a..baa28470 100644 --- a/src/de/tud/kom/p2psim/impl/energy/configs/BasicEnergyConsumptionConfig.java +++ b/src/de/tud/kom/p2psim/impl/energy/configs/BasicEnergyConsumptionConfig.java @@ -23,7 +23,7 @@ package de.tud.kom.p2psim.impl.energy.configs; import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.energy.ComponentType; import de.tud.kom.p2psim.api.energy.EnergyConfiguration; -import de.tud.kom.p2psim.impl.energy.OneStateEnergyComponent; +import de.tud.kom.p2psim.impl.energy.components.OneStateEnergyComponent; /** * This class creates an Energy Component for basic Energy Consumption. It diff --git a/src/de/tud/kom/p2psim/impl/energy/configs/CellularTimeBased.java b/src/de/tud/kom/p2psim/impl/energy/configs/CellularTimeBased.java index 6c14848b..34bdfbe9 100644 --- a/src/de/tud/kom/p2psim/impl/energy/configs/CellularTimeBased.java +++ b/src/de/tud/kom/p2psim/impl/energy/configs/CellularTimeBased.java @@ -23,7 +23,7 @@ package de.tud.kom.p2psim.impl.energy.configs; import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.energy.EnergyConfiguration; import de.tud.kom.p2psim.api.linklayer.mac.PhyType; -import de.tud.kom.p2psim.impl.energy.SmartphoneCellularCommunicationEnergyComponent; +import de.tud.kom.p2psim.impl.energy.components.SmartphoneCellularCommunicationEnergyComponent; public class CellularTimeBased implements EnergyConfiguration { diff --git a/src/de/tud/kom/p2psim/impl/energy/configs/MessageBased.java b/src/de/tud/kom/p2psim/impl/energy/configs/MessageBased.java index 52fd18a1..44f58549 100644 --- a/src/de/tud/kom/p2psim/impl/energy/configs/MessageBased.java +++ b/src/de/tud/kom/p2psim/impl/energy/configs/MessageBased.java @@ -24,7 +24,7 @@ import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.energy.EnergyCommunicationComponent; import de.tud.kom.p2psim.api.energy.EnergyConfiguration; import de.tud.kom.p2psim.api.linklayer.mac.PhyType; -import de.tud.kom.p2psim.impl.energy.StatelessCommunicationComponent; +import de.tud.kom.p2psim.impl.energy.components.StatelessCommunicationComponent; /** * This is a Message-Based {@link EnergyCommunicationComponent}-creating diff --git a/src/de/tud/kom/p2psim/impl/energy/configs/NexusOneWirelessConfig.java b/src/de/tud/kom/p2psim/impl/energy/configs/NexusOneWirelessConfig.java index 155bbb3b..06050b6e 100644 --- a/src/de/tud/kom/p2psim/impl/energy/configs/NexusOneWirelessConfig.java +++ b/src/de/tud/kom/p2psim/impl/energy/configs/NexusOneWirelessConfig.java @@ -23,7 +23,7 @@ package de.tud.kom.p2psim.impl.energy.configs; import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.energy.EnergyConfiguration; import de.tud.kom.p2psim.api.linklayer.mac.PhyType; -import de.tud.kom.p2psim.impl.energy.StateEnergyCommunicationComponent; +import de.tud.kom.p2psim.impl.energy.components.StateEnergyCommunicationComponent; /** * This class contains the measured values from the Nexus One in the AdHoc Mode. diff --git a/src/de/tud/kom/p2psim/impl/energy/configs/TimeBased.java b/src/de/tud/kom/p2psim/impl/energy/configs/TimeBased.java index 37374d30..b5e0168a 100644 --- a/src/de/tud/kom/p2psim/impl/energy/configs/TimeBased.java +++ b/src/de/tud/kom/p2psim/impl/energy/configs/TimeBased.java @@ -23,7 +23,7 @@ package de.tud.kom.p2psim.impl.energy.configs; import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.energy.EnergyConfiguration; import de.tud.kom.p2psim.api.linklayer.mac.PhyType; -import de.tud.kom.p2psim.impl.energy.SmartphoneCommunicationEnergyComponent; +import de.tud.kom.p2psim.impl.energy.components.SmartphoneCommunicationEnergyComponent; public class TimeBased implements EnergyConfiguration { diff --git a/src/de/tud/kom/p2psim/impl/energy/configs/WifiBCM4329Chip.java b/src/de/tud/kom/p2psim/impl/energy/configs/WifiBCM4329Chip.java index 54b56ff1..36b7b2c8 100644 --- a/src/de/tud/kom/p2psim/impl/energy/configs/WifiBCM4329Chip.java +++ b/src/de/tud/kom/p2psim/impl/energy/configs/WifiBCM4329Chip.java @@ -23,7 +23,7 @@ package de.tud.kom.p2psim.impl.energy.configs; import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.energy.EnergyConfiguration; import de.tud.kom.p2psim.api.linklayer.mac.PhyType; -import de.tud.kom.p2psim.impl.energy.StateEnergyCommunicationComponent; +import de.tud.kom.p2psim.impl.energy.components.StateEnergyCommunicationComponent; /** * This class is a configuration for the diff --git a/src/de/tud/kom/p2psim/impl/energy/models/AbstractEnergyModel.java b/src/de/tud/kom/p2psim/impl/energy/models/AbstractEnergyModel.java new file mode 100644 index 00000000..4efd54b5 --- /dev/null +++ b/src/de/tud/kom/p2psim/impl/energy/models/AbstractEnergyModel.java @@ -0,0 +1,187 @@ +/* + * 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.energy.models; + +import java.util.List; +import java.util.Set; +import java.util.Vector; + +import de.tud.kom.p2psim.api.common.SimHost; +import de.tud.kom.p2psim.api.energy.ComponentType; +import de.tud.kom.p2psim.api.energy.EnergyComponent; +import de.tud.kom.p2psim.api.energy.EnergyInfo; +import de.tud.kom.p2psim.api.energy.EnergyModel; +import de.tud.kom.p2psim.impl.energy.Battery; +import de.tudarmstadt.maki.simonstrator.api.common.graph.INodeID; +import de.tudarmstadt.maki.simonstrator.api.component.ComponentNotAvailableException; +import de.tudarmstadt.maki.simonstrator.api.component.sensor.battery.BatterySensor; +import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSComponent; +import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSDataCallback; +import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInfoProperties; +import de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInformationProvider.SiSProviderHandle; +import de.tudarmstadt.maki.simonstrator.api.component.sis.exception.InformationNotAvailableException; +import de.tudarmstadt.maki.simonstrator.api.component.sis.type.SiSTypes; + +public abstract class AbstractEnergyModel implements EnergyModel, BatterySensor, EnergyInfo { + + protected SimHost host; + protected List energyComponents; + protected Battery bat; + + + public AbstractEnergyModel(SimHost host, Battery bat) { + energyComponents = new Vector(); + this.bat = bat; + this.host = host; + } + + @Override + public void initialize() { + // + try { + SiSComponent sis = host.getComponent(SiSComponent.class); + sis.provide().nodeState(SiSTypes.ENERGY_BATTERY_LEVEL, + new SiSDataCallback() { + + Set localID = INodeID.getSingleIDSet(getHost() + .getId()); + + @Override + public Double getValue(INodeID nodeID, + SiSProviderHandle providerHandle) + throws InformationNotAvailableException { + if (nodeID.equals(getHost().getId())) { + return getCurrentPercentage(); + } else { + throw new InformationNotAvailableException(); + } + } + + @Override + public Set getObservedNodes() { + return localID; + } + + @Override + public SiSInfoProperties getInfoProperties() { + return new SiSInfoProperties(); + } + }); + + sis.provide().nodeState(SiSTypes.ENERGY_BATTERY_CAPACITY, + new SiSDataCallback() { + + Set localID = INodeID.getSingleIDSet(getHost() + .getId()); + + @Override + public Double getValue(INodeID nodeID, + SiSProviderHandle providerHandle) + throws InformationNotAvailableException { + if (nodeID.equals(getHost().getId())) { + return getCurrentEnergyLevel(); + } else { + throw new InformationNotAvailableException(); + } + } + + @Override + public Set getObservedNodes() { + return localID; + } + + @Override + public SiSInfoProperties getInfoProperties() { + return new SiSInfoProperties(); + } + }); + } catch (ComponentNotAvailableException e) { + // OK + } + } + + @Override + public List getComponents( + ComponentType type, Class componentClass) { + List componentsOfType = new Vector(); + for (EnergyComponent energyComponent : energyComponents) { + if (energyComponent.getType().equals(type) + && componentClass.isInstance(energyComponent)) { + componentsOfType.add(componentClass.cast(energyComponent)); + } + } + return componentsOfType; + } + + @Override + public T getComponent(ComponentType type, + Class componentClass) { + for (EnergyComponent energyComponent : energyComponents) { + if (energyComponent.getType().equals(type) + && componentClass.isInstance(energyComponent)) { + return componentClass.cast(energyComponent); + } + } + return null; + } + + @Override + public EnergyInfo getEnergyInfo() { + /* + * We export our status to interested applications via this interface + */ + return this; + } + + @Override + public Battery getBattery() { + return bat; + } + + @Override + public double getCurrentPercentage() { + return bat.getCurrentPercentage(); + } + + @Override + public double getCurrentEnergyLevel() { + return bat.getCurrentEnergyLevel(); + } + + @Override + public SimHost getHost() { + return host; + } + + @Override + public void shutdown() { + throw new AssertionError( + "You are not supposed to shutdown this component."); + } + + @Override + public void reset() { + throw new AssertionError( + "You are not supposed to reset this component."); + } + + +} diff --git a/src/de/tud/kom/p2psim/impl/energy/ModularEnergyModel.java b/src/de/tud/kom/p2psim/impl/energy/models/ModularEnergyModel.java similarity index 75% rename from src/de/tud/kom/p2psim/impl/energy/ModularEnergyModel.java rename to src/de/tud/kom/p2psim/impl/energy/models/ModularEnergyModel.java index 3919f878..bd5421e1 100644 --- a/src/de/tud/kom/p2psim/impl/energy/ModularEnergyModel.java +++ b/src/de/tud/kom/p2psim/impl/energy/models/ModularEnergyModel.java @@ -18,12 +18,14 @@ * */ -package de.tud.kom.p2psim.impl.energy; +package de.tud.kom.p2psim.impl.energy.models; import java.util.List; import java.util.Set; import java.util.Vector; +import org.joda.time.chrono.JulianChronology; + import de.tud.kom.p2psim.api.analyzer.EnergyAnalyzer; import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.energy.ComponentType; @@ -33,6 +35,7 @@ import de.tud.kom.p2psim.api.energy.EnergyInfo; import de.tud.kom.p2psim.api.energy.EnergyModel; import de.tud.kom.p2psim.api.energy.EnergyState; import de.tud.kom.p2psim.api.network.SimNetInterface; +import de.tud.kom.p2psim.impl.energy.Battery; import de.tudarmstadt.maki.simonstrator.api.Monitor; import de.tudarmstadt.maki.simonstrator.api.Time; import de.tudarmstadt.maki.simonstrator.api.common.graph.INodeID; @@ -52,25 +55,14 @@ import de.tudarmstadt.maki.simonstrator.api.component.sis.type.SiSTypes; * old EnergyModels these are Host components, ie. there is one instance * for each host. * - * @author Bjoern Richerzhagen - * @version 1.0, 27.02.2012 + * @author Bjoern Richerzhagen, Julian Zobel + * @version 2.0, 07.09.2018 */ -public class ModularEnergyModel implements EnergyModel, EnergyEventListener, - EnergyInfo, BatterySensor { - - // private static Logger log = - // SimLogger.getLogger(ModularEnergyModel.class); - - private SimHost host; +public class ModularEnergyModel extends AbstractEnergyModel implements EnergyEventListener { - private List energyComponents; - - private Battery bat; public ModularEnergyModel(SimHost host, Battery bat) { - energyComponents = new Vector(); - this.bat = bat; - this.host = host; + super(host, bat); } @Override @@ -138,60 +130,6 @@ public class ModularEnergyModel implements EnergyModel, EnergyEventListener, } } - @Override - public void shutdown() { - throw new AssertionError( - "You are not supposed to shutdown this component."); - } - - @Override - public List getComponents( - ComponentType type, Class componentClass) { - List componentsOfType = new Vector(); - for (EnergyComponent energyComponent : energyComponents) { - if (energyComponent.getType().equals(type) - && componentClass.isInstance(energyComponent)) { - componentsOfType.add(componentClass.cast(energyComponent)); - } - } - return componentsOfType; - } - - @Override - public T getComponent(ComponentType type, - Class componentClass) { - for (EnergyComponent energyComponent : energyComponents) { - if (energyComponent.getType().equals(type) - && componentClass.isInstance(energyComponent)) { - return componentClass.cast(energyComponent); - } - } - return null; - } - - @Override - public EnergyInfo getInfo() { - /* - * We export our status to interested applications via this interface - */ - return this; - } - - @Override - public Battery getBattery() { - return bat; - } - - @Override - public double getCurrentPercentage() { - return bat.getCurrentPercentage(); - } - - @Override - public double getCurrentEnergyLevel() { - return bat.getCurrentEnergyLevel(); - } - @Override public void registerComponent(EnergyComponent comp) { comp.setEnergyEventListener(this); @@ -242,12 +180,7 @@ public class ModularEnergyModel implements EnergyModel, EnergyEventListener, public boolean turnOn(EnergyComponent component) { return !bat.isEmpty(); } - - @Override - public SimHost getHost() { - return host; - } - + @Override public void reset() { bat.reset(); -- GitLab