View Javadoc

1   package cz.cuni.amis.pogamut.base.agent.params.impl;
2   
3   import cz.cuni.amis.pogamut.base.agent.IAgentId;
4   import cz.cuni.amis.pogamut.base.agent.params.IAgentParameters;
5   import cz.cuni.amis.pogamut.base.agent.params.IRemoteAgentParameters;
6   import cz.cuni.amis.pogamut.base.agent.utils.runner.IAgentRunner;
7   import cz.cuni.amis.pogamut.base.agent.utils.runner.IMultipleAgentRunner;
8   import cz.cuni.amis.pogamut.base.communication.connection.IWorldConnectionAddress;
9   
10  /**
11   * Remote agent parameters are meant to provide run-time parameters needed by various agents that works on client/server
12   * paradigm.
13   * <p><p>
14   * If you need to populate the parameters after instantiation, use setters available in this
15   * class: {@link RemoteAgentParameters#setAgentId(IAgentId)}, {@link RemoteAgentParameters#setWorldAddress(IWorldConnectionAddress)}.
16   * <p><p>
17   * NOTE: all {@link IAgentParameters} implementors are usually used together with {@link IAgentRunner} or {@link IMultipleAgentRunner}
18   * which usually contains sensible default params, therefore there is no need to set all parameters
19   * into newly created ones as runners will supply them via {@link IAgentParameters#assignDefaults(IAgentParameters)}.
20   * 
21   * @see AgentParameters
22   * @author Jimmy
23   */
24  public class RemoteAgentParameters extends AgentParameters implements IRemoteAgentParameters {
25  
26  	private IWorldConnectionAddress address;
27  
28  	public RemoteAgentParameters() {
29  		super();
30  		this.address = null;
31  	}
32  	
33  	@Override
34  	public IWorldConnectionAddress getWorldAddress() {
35  		return address;
36  	}
37  	
38  	@Override
39  	public RemoteAgentParameters setAgentId(IAgentId agentId) {
40  		super.setAgentId(agentId);
41  		return this;
42  	}
43  	
44  	/**
45  	 * Sets connection address into the parameters.
46  	 * <p><p>
47  	 * WARNING: Note that you should not mess with 'setters' in different threads as they
48  	 * are non-thread-safe and may interrupt horrible agent instantiations with such behavior.
49  	 * @param address
50  	 * @return this instance
51  	 */
52  	public RemoteAgentParameters setWorldAddress(IWorldConnectionAddress address) {
53  		this.address = address;
54  		return this;
55  	}
56  	
57  	@Override
58  	public void assignDefaults(IAgentParameters defaults) {
59  		super.assignDefaults(defaults);
60  		if (defaults instanceof IRemoteAgentParameters) {
61  			if (address == null) {
62  				address = ((IRemoteAgentParameters)defaults).getWorldAddress();
63  			}
64  		}
65  	}
66  
67  }