package jadex.bdi.model.impl.flyweights;
import jadex.bdi.model.IMMetaGoalTrigger;
import jadex.bdi.model.IMTriggerReference;
import jadex.bdi.model.OAVBDIMetaModel;
import jadex.bdi.model.editable.IMEMetaGoalTrigger;
import jadex.bdi.model.editable.IMETriggerReference;
import jadex.rules.state.IOAVState;
import java.util.Collection;
import java.util.Iterator;
/**
*
*/
public class MMetaGoalTriggerFlyweight extends MTriggerFlyweight implements IMMetaGoalTrigger, IMEMetaGoalTrigger
{
//-------- constructors --------
/**
* Create a new element flyweight.
*/
public MMetaGoalTriggerFlyweight(IOAVState state, Object scope, Object handle)
{
super(state, scope, handle);
}
//-------- methods --------
/**
* Get the goal events.
*/
public IMTriggerReference[] getGoals()
{
if(isExternalThread())
{
AgentInvocation invoc = new AgentInvocation()
{
public void run()
{
Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.metagoaltrigger_has_goals);
IMTriggerReference[] ret = new IMTriggerReference[elems==null? 0: elems.size()];
if(elems!=null)
{
int i=0;
for(Iterator it=elems.iterator(); it.hasNext(); )
{
ret[i++] = new MTriggerReferenceFlyweight(getState(), getScope(), it.next());
}
}
object = ret;
}
};
return (IMTriggerReference[])invoc.object;
}
else
{
Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.metagoaltrigger_has_goals);
IMTriggerReference[] ret = new IMTriggerReference[elems==null? 0: elems.size()];
if(elems!=null)
{
int i=0;
for(Iterator it=elems.iterator(); it.hasNext(); )
{
ret[i++] = new MTriggerReferenceFlyweight(getState(), getScope(), it.next());
}
}
return ret;
}
}
/**
* Add a goal.
* @param reference The referenced goal.
*/
public IMETriggerReference createGoal(final String reference)
{
if(isExternalThread())
{
AgentInvocation invoc = new AgentInvocation()
{
public void run()
{
Object mtr = getState().createObject(OAVBDIMetaModel.triggerreference_type);
getState().setAttributeValue(mtr, OAVBDIMetaModel.triggerreference_has_ref, reference);
getState().addAttributeValue(getHandle(), OAVBDIMetaModel.metagoaltrigger_has_goals, mtr);
object = new MTriggerReferenceFlyweight(getState(), getScope(), mtr);
}
};
return (IMETriggerReference)invoc.object;
}
else
{
Object mtr = getState().createObject(OAVBDIMetaModel.triggerreference_type);
getState().setAttributeValue(mtr, OAVBDIMetaModel.triggerreference_has_ref, reference);
getState().addAttributeValue(getHandle(), OAVBDIMetaModel.metagoaltrigger_has_goals, mtr);
return new MTriggerReferenceFlyweight(getState(), getScope(), mtr);
}
}
}