package ui.controller; import classes.StorageElement; import java.util.ArrayList; import java.util.Collections; public class StorageProductionController { private ArrayList storages; private float energyRequiredForPowerplantBlackstart; public StorageProductionController(ArrayList storages, float energyRequiredForPowerplantBlackstart) { this.storages = storages; this.energyRequiredForPowerplantBlackstart = energyRequiredForPowerplantBlackstart; } public float currentPossibleStorageProduction() { float possibleEnergy = 0; for (StorageElement so : storages) { possibleEnergy += so.getPossibleProduction(energyRequiredForPowerplantBlackstart); } return possibleEnergy; } // public float currentStorageProduction() { // float producedEnergy = 0; // for (StorageElement ele : storages) { // if (ele.getStatus().equals(StorageElement.Mode.EMIT)) { // // needed to no emit more than what is available // if(ele.getStateOfCharge() - ele.getEnergyPerElement() < 0){ // ele.setEnergyPerElement(ele.getStateOfCharge()); // } // producedEnergy += ele.getEnergyPerElement(); // } // } // return producedEnergy; // } public void enableStorageDischarging(final float energyNeeded) { Collections.sort(storages, Collections.reverseOrder()); System.out.println("energy needed from storage" + energyNeeded); int storagesLeft = storages.size(); float energyLeftToEnabled = energyNeeded; for (StorageElement se: storages) { if(!se.chargeDepleted()){ energyLeftToEnabled = energyLeftToEnabled - se.setStatusAndSetEnergy(StorageElement.Mode.EMIT, energyLeftToEnabled / storagesLeft, energyRequiredForPowerplantBlackstart); } storagesLeft = storagesLeft - 1; if(energyLeftToEnabled <= 0){ System.out.println("enabled energy from storage"); return; } } } public void setAllStorageToStandy() { for (StorageElement se : storages) { se.setStatusAndSetEnergy(StorageElement.Mode.STANDBY, 0, energyRequiredForPowerplantBlackstart); } } //TODO: selbe probleme wie discharging void enableStorageCharging(float energyAvailable){ Collections.sort(storages); System.out.println("energy available to storage" + energyAvailable); float availableEnergyLeft = energyAvailable; for (StorageElement se: storages) { if(!se.fullyCharged()){ availableEnergyLeft = availableEnergyLeft - se.setStatusAndSetEnergy(StorageElement.Mode.COLLECT, availableEnergyLeft, energyRequiredForPowerplantBlackstart); } if(availableEnergyLeft <= 0){ System.out.println("storage charging"); return; } } } }