package jadex.bdi.model.impl.flyweights; import jadex.bdi.model.IMBeliefSet; import jadex.bdi.model.IMExpression; import jadex.bdi.model.OAVBDIMetaModel; import jadex.bdi.model.editable.IMEBeliefSet; import jadex.bdi.model.editable.IMEExpression; import jadex.rules.state.IOAVState; import java.util.Collection; import java.util.Iterator; /** * Flyweight for belief model element. */ public class MBeliefSetFlyweight extends MTypedElementFlyweight implements IMBeliefSet, IMEBeliefSet { //-------- constructors -------- /** * Create a new element flyweight. */ public MBeliefSetFlyweight(IOAVState state, Object scope, Object handle) { super(state, scope, handle); } //-------- methods -------- /** * Get the facts. * @return The facts. */ public IMExpression[] getFacts() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Collection elems = (Collection)getState().getAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_facts); IMExpression[] ret = new IMExpression[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MExpressionFlyweight(getState(), getScope(), it.next()); } } object = ret; } }; return (IMExpression[])invoc.object; } else { Collection elems = (Collection)getState().getAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_facts); IMExpression[] ret = new IMExpression[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MExpressionFlyweight(getState(), getScope(), it.next()); } } return ret; } } /** * Get the facts expression. * @return The facts expression. */ public IMExpression getFactsExpression() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { object = getState().getAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_factsexpression); } }; return (IMExpression)invoc.object; } else { return (IMExpression)getState().getAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_factsexpression); } } /** * Test if the belief is used as argument. * @return True if used as argument. */ public boolean isArgument() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { bool = ((Boolean)getState().getAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_argument)).booleanValue(); } }; return invoc.bool; } else { return ((Boolean)getState().getAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_argument)).booleanValue(); } } /** * Test if the belief is used as result. * @return True if used as result. */ public boolean isResult() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { bool = ((Boolean)getState().getAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_result)).booleanValue(); } }; return invoc.bool; } else { return ((Boolean)getState().getAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_result)).booleanValue(); } } /** * Create the fact. * @return The fact. */ public IMEExpression createFact() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object elem = getState().createObject(OAVBDIMetaModel.expression_type); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_facts, elem); object = new MExpressionFlyweight(getState(), getScope(), elem); } }; return (IMEExpression)invoc.object; } else { Object elem = getState().createObject(OAVBDIMetaModel.expression_type); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_facts, elem); return new MExpressionFlyweight(getState(), getScope(), elem); } } /** * Create a facts expression. * @param The facts expression. */ public IMExpression createFactsExpression() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object elem = getState().createObject(OAVBDIMetaModel.expression_type); getState().setAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_factsexpression, elem); object = new MExpressionFlyweight(getState(), getScope(), elem); } }; return (IMEExpression)invoc.object; } else { Object elem = getState().createObject(OAVBDIMetaModel.expression_type); getState().setAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_factsexpression, elem); return new MExpressionFlyweight(getState(), getScope(), elem); } } /** * Set the belief is used as argument. * @param arg The argument flag. */ public void setArgument(final boolean argu) { if(isExternalThread()) { new AgentInvocation() { public void run() { getState().setAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_argument, argu? Boolean.TRUE: Boolean.FALSE); } }; } else { getState().setAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_argument, argu? Boolean.TRUE: Boolean.FALSE); } } /** * Set the belief is used as argument. * @param res The result flag. */ public void setResult(final boolean res) { if(isExternalThread()) { new AgentInvocation() { public void run() { getState().setAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_result, res? Boolean.TRUE: Boolean.FALSE); } }; } else { getState().setAttributeValue(getHandle(), OAVBDIMetaModel.beliefset_has_result, res? Boolean.TRUE: Boolean.FALSE); } } }