package schedframe.resources.computing; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import schedframe.resources.devices.Device; import schedframe.resources.units.ResourceUnit; import schedframe.resources.units.ResourceUnitName; public class ComputingResourceCharacteristics extends ResourceCharacteristics{ protected Map> resUnits; protected List devices; protected ComputingResourceCharacteristics(Builder builder) { super(builder); this.resUnits = builder.resUnits; this.devices = builder.devices; } public Map> getResourceUnits() { if(resUnits == null) return new HashMap>(2); return resUnits; } public ResourceUnit getResourceUnit(ResourceUnitName unitName) throws NoSuchFieldException{ if(getResourceUnits().containsKey(unitName)) return getResourceUnits().get(unitName).get(0); else throw new NoSuchFieldException("Resource unit " + unitName + " is not available in this resource "); } public void addResourceUnit(ResourceUnit unit){ if(resUnits == null){ resUnits = new HashMap>(2); } List list = null; if(resUnits.containsKey(unit.getName())){ list = resUnits.get(unit.getName()); } else { list = new ArrayList(1); resUnits.put(unit.getName(), list); } list.add(unit); } public List getDevices(){ if(devices == null) return new ArrayList(0); return devices; } public static abstract class Builder> extends ResourceCharacteristics.Builder { protected Map> resUnits; protected List devices; public T resourceUnits(Map> units){this.resUnits = units; return self(); } public T resourceUnits(){this.resUnits = new HashMap>(2); return self(); } public T device(List dev){this.devices = dev; return self(); } public ComputingResourceCharacteristics build() { return new ComputingResourceCharacteristics(this); } } public static class Builder2 extends Builder { @Override protected Builder2 self() { return this; } } public static Builder builder() { return new Builder2(); } }