package org.act.tstream.schedule.default_assign; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; public class TaskGankerContext { private final Map<String, List<ResourceWorkerSlot>> supervisorToWorker; private final Map<String, Set<String>> relationship; private final Map<ResourceWorkerSlot, Map<String, Integer>> workerToComponentNum = new HashMap<ResourceWorkerSlot, Map<String, Integer>>(); public Map<ResourceWorkerSlot, Integer> getWorkerToTaskNum() { return workerToTaskNum; } private final Map<ResourceWorkerSlot, Integer> workerToTaskNum = new HashMap<ResourceWorkerSlot, Integer>(); public TaskGankerContext( Map<String, List<ResourceWorkerSlot>> supervisorToWorker, Map<String, Set<String>> relationship) { this.supervisorToWorker = supervisorToWorker; this.relationship = relationship; } public Map<String, List<ResourceWorkerSlot>> getSupervisorToWorker() { return supervisorToWorker; } public Map<ResourceWorkerSlot, Map<String, Integer>> getWorkerToComponentNum() { return workerToComponentNum; } public Map<String, Set<String>> getRelationship() { return relationship; } public int getComponentNumOnSupervisor(String supervisor, String name) { List<ResourceWorkerSlot> workers = supervisorToWorker.get(supervisor); if (workers == null) return 0; int result = 0; for (ResourceWorkerSlot worker : workers) { result = result + this.getComponentNumOnWorker(worker, name); } return result; } public int getComponentNumOnWorker(ResourceWorkerSlot worker, String name) { int result = 0; Map<String, Integer> componentNum = workerToComponentNum.get(worker); if (componentNum != null && componentNum.get(name) != null) result = componentNum.get(name); return result; } public int getTaskNumOnSupervisor(String supervisor) { List<ResourceWorkerSlot> workers = supervisorToWorker.get(supervisor); if (workers == null) return 0; int result = 0; for (ResourceWorkerSlot worker : workers) { result = result + this.getTaskNumOnWorker(worker); } return result; } public int getTaskNumOnWorker(ResourceWorkerSlot worker) { return worker.getTasks() == null ? 0 : worker.getTasks().size(); } public int getInputComponentNumOnSupervisor(String supervisor, String name) { int result = 0; List<ResourceWorkerSlot> workers = supervisorToWorker.get(supervisor); if (workers == null) return 0; for (ResourceWorkerSlot worker : workers) result = result + this.getInputComponentNumOnWorker(worker, name); return result; } public int getInputComponentNumOnWorker(ResourceWorkerSlot worker, String name) { int result = 0; for (String component : relationship.get(name)) result = result + this.getComponentNumOnWorker(worker, component); return result; } }