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

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