package schedframe.scheduling; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import schedframe.resources.StandardResourceType; import schedframe.resources.computing.description.ExecutingResourceDescription; import schedframe.resources.computing.description.ResourceDescription; import schedframe.resources.providers.ResourceProvider; import schedframe.resources.units.ResourceUnit; import schedframe.resources.units.ResourceUnitName; import schedframe.scheduling.queue.QueueDescription; public class SchedulerDescription extends ResourceDescription implements ExecutingResourceDescription{ protected ResourceProvider provider; protected List accesQueues; protected Map> resUnits; public SchedulerDescription(ResourceProvider provider){ super(StandardResourceType.ResourceProvider); this.id = provider.getProviderId(); this.provider = provider; this.resUnits = new HashMap>(); this.accesQueues = new ArrayList(1); } public SchedulerDescription(String id){ super(StandardResourceType.ResourceProvider); this.id = id; this.provider = new ResourceProvider(id, null, null, null); this.resUnits = new HashMap>(); this.accesQueues = new ArrayList(1); } public void addQueueDescription(QueueDescription queue){ accesQueues.add(queue); } public void addQueuesDescription(List queue){ accesQueues.addAll(queue); } public List getAvailableQueues(){ return this.accesQueues; } public void addResourceUnit(Map allUnits){ Iterator itr = allUnits.values().iterator(); while(itr.hasNext()){ addResourceUnit(itr.next()); } } public void addResourceUnitList(Map> allUnits){ this.resUnits.putAll(allUnits); } public ResourceProvider getProvider() { return provider; } public void addResourceUnit(ResourceUnit unit) { if (this.resUnits == null) this.resUnits = new HashMap>(1); List list = null; if (this.resUnits.containsKey(unit.getName())) { list = this.resUnits.get(unit.getName()); } else { list = new ArrayList(1); this.resUnits.put(unit.getName(), list); } list.add(unit); } public ResourceUnit getResourceUnit(ResourceUnitName unitName) throws NoSuchFieldException { return getResourceUnitList(unitName).get(0); } public List getResourceUnitList(ResourceUnitName unitName) throws NoSuchFieldException { if (resUnits.containsKey(unitName)) return resUnits.get(unitName); else throw new NoSuchFieldException("Resource unit " + unitName + " is not available in resource " + this.id); } public Collection getResourceUnit() { if (resUnits == null) return null; List values = new ArrayList(); Collection> lists = resUnits.values(); Iterator> itr = lists.iterator(); while (itr.hasNext()) { List list = itr.next(); values.addAll(list); } return values; } public Map> getResourceUnits() { return resUnits; } }