/* * 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 getCurrentEnergy() { 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 getMaximumEnergy() { 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); } }