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.impl.AgentId;
5 import cz.cuni.amis.pogamut.base.agent.params.IAgentParameters;
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 * Agent parameters are meant to provide run-time parameters needed by various agents.
12 * <p><p>
13 * If you need to populate the parameters after instantiation, use setter available in this
14 * class: {@link AgentParameters#setAgentId(IAgentId)}
15 * <p><p>
16 * NOTE: all {@link IAgentParameters} implementors are usually used together with {@link IAgentRunner} or {@link IMultipleAgentRunner}
17 * which usually contains sensible default params, therefore there is no need to set all parameters
18 * into newly created ones as runners will supply them via {@link IAgentParameters#assignDefaults(IAgentParameters)}.
19 *
20 * @author Jimmy
21 */
22 public class AgentParameters implements IAgentParameters {
23
24 private IAgentId agentId;
25
26 public AgentParameters() {
27 this.agentId = null;
28 }
29
30 @Override
31 public IAgentId getAgentId() {
32 return agentId;
33 }
34
35 /**
36 * Sets agent id into the parameters.
37 * <p><p>
38 * WARNING: Note that you should not mess with 'setters' in different threads as they
39 * are non-thread-safe and may interrupt horrible agent instantiations with such behavior.
40 * @param agentId
41 * @return this instance
42 */
43 public AgentParameters setAgentId(IAgentId agentId) {
44 this.agentId = agentId;
45 return this;
46 }
47
48 @Override
49 public void assignDefaults(IAgentParameters defaults) {
50 if (agentId == null) agentId = defaults.getAgentId();
51 }
52
53 }