11package org .uu .nl .net2apl .core .agent ;
22
33import java .util .ArrayList ;
4+ import java .util .HashMap ;
45import java .util .List ;
56
67import org .uu .nl .net2apl .core .defaults .deliberationsteps .ApplyExternalTriggerPlanSchemes ;
@@ -19,6 +20,7 @@ public class AgentArguments {
1920
2021 private final List <PlanScheme > goalPlanSchemes , internalTriggerPlanSchemes , externalTriggerPlanSchemes , messagePlanSchemes ;
2122 private final List <Context > contexts ;
23+ private final HashMap <Context , Class <? extends Context >[]> explicitKeyContexts ;
2224 private final List <Plan > initialPlans ;
2325 private final List <Plan > downPlans ;
2426
@@ -28,6 +30,7 @@ public AgentArguments(){
2830 this .externalTriggerPlanSchemes = new ArrayList <>();
2931 this .messagePlanSchemes = new ArrayList <>();
3032 this .contexts = new ArrayList <>();
33+ this .explicitKeyContexts = new HashMap <>();
3134 this .initialPlans = new ArrayList <>();
3235 this .downPlans = new ArrayList <>();
3336 }
@@ -42,6 +45,9 @@ final ContextContainer createContextContainer(){
4245 ContextContainer container = new ContextContainer ();
4346 for (Context context : this .contexts )
4447 container .addContext (context );
48+ for (Context context : this .explicitKeyContexts .keySet ()) {
49+ container .addImplementedContext (context , this .explicitKeyContexts .get (context ));
50+ }
4551 return container ;
4652 }
4753
@@ -88,6 +94,8 @@ final List<Plan> getShutdownPlans(){
8894 public final AgentArguments addGoalPlanScheme (final FunctionalPlanSchemeInterface planScheme ){ this .goalPlanSchemes .add (new FunctionalPlanScheme (planScheme )); return this ; }
8995 /** Add a context that is used for decision making and plan execution. */
9096 public final AgentArguments addContext (final Context context ){ this .contexts .add (context ); return this ; }
97+ /** Add a context that is used for decision making and plan execution with one or more explicit lookup keys. */
98+ public final AgentArguments addContext (final Context context , Class <? extends Context > ... keys ){ this .explicitKeyContexts .put (context , keys ); return this ; }
9199 /** Add a plan that will be executed in the first deliberation cycle. */
92100 public final AgentArguments addInitialPlan (final Plan plan ){ this .initialPlans .add (plan ); return this ; }
93101 /** Add a plan that will be executed after the last deliberation cycle this agent will participate in. */
@@ -105,6 +113,7 @@ public final AgentArguments include(final AgentArguments builder){
105113 this .initialPlans .addAll (builder .initialPlans );
106114 this .downPlans .addAll (builder .downPlans );
107115 this .contexts .addAll (builder .contexts );
116+ this .explicitKeyContexts .putAll (builder .explicitKeyContexts );
108117 return this ;
109118 }
110119}
0 commit comments