source: DCWoRMS/trunk/src/schedframe/resources/units/AbstractResourceUnit.java @ 477

Revision 477, 3.3 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package schedframe.resources.units;
2
3import schedframe.Parameters;
4
5public abstract class AbstractResourceUnit implements ResourceUnit, Cloneable {
6       
7        protected ResourceUnitName name;
8       
9        protected ResourceUnitType resourceType;;
10
11        protected String resourceId;
12       
13        protected ResourceUnitProvisioner provisioner;
14       
15       
16        public AbstractResourceUnit(AbstractResourceUnit unit){
17                this.name = unit.name;
18                this.resourceType = unit.resourceType;
19                this.resourceId = unit.resourceId;
20                this.provisioner = new SimpleResourceUnitProvisioner(unit, ResourceUnitState.FREE, 0);
21        }
22       
23        public AbstractResourceUnit(ResourceUnitName name) {
24                this.name = name;
25                resourceId = "";
26                resourceType = ResourceUnitType.CONTINUOUS_RESOURCE;
27                this.provisioner = new SimpleResourceUnitProvisioner(this, ResourceUnitState.FREE, 0);
28        }
29
30        public AbstractResourceUnit(ResourceUnitName name, String resId) {
31                this(name);
32                resourceId = resId;
33                resourceType = ResourceUnitType.CONTINUOUS_RESOURCE;
34                this.provisioner = new SimpleResourceUnitProvisioner(this, ResourceUnitState.FREE, 0);
35        }
36       
37        public ResourceUnitName getName() {
38                return name;
39        }
40
41        public String getResourceId() {
42                return resourceId;
43        }
44       
45        public ResourceUnitType getResourceUnitType() {
46                return this.resourceType;
47        }
48       
49        public boolean equals(Object o){
50                if(o instanceof AbstractResourceUnit){
51                        AbstractResourceUnit unit = (AbstractResourceUnit) o;
52                        if(this.name != unit.getName()) return false;
53                        if(!this.resourceId.equals(unit.getResourceId())) return false;
54                        if(this.getFreeAmount() != unit.getFreeAmount()) return false;
55                        if(this.getUsedAmount() != unit.getUsedAmount()) return false;
56                        return true;
57                } else {
58                        return false;
59                }
60        }
61       
62        public Object clone(){
63                Object obj = null;
64                try {
65                        obj = super.clone();
66                } catch (CloneNotSupportedException e) {
67                        e.printStackTrace();
68                }
69                return obj;
70        }
71       
72        public void reset(){};
73       
74        public void init(Parameters parameters){
75               
76        }
77       
78        public ResourceUnitProvisioner getProvisioner() {
79        return provisioner;
80        }
81       
82        public Parameters getParameters(){
83                return null;
84        }
85
86        class SimpleResourceUnitProvisioner implements ResourceUnitProvisioner{
87
88                protected ResourceUnit primaryUnit;
89                protected ResourceUnitState state;
90                protected int pending;
91               
92                public SimpleResourceUnitProvisioner (ResourceUnit primaryUnit, ResourceUnitState state, int pending) {
93                        this.primaryUnit = primaryUnit;
94                        this.state = state;
95                        this.pending = pending;
96                }
97
98                public ResourceUnitState getState() {
99                        return state;
100                }
101
102                public void setState(ResourceUnitState newState) {
103
104                        if(newState == ResourceUnitState.FREE){
105                                primaryUnit.setUsedAmount(primaryUnit.getUsedAmount() - getAmount());
106                        } else if(newState == ResourceUnitState.PENDING){
107                                primaryUnit.getProvisioner().setPending(primaryUnit.getProvisioner().getPending() + getAmount());
108                        } else if(state == ResourceUnitState.PENDING && newState == ResourceUnitState.BUSY){
109                                primaryUnit.getProvisioner().setPending(primaryUnit.getProvisioner().getPending() - getAmount());
110                                primaryUnit.setUsedAmount(primaryUnit.getUsedAmount() + getAmount());
111                        } else if(state == ResourceUnitState.FREE && newState == ResourceUnitState.BUSY){
112                                primaryUnit.setUsedAmount(primaryUnit.getUsedAmount() + getAmount());
113                        }
114                        state = newState;
115                }
116               
117                public int getPending() {
118                        return pending;
119                }
120
121                public void setPending(int pending) {
122                        this.pending = pending;
123                }
124               
125        }
126}
Note: See TracBrowser for help on using the repository browser.