source: DCWoRMS/trunk/build/classes/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
83        class SimpleResourceUnitProvisioner implements ResourceUnitProvisioner{
84
85                protected ResourceUnit primaryUnit;
86                protected ResourceUnitState state;
87                protected int pending;
88               
89                public SimpleResourceUnitProvisioner (ResourceUnit primaryUnit, ResourceUnitState state, int pending) {
90                        this.primaryUnit = primaryUnit;
91                        this.state = state;
92                        this.pending = pending;
93                }
94
95                public ResourceUnitState getState() {
96                        return state;
97                }
98
99                public void setState(ResourceUnitState newState) {
100
101                        if(newState == ResourceUnitState.FREE){
102                                primaryUnit.setUsedAmount(primaryUnit.getUsedAmount() - getAmount());
103                        } else if(newState == ResourceUnitState.PENDING){
104                                primaryUnit.getProvisioner().setPending(primaryUnit.getProvisioner().getPending() + getAmount());
105                        } else if(state == ResourceUnitState.PENDING && newState == ResourceUnitState.BUSY){
106                                primaryUnit.getProvisioner().setPending(primaryUnit.getProvisioner().getPending() - getAmount());
107                                primaryUnit.setUsedAmount(primaryUnit.getUsedAmount() + getAmount());
108                        } else if(state == ResourceUnitState.FREE && newState == ResourceUnitState.BUSY){
109                                primaryUnit.setUsedAmount(primaryUnit.getUsedAmount() + getAmount());
110                        }
111                        state = newState;
112                }
113               
114                public int getPending() {
115                        return pending;
116                }
117
118                public void setPending(int pending) {
119                        this.pending = pending;
120                }
121               
122        }
123}
Note: See TracBrowser for help on using the repository browser.