package schedframe.resources.devices; import schedframe.events.Event; import schedframe.events.EventHandler; import schedframe.events.ResourceEventCommand; import schedframe.events.scheduling.EventReason; import schedframe.events.scheduling.SchedulingEvent; import schedframe.resources.ResourceStatus; import schedframe.resources.computing.ComputingResource; import schedframe.resources.computing.ResourceCharacteristics; import schedframe.resources.computing.extensions.Extension; import schedframe.resources.computing.extensions.ExtensionListImpl; import schedframe.resources.computing.profiles.energy.EnergyEvent; import schedframe.resources.computing.profiles.energy.EnergyEventType; import schedframe.resources.computing.profiles.energy.EnergyExtension; import schedframe.resources.devices.description.DeviceDescription; public class Device extends PhysicalResource{ private ComputingResource compResource; public Device (DeviceDescription devDesc){ this.type = devDesc.getType(); this.name = devDesc.getId(); this.extensionList = new ExtensionListImpl(1); initCharacteristics(devDesc); accept(new EnergyExtension.Builder().resource(this).powerProfile(devDesc.getPowerProfile()).airFlowProfile(devDesc.getAirThroughputProfile()).thermalProfile(devDesc.getThermalProfile()).build()); } public String getFullName() { if(this.getResourceCharacteristic().getParameters().get("fullPath") != null){ String fullPath = this.getResourceCharacteristic().getParameters().get("fullPath").get(0).getContent(); return fullPath; } else return compResource.getFullName() + "/" + name; } public void setStatus(ResourceStatus newStatus) { if(newStatus != status){ status = newStatus; } } public void handleEvent(Event event) { ResourceEventCommand rec = new ResourceEventCommand(this); rec.execute(event); } class DeviceEventHandler implements EventHandler{ public void handleResourceEvent(Event event){ if (extensionList != null) { for (Extension extension : extensionList) { if (extension.supportsEvent(event)) { extension.handleEvent(event); } } } if(event.getReason() != EventReason.SIM_INIT) compResource.handleEvent(event); } public void handleSchedulingEvent(SchedulingEvent event){ } } public EventHandler getEventHandler(){ return new DeviceEventHandler(); } public final void initiate(){ ResourceEventCommand rec = new ResourceEventCommand(this); EnergyEvent event = new EnergyEvent(EnergyEventType.AIRFLOW_STATE_CHANGED, "Resource controller"); event.setReason(EventReason.SIM_INIT); rec.execute(event); rec = new ResourceEventCommand(this); event = new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, "Resource controller"); event.setReason(EventReason.SIM_INIT); rec.execute(event); rec = new ResourceEventCommand(this); event = new EnergyEvent(EnergyEventType.TEMPERATURE_CHANGED, "Resource controller"); event.setReason(EventReason.SIM_INIT); rec.execute(event); //alternative way //getEventHandler().handleResourceEvent(new EnergyEvent(EnergyEventType.AIRFLOW_STATE_CHANGED, "Resource controller")); //getEventHandler().handleResourceEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, "Resource controller")); //getEventHandler().handleResourceEvent(new EnergyEvent(EnergyEventType.TEMPERATURE_CHANGED, "Resource controller")); } protected void initCharacteristics(DeviceDescription devDesc){ resourceCharacteristic = ResourceCharacteristics.builder().location(devDesc.getLocation()).parameters(devDesc.getParameters()).build(); } public void setComputingResource(ComputingResource compResource) { this.compResource = compResource; } public ComputingResource getComputingResource() { return compResource; } }