package schedframe.resources.devices; import schedframe.Initializable; import schedframe.events.EventHandler; import schedframe.resources.Resource; import schedframe.resources.ResourceStatus; import schedframe.resources.ResourceType; import schedframe.resources.computing.ResourceCharacteristics; import schedframe.resources.computing.extensions.Extension; import schedframe.resources.computing.extensions.ExtensionList; import schedframe.resources.computing.extensions.ExtensionListImpl; import schedframe.resources.computing.extensions.ExtensionType; import schedframe.resources.computing.profiles.energy.EnergyExtension; import schedframe.resources.computing.profiles.energy.ResourceEvent; import schedframe.resources.computing.profiles.energy.airthroughput.ui.AirflowInterface; import schedframe.resources.computing.profiles.energy.power.ui.PowerInterface; import schedframe.resources.computing.profiles.energy.thermal.ui.ThermalInterface; import schedframe.resources.computing.profiles.load.LoadExtension; import schedframe.resources.computing.profiles.load.ui.LoadInterface; public abstract class PhysicalResource implements Resource, Initializable{ protected String name; protected ResourceType type; protected String category; protected ResourceStatus status; protected ResourceCharacteristics resourceCharacteristic; protected ExtensionList extensionList; public abstract void handleEvent(ResourceEvent event); public abstract EventHandler getEventHandler(); public String getName() { return name; } public ResourceType getType() { return type; } public String getCategory(){ return category; } public abstract void setStatus(ResourceStatus newStatus); public ResourceStatus getStatus() { return status; } private Extension getExtension(ExtensionType type){ if (extensionList != null) { for (Extension extension : extensionList) { if (extension.getType() == type) { return extension; } } } return null; } public PowerInterface getPowerInterface(){ Extension extension = getExtension(ExtensionType.ENERGY_EXTENSION); if(extension != null){ EnergyExtension ee = (EnergyExtension)extension; return ee.getPowerInterface(); } return null; } public AirflowInterface getAirflowInterface(){ Extension extension = getExtension(ExtensionType.ENERGY_EXTENSION); if(extension != null){ EnergyExtension ee = (EnergyExtension)extension; return ee.getAirflowInterface(); } return null; } public ThermalInterface getThermalInterface(){ Extension extension = getExtension(ExtensionType.ENERGY_EXTENSION); if(extension != null){ EnergyExtension ee = (EnergyExtension)extension; return ee.getThermalInterface(); } return null; } public LoadInterface getLoadInterface(){ Extension extension = getExtension(ExtensionType.LOAD_EXTENSION); if(extension != null){ LoadExtension le = (LoadExtension)extension; return le.getLoadInterface(); } return null; } public ExtensionList getExtensionList() { if(extensionList == null){ return new ExtensionListImpl(0); } return extensionList; } protected void accept(Extension e){ extensionList.add(e); } public ResourceCharacteristics getResourceCharacteristic() { return resourceCharacteristic; } }