package test.rewolucja.resources.description; 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.units.ResourceUnit; import schedframe.scheduling.utils.ResourceParameterName; import test.rewolucja.resources.ResourceType; import test.rewolucja.scheduling.queue.GSSIMQueue; public abstract class AbstractResourceDescription { //protected ResourceProvider provider; protected String resourceId; /*protected AbstractResourceDescription parent; /public AbstractResourceDescription getParent() { return parent; } public void setParent(AbstractResourceDescription parent) { this.parent = parent; }*/ protected List children; protected ResourceType type; protected Map> resUnits; public AbstractResourceDescription(ResourceType type){ this.type = type; this.children = null; //this.resUnits = new HashMap>(); } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } public void addChildren(AbstractResourceDescription child) { //child.setParent(this); if(children == null) children = new ArrayList (1); this.children.add(child); } /** * * @return resource id */ public String getResourceId(){ return this.resourceId; } /** * * @param unitName name of the resource unit * @return resource unit value * @throws NoSuchFieldException if particular resource unit is not defined */ public ResourceUnit getResourceUnit(ResourceParameterName unitName) throws NoSuchFieldException{ return getResourceUnitList(unitName).get(0); } public List getResourceUnitList(ResourceParameterName unitName) throws NoSuchFieldException{ if(resUnits.containsKey(unitName)) return resUnits.get(unitName); else throw new NoSuchFieldException("Resource unit " + unitName + " is not available in resource " + this.resourceId); } 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; } public Object clone(){ AbstractResourceDescription copy = null; try { copy = (AbstractResourceDescription) super.clone(); copy.resUnits = new HashMap>(); Iterator itr = this.resUnits.keySet().iterator(); while(itr.hasNext()){ ResourceParameterName name = itr.next(); List list = this.resUnits.get(name); List newList = new ArrayList(list.size()); for(int i = 0; i < list.size(); i++){ newList.add((ResourceUnit)list.get(i).clone()); } copy.resUnits.put(name, newList); } } catch (CloneNotSupportedException e) { e.printStackTrace(); } return copy; } /*public enum ResourceType { COMPUTING_RESOURCE, QUEUING_SYSTEM; } */ public abstract long getQueueLoad(String queueName) throws NoSuchFieldException; public ResourceType getType() { return type; } public abstract List getAccessQueues(); }