package edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.Task2; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.MultiTaskResourceControl; import java.util.Observable; import java.util.Observer; /** * Created with IntelliJ IDEA. * User: masoud * Date: 8/30/13 * Time: 3:35 PM <br/> * It was used as a broadcaster of events for tasks, especially if they can be dropped independently from * each of the per-switch resource allocators to inform others and task handler. * This is not used in the final design */ public class TaskEventPublisher extends Observable { public static enum EventType {Add, Drop} public void subscribe(Observer observer) { this.addObserver(observer); } public void publish(Task2 task, EventType event, MultiTaskResourceControl resourceControl) { this.setChanged(); System.out.println("Event: " + event + ": " + task); this.notifyObservers(new EventWrapper(task, event, resourceControl)); } public static class EventWrapper { private final Task2 task; private final EventType event; private final MultiTaskResourceControl resourceControl; public EventWrapper(Task2 task, EventType event, MultiTaskResourceControl resourceControl) { this.task = task; this.event = event; this.resourceControl = resourceControl; } public MultiTaskResourceControl getResourceControl() { return resourceControl; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; EventWrapper that = (EventWrapper) o; if (event != that.event) return false; if (task != null ? !task.equals(that.task) : that.task != null) return false; return true; } @Override public int hashCode() { int result = task != null ? task.hashCode() : 0; result = 31 * result + (event != null ? event.hashCode() : 0); return result; } public Task2 getTask() { return task; } public EventType getEvent() { return event; } } }