/*
* 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;
import de.tud.kom.p2psim.api.energy.Battery;
import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
/**
* Internally, all Energy-Related values are calculated in uJ (10^-6). Only for
* the construction of batteries, the value is passed in J.
*
* @author Bjoern Richerzhagen, Fabio Zöllner
* @version 1.0, 24.04.2012
*/
public class SimpleBattery implements Battery {
protected final double capacity;
protected final double initialEnergy;
protected double currentEnergy;
/**
* Create a new battery with the given initial energy and total capacity in
* Joule (not uJ).
*
* @param capacity
* @param initalEnergy
*/
@XMLConfigurableConstructor({ "capacity", "initialEnergy" })
public SimpleBattery(double capacity, double initialEnergy) {
this.capacity = capacity * 1000000;
this.initialEnergy = initialEnergy * 1000000;
this.currentEnergy = initialEnergy * 1000000;
}
@Override
public double getCurrentPercentage() {
if (isEmpty()) {
return 0.0;
}
double percent = 100.0 * currentEnergy / capacity;
assert percent <= 100 && percent >= 0;
return percent;
}
@Override
public double getCurrentEnergyLevel() {
if (isEmpty()) {
return 0.0;
}
return currentEnergy;
}
@Override
public double getConsumedEnergy() {
return capacity - currentEnergy;
}
@Override
public void setToPercentage(double percentage) {
currentEnergy = (capacity / 100.0) * percentage;
}
@Override
public void consumeEnergy(double energy) {
if ( energy >= currentEnergy) {
currentEnergy = 0;
} else {
currentEnergy = currentEnergy - energy;
}
}
@Override
public boolean isEmpty() {
if(currentEnergy == 0)
return true;
return false;
}
@Override
public SimpleBattery clone() {
return new SimpleBattery(capacity / 1000000, initialEnergy / 1000000);
}
@Override
public double getMaximumEnergyLevel() {
return initialEnergy;
}
@Override
public boolean isFullyCharged() {
if(currentEnergy == initialEnergy) {
return true;
}
return false;
}
@Override
public Battery copy(double initialEnergy) {
return new SimpleBattery(capacity / 1000000, initialEnergy / 1000000);
}
}