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

Revision 1423, 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        }
23
24        public Map<ResourceUnitName, List<ResourceUnit>> getResourceUnits() {
25                if(resUnits == null)
26                        return new HashMap<ResourceUnitName, List<ResourceUnit>>(2);
27                return resUnits;
28        }
29       
30        public ResourceUnit getResourceUnit(ResourceUnitName unitName) throws NoSuchFieldException{
31                if(getResourceUnits().containsKey(unitName))
32                        return getResourceUnits().get(unitName).get(0);
33                else throw new NoSuchFieldException("Resource unit " + unitName +
34                                " is not available in this resource ");
35        }
36       
37        public void addResourceUnit(ResourceUnit unit){
38                if(resUnits == null){
39                        resUnits = new HashMap<ResourceUnitName, List<ResourceUnit>>(2);
40                }
41                List<ResourceUnit> list = null;
42                if(resUnits.containsKey(unit.getName())){
43                        list = resUnits.get(unit.getName());
44                } else {
45                        list = new ArrayList<ResourceUnit>(1);
46                        resUnits.put(unit.getName(), list);
47                }
48                list.add(unit);
49        }
50       
51
52       
53        public List<Device> getDevices(){
54                if(devices == null)
55                        return new ArrayList<Device>(0);
56                return devices;
57        }
58       
59        public static abstract class Builder<T extends Builder<T>> extends ResourceCharacteristics.Builder<T> {
60
61                protected Map<ResourceUnitName, List<ResourceUnit>> resUnits;
62                protected List<Device> devices;
63               
64        public T resourceUnits(Map<ResourceUnitName, List<ResourceUnit>> units){this.resUnits = units; return self(); }
65        public T resourceUnits(){this.resUnits = new HashMap<ResourceUnitName, List<ResourceUnit>>(2); return self(); }
66        public T device(List<Device> dev){this.devices = dev; return self(); }
67
68        public ComputingResourceCharacteristics build() {
69            return new ComputingResourceCharacteristics(this);
70        }
71    }
72
73    public static class Builder2 extends Builder<Builder2> {
74        @Override
75        protected Builder2 self() {
76            return this;
77        }
78    }
79
80    public static Builder<?> builder() {
81        return new Builder2();
82    }
83
84}
Note: See TracBrowser for help on using the repository browser.