package jadex.bdi.model.impl.flyweights;
import jadex.bdi.model.IMBelief;
import jadex.bdi.model.IMExpression;
import jadex.bdi.model.OAVBDIMetaModel;
import jadex.bdi.model.editable.IMEBelief;
import jadex.bdi.model.editable.IMEExpression;
import jadex.rules.state.IOAVState;
/**
* Flyweight for belief model element.
*/
public class MBeliefFlyweight extends MTypedElementFlyweight implements IMBelief, IMEBelief
{
//-------- constructors --------
/**
* Create a new element flyweight.
*/
public MBeliefFlyweight(IOAVState state, Object scope, Object handle)
{
super(state, scope, handle);
}
//-------- methods --------
/**
* Get the fact.
* @return The fact.
*/
public IMExpression getFact()
{
if(isExternalThread())
{
AgentInvocation invoc = new AgentInvocation()
{
public void run()
{
Object handle = getState().getAttributeValue(getHandle(), OAVBDIMetaModel.belief_has_fact);
if(handle!=null)
object = new MExpressionFlyweight(getState(), getScope(), handle);
}
};
return (IMExpression)invoc.object;
}
else
{
IMExpression ret = null;
Object handle = getState().getAttributeValue(getHandle(), OAVBDIMetaModel.belief_has_fact);
if(handle!=null)
ret = new MExpressionFlyweight(getState(), getScope(), handle);
return ret;
}
}
/**
* 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.belief_has_argument)).booleanValue();
}
};
return invoc.bool;
}
else
{
return ((Boolean)getState().getAttributeValue(getHandle(), OAVBDIMetaModel.belief_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.belief_has_result)).booleanValue();
}
};
return invoc.bool;
}
else
{
return ((Boolean)getState().getAttributeValue(getHandle(), OAVBDIMetaModel.belief_has_result)).booleanValue();
}
}
/**
* Create the fact.
* @param expression The expression.
* @param language The expression language (or null for default java-like language).
* @return The fact.
*/
public IMEExpression createFact(final String expression, final String language)
{
if(isExternalThread())
{
AgentInvocation invoc = new AgentInvocation()
{
public void run()
{
MExpressionFlyweight mfact = MExpressionbaseFlyweight.createExpression(expression, language, getState(), getScope());
getState().setAttributeValue(getHandle(), OAVBDIMetaModel.belief_has_fact, mfact.getHandle());
object = mfact;
}
};
return (IMEExpression)invoc.object;
}
else
{
MExpressionFlyweight mfact = MExpressionbaseFlyweight.createExpression(expression, language, getState(), getScope());
getState().setAttributeValue(getHandle(), OAVBDIMetaModel.belief_has_fact, mfact.getHandle());
return mfact;
}
}
/**
* 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.belief_has_argument, argu? Boolean.TRUE: Boolean.FALSE);
}
};
}
else
{
getState().setAttributeValue(getHandle(), OAVBDIMetaModel.belief_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.belief_has_result, res? Boolean.TRUE: Boolean.FALSE);
}
};
}
else
{
getState().setAttributeValue(getHandle(), OAVBDIMetaModel.belief_has_result, res? Boolean.TRUE: Boolean.FALSE);
}
}
}