01 package dk.deepthought.sidious.gui;
02 
03 import java.util.ArrayList;
04 import java.util.List;
05 
06 import dk.deepthought.sidious.planner.AStarAlgorithm;
07 import dk.deepthought.sidious.planner.Plan;
08 import dk.deepthought.sidious.planner.graph.Vertex;
09 
10 /**
11  * Class works as a provider of messages from within the planner.
12  
13  @author Deepthought
14  
15  */
16 public class SidiousOutput {
17 
18     /**
19      * The singleton instance of this.
20      */
21     private static final SidiousOutput INSTANCE = new SidiousOutput();
22 
23     /**
24      * List of listeners.
25      */
26     private static List<SidiousController> listeners = new ArrayList<SidiousController>();
27 
28     /**
29      * Private constructor.
30      */
31     private SidiousOutput() {
32     }
33 
34     /**
35      * Gets the singleton instance of this.
36      
37      @return the singleton instance.
38      */
39     public static SidiousOutput getInstance() {
40         return INSTANCE;
41     }
42 
43     /**
44      * Adds a vertex to this.
45      <p>
46      * Is called from the jAStar method in the AStarAlgorithm class.
47      
48      @see AStarAlgorithm
49      @param vertex
50      */
51     public void addVertex(Vertex vertex) {
52         for (SidiousController controller : listeners) {
53             controller.vertex(vertex);
54         }
55     }
56 
57     /**
58      * Registers the specified controller as listener of this.
59      
60      @param controller
61      *            the controller to register
62      
63      */
64     public void register(SidiousController controller) {
65         listeners.add(controller);
66     }
67 
68     /**
69      * Adds a finished plan to this. All listeners are notified.
70      
71      @param plan
72      *            the plan to add
73      */
74     public void addFinishedPlan(Plan plan) {
75         for (SidiousController controller : listeners) {
76             controller.finished(plan);
77         }
78     }
79 
80 }