View Javadoc

1   package cz.cuni.amis.pogamut.base.component.controller;
2   
3   import cz.cuni.amis.pogamut.base.agent.IAgentId;
4   import cz.cuni.amis.pogamut.base.component.IComponent;
5   import cz.cuni.amis.pogamut.base.component.ISharedComponent;
6   import cz.cuni.amis.pogamut.base.component.lifecyclebus.ILifecycleBus;
7   import cz.cuni.amis.utils.token.IToken;
8   
9   /**
10   * The component controller is meant for simple {@link ISharedComponent} NOT {@link IComponent}s (for them, use {@link IComponentController} instead).
11   * <p><p>
12   * It is suitable for controlling lifecycle of one component inside one component bus. It provides methods for
13   * querying components the controlled component is depending on. 
14   *
15   * @author Jimmy
16   */
17  public interface ISharedComponentController<COMPONENT extends ISharedComponent> extends IComponentControllerBase<COMPONENT>, ISharedComponent {
18  
19  	/**
20  	 * Tells whether the agent identified by 'agentId' is currently using the controlled component, i.e., this component controller
21  	 * registers the component to agent's {@link ILifecycleBus} and is watching it for auto start/stop/pause/resume/...
22  	 * 
23  	 * @param agentId
24  	 * @return
25  	 */
26  	public boolean isUsedBy(IAgentId agentId);
27  	
28  	/**
29  	 * Whether the controlled component is dependent on component (identified by 'componentId') of the agent identified
30  	 * by 'agentId'.
31  	 * <p><p>
32  	 * Note that two {@link IComponent} belonging to different agents may have the same 'componentId'.
33  	 * 
34  	 * @param agentId
35  	 * @param componentId
36  	 * @return
37  	 */
38  	public boolean isDependent(IAgentId agentId, IToken componentId);
39  	
40  	/**
41  	 * Whether the controlled component is dependent on 'component' of the agent identified by 'agentId'.
42  	 * 
43  	 * @param component
44  	 * @return
45  	 */
46  	public boolean isDependent(IAgentId agentId, IComponent component);
47  	
48  }