01 package dk.deepthought.sidious.blackboard;
02 
03 import dk.deepthought.sidious.planner.PlannerEngine;
04 import dk.deepthought.sidious.supportsystem.PlanRequester;
05 import dk.deepthought.sidious.supportsystem.SuperLinkID;
06 
07 /**
08  * Implementations of this interface acts as blackboards. The purpose of the
09  * blackboards are to facilitate the communication between the various
10  * components of the system.
11  
12  @author Deepthought
13  
14  */
15 public interface BlackBoard {
16 
17     /**
18      * Delivers the result of any calculation onto the blackboard.
19      
20      @param result
21      *            the result to deliver
22      */
23     public void deliverResult(Object result);
24 
25     /**
26      * Returns a reference to the plan requester associated with the specified
27      <code>id</code>.
28      <p>
29      * If no requester is associated with the specified id, planning for the
30      * specified id is stopped in the Planner, and <code>null</code> is
31      * returned.
32      
33      @see PlannerEngine
34      
35      @param requester
36      *            the id of the requested requester
37      @return a reference to the specified plan requester, or <code>null</code>
38      *         if requester does not exist
39      */
40     public PlanRequester getRequester(SuperLinkID requester);
41 
42     /**
43      * Registers the specified caller as a requester of a plan. Caller will be
44      * notified when a plan has been devised.
45      
46      @param requester
47      *            the requester of a plan
48      */
49     public void requestPlan(PlanRequester requester);
50 
51     /**
52      * Returns the current setting of the adjustable associated with the
53      * specified <code>adjustableID</code> and <code>requesterID</code>.
54      
55      @param requesterID
56      *            the id of the plan requester
57      @param adjustableID
58      *            the id of the adjustable to get the setting from
59      @return the setting of the adjustable
60      */
61     public double getAdjustableSetting(SuperLinkID requesterID,
62             SuperLinkID adjustableID);
63 
64 }