source: DCWoRMS/trunk/src/schedframe/ResourceController.java @ 768

Revision 768, 4.6 KB checked in by wojtekp, 12 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package schedframe;
2
3import gridsim.GridSim;
4
5import java.util.HashSet;
6import java.util.Iterator;
7import java.util.LinkedList;
8import java.util.List;
9import java.util.Set;
10
11import schedframe.exceptions.ResourceException;
12import schedframe.resources.computing.ComputingResource;
13import schedframe.scheduling.Scheduler;
14
15public class ResourceController {
16
17        protected static Scheduler scheduler;
18        protected static List<ComputingResource> computingResources;
19        protected List<Initializable> toInit;
20        protected Set<String> compResLayers;
21       
22        public ResourceController(Scheduler logicalStructure, List<ComputingResource> compResources){
23                scheduler = logicalStructure;
24                computingResources = compResources;
25        }
26
27        public Scheduler getScheduler() {
28                return scheduler;
29        }
30
31        public List<ComputingResource> getComputingResources() {
32                return computingResources;
33        }
34
35        public static ComputingResource getComputingResourceByName(String resourceName) throws ResourceException {
36                ComputingResource resourceWithName = null;
37                for (int i = 0; i < computingResources.size() && resourceWithName == null; i++) {
38                        ComputingResource resource = computingResources.get(i);
39                        if (resource.getName().equals(resourceName))
40                                resourceWithName = resource;
41                        else
42                                resourceWithName = resource.getDescendantByName(resourceName);
43                }
44                return resourceWithName;
45        }
46
47        private static Scheduler getSchedulerByName(String schedulerName) {
48                Scheduler schedulerWithName = null;
49
50                if (scheduler.getName().compareTo(schedulerName) == 0)
51                        schedulerWithName = scheduler;
52                else if (scheduler.getChildren() != null) {
53                        LinkedList<Scheduler> toExamine = new LinkedList<Scheduler>();
54                        toExamine.push(scheduler);
55
56                        while (!toExamine.isEmpty() && schedulerWithName != null) {
57                                Scheduler scheduler = toExamine.pop();
58                                List<Scheduler> schedulers = scheduler.getChildren();
59
60                                int numberOfSched = schedulers.size();
61                                for (int i = 0; i < numberOfSched; i++) {
62                                        Scheduler schedulerChild = schedulers.get(i);
63                                        if(scheduler.getName().equals(schedulerName)){
64                                                schedulerWithName = schedulerChild;
65                                                break;
66                                        } else
67                                                toExamine.addLast(schedulerChild);
68                                }
69                        }
70                }
71                return schedulerWithName;
72        }
73       
74        public static Scheduler getScheduler(String resName){
75                if(GridSim.getEntityId(resName) != -1){
76                        return getSchedulerByName(resName);
77                }
78                ComputingResource resourceWithName = null;
79                try {
80                        resourceWithName = getComputingResourceByName(resName);
81                } catch (ResourceException e) {
82                }
83                /*for(int i = 0 ; i < computingResources.size() && resourceWithName == null; i++){
84                        ComputingResource resource = computingResources.get(i);
85                        if(resource.getName().equals(resName))
86                                resourceWithName = resource;
87                        else
88                                try {
89                                        resourceWithName = resource.getDescendantByName(resName);
90                                } catch (ResourceException e) {
91                                        return null;
92                                }
93                }*/
94                if(resourceWithName == null)
95                        return null;
96                List<ComputingResource> children = resourceWithName.getChildren();
97                Set<Scheduler> childrenSchedulers = new HashSet<Scheduler>();
98                if(children.isEmpty())
99                        return null;
100                for(ComputingResource child: children) {
101                        childrenSchedulers.add(child.getScheduler());
102                }       
103
104                Set<Scheduler> tempChildrenSchedulers = new HashSet<Scheduler>(childrenSchedulers);
105                while(childrenSchedulers.size() > 1){
106                        childrenSchedulers = new HashSet<Scheduler>();
107                        for(Scheduler s: tempChildrenSchedulers){
108                                childrenSchedulers.add(s.getParent());
109                        }
110                        tempChildrenSchedulers = new HashSet<Scheduler>(childrenSchedulers);
111                }
112                Iterator<Scheduler> it = childrenSchedulers.iterator();
113                Scheduler potentialScheduler = it.next();
114                if(potentialScheduler.getCompResources().containsAll(children))
115                        return potentialScheduler;
116                return null;
117        }
118       
119        public static ComputingResource getCommonComputingResourceParent(List<ComputingResource> compResources){
120                if(compResources.size() == 0)
121                        return null;
122                Set<ComputingResource> candidates = new HashSet<ComputingResource>(compResources);
123                while(candidates.size() > 1){
124                        Set<ComputingResource> parents = new HashSet<ComputingResource>();
125                        Iterator<ComputingResource> it = candidates.iterator();
126                        while(it.hasNext()){
127                                ComputingResource compRes = it.next();
128                                if(compRes.getParent() != null){
129                                        parents.add(compRes.getParent());
130                                }
131                                it.remove();
132                        }
133                        candidates.addAll(parents);
134                }
135                return candidates.toArray(new ComputingResource[0])[0];
136        }
137
138        public void setInitList(List<Initializable> toI) {
139                toInit = toI;
140        }
141
142        public List<Initializable> getToInit() {
143                return toInit;
144        }
145
146        public Set<String> getComputingResourceLayers() {
147                return compResLayers;
148        }
149
150        public void setCompResLayers(Set<String> compResLayers) {
151                this.compResLayers = compResLayers;
152        }
153
154}
Note: See TracBrowser for help on using the repository browser.