diff --git a/src/de/tud/kom/p2psim/api/energy/ComponentType.java b/src/de/tud/kom/p2psim/api/energy/ComponentType.java
index cd46a3a3b42dce293e840c0598cbf122d692feff..334b61742af4748fa6f3cd4ed6cf11d41dbb341c 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 a4523c1a5103d7c51db45383deb6794b650fdfc3..acef52375042087e452c87449d4c64ae15a85aba 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 961d54fd62d4b1f1f87f3c7f7c6e14903354af0b..59eae2e907a4d3b68ffb24ac96f6bfcc245487f9 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 0000000000000000000000000000000000000000..b52cf76fc3f3b47a674d889e9c58a8aa7becbb74
--- /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 dc094eaca165cd50091460c9137ab317f29cc84e..74a83486a3c5f4dd29f0534a7d22a69074e6de21 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 8781308e7ffae39a74ec2aaa0e8f71f1279f69fa..d9730004f2b0f7f21e9e7ebef1cbe5b6deb9ca13 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 f255acde728a71df3501ccb223c2565df46cea55..5cc658ab94d3ae56ad3260d547d6b7d408adf9b9 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 12d11fb8f1ceef3a2291f16be840597e1f23cbda..81451a936086e5d682cd322668be89a87b04af53 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 5d311b93e91dca43aebf3a57759dfd8895f9305f..80e790c11bd287d7711457bc8562a282d44eb057 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 2dfe5e1a3f255c2109b2563f5d564fb54dd52b40..baa284707bfee714ec917b730d0f6906d14effd1 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 6c14848bf34d1c0d313229191b410cf52f85e671..34bdfbe9e8a64b98a005fc1184d27cfec27abf4c 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 52fd18a152d0d43bdd5abcaa23e4bce1ce06af61..44f58549e85649bc29c2b820b5e54cc81da226f0 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 155bbb3bbfed656d87fd78372e86709c0f004dcd..06050b6e08f07d93ab2fcca6a44c7cc667ac0f9b 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 37374d304e082d9a9a0e8f8dd1b49e06de75cbef..b5e0168ae1b4378701349d4b8ee0a95bc72c9aa3 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 54b56ff1e55beb0dd3751a32fff335150af5e661..36b7b2c82a31b76575fc85de8ad61fffdc6a1bf0 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 0000000000000000000000000000000000000000..4efd54b5c4036fc493f426d077016c0bd1053d49
--- /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 3919f87808f6bcaa0c0de1142db3921f3e10b6e9..bd5421e1e1a1b55a19cfc392589e331bdcac1f01 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();