package test.rewolucja.energy.profile; import java.util.Arrays; import java.util.List; import schedframe.resources.PowerState; import test.rewolucja.energy.extension.EnergyExtension; import test.rewolucja.extensions.ExtensionType; import test.rewolucja.resources.ResourceStatus; import test.rewolucja.resources.physical.base.ComputingResource; import test.rewolucja.resources.physical.implementation.ComputingNode; public class ComputingNodePowerProfile extends AbstractPowerProfile{ protected ComputingNode computingNode; public ComputingNodePowerProfile(){ powerState = PowerState.ON; } public void visit(ComputingNode compNode){ computingNode = compNode; energyExtension = (EnergyExtension) computingNode.getExtensionList().getExtension(ExtensionType.ENERGY_EXTENSION); } public boolean setPowerState(PowerState state){ if(!supportPowerState(state)) return false; powerState = state; if(computingNode.getProcessors() != null) { for(ComputingResource child:computingNode.getProcessors()){ child.getPowerInterface().setPowerState(state); } } if(state == PowerState.OFF){ computingNode.setStatus(ResourceStatus.NOTAVAILABLE); } else if(state == PowerState.ON){ computingNode.setStatus(ResourceStatus.FREE); } return true; } public double getPowerConsumption(PowerState state) { if(powerState == PowerState.OFF) return 0; else if(powerState == PowerState.ON) return 750; else return 500; } public boolean supportPowerState(PowerState state) { switch(state){ case ON: return true; case OFF: return true; case SLEEP: return true; case HIBERNATE: return true; default: return false; } } public List getSupportedPowerStates() { return Arrays.asList(new PowerState[]{PowerState.ON, PowerState.OFF, PowerState.SLEEP, PowerState.HIBERNATE}); } public void turnOn(){ setPowerState(PowerState.ON); } public void turnOff(){ setPowerState(PowerState.OFF); } }