source: DCWoRMS/branches/coolemall/src/schedframe/resources/computing/ComputingResourceCharacteristics.java @ 1207

Revision 1207, 2.5 KB checked in by wojtekp, 11 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package schedframe.resources.computing;
2
3import java.util.ArrayList;
4import java.util.HashMap;
5import java.util.List;
6import java.util.Map;
7
8import schedframe.resources.devices.Device;
9import schedframe.resources.units.ResourceUnit;
10import schedframe.resources.units.ResourceUnitName;
11
12public class ComputingResourceCharacteristics extends ResourceCharacteristics{
13
14       
15        protected Map<ResourceUnitName, List<ResourceUnit>> resUnits;
16        protected List<Device> devices;
17       
18        protected ComputingResourceCharacteristics(Builder<?> builder) {
19                super(builder);
20                this.resUnits = builder.resUnits;
21                this.devices = builder.devices;
22                // TODO Auto-generated constructor stub
23        }
24
25        public Map<ResourceUnitName, List<ResourceUnit>> getResourceUnits() {
26                if(resUnits == null)
27                        return new HashMap<ResourceUnitName, List<ResourceUnit>>();
28                return resUnits;
29        }
30       
31        public ResourceUnit getResourceUnit(ResourceUnitName unitName) throws NoSuchFieldException{
32                if(getResourceUnits().containsKey(unitName))
33                        return getResourceUnits().get(unitName).get(0);
34                else throw new NoSuchFieldException("Resource unit " + unitName +
35                                " is not available in this resource ");
36        }
37       
38        public void addResourceUnit(ResourceUnit unit){
39                if(resUnits == null){
40                        resUnits = new HashMap<ResourceUnitName, List<ResourceUnit>>(2);
41                }
42                List<ResourceUnit> list = null;
43                if(resUnits.containsKey(unit.getName())){
44                        list = resUnits.get(unit.getName());
45                } else {
46                        list = new ArrayList<ResourceUnit>(1);
47                        resUnits.put(unit.getName(), list);
48                }
49                list.add(unit);
50        }
51       
52
53       
54        public List<Device> getDevices(){
55                if(devices == null)
56                        return new ArrayList<Device>();
57                return devices;
58        }
59       
60        public static abstract class Builder<T extends Builder<T>> extends ResourceCharacteristics.Builder<T> {
61
62                protected Map<ResourceUnitName, List<ResourceUnit>> resUnits;
63                protected List<Device> devices;
64               
65        public T resourceUnits(Map<ResourceUnitName, List<ResourceUnit>> units){this.resUnits = units; return self(); }
66        public T resourceUnits(){this.resUnits = new HashMap<ResourceUnitName, List<ResourceUnit>>(2); return self(); }
67        public T device(List<Device> dev){this.devices = dev; return self(); }
68
69        public ComputingResourceCharacteristics build() {
70            return new ComputingResourceCharacteristics(this);
71        }
72    }
73
74    public static class Builder2 extends Builder<Builder2> {
75        @Override
76        protected Builder2 self() {
77            return this;
78        }
79    }
80
81    public static Builder<?> builder() {
82        return new Builder2();
83    }
84
85}
Note: See TracBrowser for help on using the repository browser.