/** * Get the plan model element. * @return The plan model element. */ public MElement getModelElement() { return rplan.getModelElement(); }
/** * Get the plan model element. * @return The plan model element. */ public MElement getModelElement() { return rplan.getModelElement(); }
/** * Method that tries to guess the parameters for the method call. */ // Todo: parameter annotations (currently only required for event injection) public Object[] guessParameters(Class<?>[] ptypes) { if(ptypes==null) return null; return BDIAgentFeature.getInjectionValues(ptypes, null, rplan.getModelElement(), null, rplan, null, ia); }
/** * Add a new plan. * @param plan The plan. */ public void addPlan(RPlan plan) { // System.out.println("add plan: "+plan); if(plans==null) { plans = new HashSet<RPlan>(); mplans = new HashMap<MPlan, Collection<RPlan>>(); } if(plans.contains(plan)) throw new RuntimeException("Plan already contained: "+plan); Collection<RPlan> mymplans = mplans.get(plan.getModelElement()); if(mymplans==null) { mymplans = new LinkedHashSet<RPlan>(); mplans.put((MPlan)plan.getModelElement(), mymplans); } mymplans.add(plan); plans.add(plan); }
/** * Add a new plan. * @param plan The plan. */ public void addPlan(RPlan plan) { // System.out.println("add plan: "+plan); if(plans==null) { plans = new HashSet<RPlan>(); mplans = new HashMap<MPlan, Collection<RPlan>>(); } if(plans.contains(plan)) throw new RuntimeException("Plan already contained: "+plan); Collection<RPlan> mymplans = mplans.get(plan.getModelElement()); if(mymplans==null) { mymplans = new LinkedHashSet<RPlan>(); mplans.put((MPlan)plan.getModelElement(), mymplans); } mymplans.add(plan); plans.add(plan); }
Collection<RPlan> mymplans = mplans.get(plan.getModelElement()); mymplans.remove(plan); if(mymplans.isEmpty()) mplans.remove((MPlan)plan.getModelElement());
/** * Method that tries to guess the parameters for the method call. */ // Todo: parameter annotations (currently only required for event injection) public Object[] guessParameters(Class<?>[] ptypes) { if(ptypes==null) return null; return ((BDIAgentInterpreter)((BDIAgent)ia).getInterpreter()) .getInjectionValues(ptypes, null, rplan.getModelElement(), null, rplan, null, null); }
/** * Create a new plan body. */ public MethodPlanBody(IInternalAccess ia, RPlan rplan, Method body) { super(ia, rplan); this.body = body; String pname = rplan.getModelElement().getName(); String capaname = pname.indexOf(MElement.CAPABILITY_SEPARATOR)==-1 ? null : pname.substring(0, pname.lastIndexOf(MElement.CAPABILITY_SEPARATOR)); this.agent = ((BDIAgentFeature)ia.getComponentFeature(IBDIAgentFeature.class)).getCapabilityObject(capaname); }
/** * Rename the service name according to the current capability. */ protected String rename(String name) { if(name.indexOf(MElement.CAPABILITY_SEPARATOR)!=-1) return name; RPlan rplan = RPlan.RPLANS.get(); String capa = null; if(rplan!=null) { MPlan mplan = (MPlan)rplan.getModelElement(); capa = RCapability.getCapabilityPart(mplan.getName()); } return capa!=null ? capa+MElement.CAPABILITY_SEPARATOR+name : name; } }
/** * Get the priority of a candidate. * @return The priority of a candidate. */ protected static int getPriority(Object cand, MCapability mcapa) { MPlan mplan; // if(cand instanceof RWaitqueuePlan) // { // Object rplan = state.getAttributeValue(cand, OAVBDIRuntimeModel.waitqueuecandidate_has_plan); // mplan = state.getAttributeValue(rplan, OAVBDIRuntimeModel.element_has_model); // } if(cand instanceof RPlan) { mplan = (MPlan)((RPlan)cand).getModelElement(); } else if(cand.getClass().isAnnotationPresent(Plan.class)) { mplan = mcapa.getPlan(cand.getClass().getName()); } else { mplan = (MPlan)cand; } return mplan.getPriority(); }
capaname = ((RPlan)cand).getModelElement().getCapabilityName(); capaname = ((Waitqueue)cand).getPlan().getModelElement().getCapabilityName();
MPlan mplan = (MPlan)plan.getModelElement();
/** * Remove an internal event. * @param type The type. */ public void removeInternalEvent(String event) { BDIXModel model = (BDIXModel)agent.getModel().getRawModel(); MInternalEvent ievent = model.getCapability().getResolvedInternalEvent(rplan.getModelElement().getCapabilityName(), event); getWaitAbstraction().removeModelElement(ievent); }
invokeBooleanMethod(plan.getBody().getBody(), mi.getMethod(component.getClassLoader()), plan.getModelElement(), event, plan, component) .addResultListener(new IResultListener<Boolean>() if(!evaluateCondition(component, mcond, plan.getModelElement(), Collections.singletonMap(plan.getFetcherName(), (Object)plan)))
/** * Add an internal event. * @param type The type. */ public void addInternalEvent(String event) { BDIXModel model = (BDIXModel)agent.getModel().getRawModel(); MInternalEvent ievent = model.getCapability().getResolvedInternalEvent(rplan.getModelElement().getCapabilityName(), event); getWaitAbstraction().addModelElement(ievent); }
public IFuture<Void> execute(IEvent event, IRule<Void> rule, Object context, Object condresult) { Collection<RPlan> coll = capa.getPlans(mplan); for(final RPlan plan: coll) { invokeBooleanMethod(plan.getBody().getBody(agent), mi.getMethod(getClassLoader()), plan.getModelElement(), event, plan) .addResultListener(new IResultListener<Boolean>() { public void resultAvailable(Boolean result) { if(!result.booleanValue()) { plan.abort(); } } public void exceptionOccurred(Exception exception) { } }); } return IFuture.DONE; } };
MPlan mplan = (MPlan)rplan.getModelElement(); final MethodInfo mi = mplan.getBody().getContextConditionMethod(rplan.getAgent().getClassLoader()); boolean context = true; context = BDILifecycleAgentFeature.evaluateCondition(rplan.getAgent(), mplan.getContextCondition(), rplan.getModelElement(), Collections.singletonMap(rplan.getFetcherName(), (Object)rplan)); ret.setResult(context);
/** * Wait for a goal. * @param type The goal type. * @param timeout The timeout. */ public IGoal waitForGoalFinished(String type, long timeout) { checkNotInAtomic(); final Future<IGoal> ret = new Future<IGoal>(); BDIXModel model = (BDIXModel)agent.getModel().getRawModel(); MGoal mgoal = model.getCapability().getResolvedGoal(rplan.getModelElement().getCapabilityName(), type); WaitAbstraction wa = new WaitAbstraction(); wa.addChangeEventType(ChangeEvent.GOALDROPPED+"."+mgoal.getName()); ChangeEvent res = (ChangeEvent)rplan.getFromWaitqueue(wa); if(res!=null) { return (IGoal)res.getValue(); } else { rplan.setWaitAbstraction(wa); return ret.get(timeout); } }
/** * Create a new plan body. */ public ClassPlanBody(IInternalAccess ia, RPlan rplan, Class<?> body, Object plan) { super(ia, rplan); this.body = body; this.plan = plan; // Class<?> mbd = body!=null? body: plan.getClass(); MBody mbody = ((MPlan)rplan.getModelElement()).getBody(); bodymethod = mbody.getBodyMethod(ia.getClassLoader()).getMethod(ia.getClassLoader()); MethodInfo mi = mbody.getPassedMethod(ia.getClassLoader()); if(mi!=null) passedmethod = mi.getMethod(ia.getClassLoader()); mi = mbody.getFailedMethod(ia.getClassLoader()); if(mi!=null) failedmethod = mi.getMethod(ia.getClassLoader()); mi = mbody.getAbortedMethod(ia.getClassLoader()); if(mi!=null) abortedmethod = mi.getMethod(ia.getClassLoader()); if(plan!=null) injectElements();//ia.getComponentFeature(IPojoComponentFeature.class).getPojoAgent()); }
/** * Create a new plan body. */ public ClassPlanBody(IInternalAccess ia, RPlan rplan, Class<?> body, Object plan) { super(ia, rplan); this.body = body; this.plan = plan; // Class<?> mbd = body!=null? body: plan.getClass(); MBody mbody = ((MPlan)rplan.getModelElement()).getBody(); bodymethod = mbody.getBodyMethod(ia.getClassLoader()).getMethod(ia.getClassLoader()); MethodInfo mi = mbody.getPassedMethod(ia.getClassLoader()); if(mi!=null) passedmethod = mi.getMethod(ia.getClassLoader()); mi = mbody.getFailedMethod(ia.getClassLoader()); if(mi!=null) failedmethod = mi.getMethod(ia.getClassLoader()); mi = mbody.getAbortedMethod(ia.getClassLoader()); if(mi!=null) abortedmethod = mi.getMethod(ia.getClassLoader()); if(plan!=null) injectElements(((IPojoMicroAgent)ia).getPojoAgent()); }