package jadex.bdi.model.impl.flyweights; import jadex.bdi.model.IMParameter; import jadex.bdi.model.IMParameterElement; import jadex.bdi.model.IMParameterSet; import jadex.bdi.model.OAVBDIMetaModel; import jadex.bdi.model.editable.IMEParameter; import jadex.bdi.model.editable.IMEParameterElement; import jadex.bdi.model.editable.IMEParameterSet; import jadex.rules.state.IOAVState; import java.util.Collection; import java.util.Iterator; /** * Flyweight for parameter element model. */ public class MParameterElementFlyweight extends MReferenceableElementFlyweight implements IMParameterElement, IMEParameterElement { //-------- constructors -------- /** * Create a new referenceable element flyweight. */ public MParameterElementFlyweight(IOAVState state, Object scope, Object handle) { super(state, scope, handle); } //-------- methods -------- /** * Get a parameter. * @return The parameter. */ public IMParameter getParameter(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object handle = getState().getAttributeValue(getHandle(), OAVBDIMetaModel.parameterelement_has_parameters, name); if(handle==null) throw new RuntimeException("Parameter not found: "+name); object = new MParameterFlyweight(getState(), getScope(), handle); } }; return (IMParameter)invoc.object; } else { Object handle = getState().getAttributeValue(getHandle(), OAVBDIMetaModel.parameterelement_has_parameters, name); if(handle==null) throw new RuntimeException("Parameter not found: "+name); return new MParameterFlyweight(getState(), getScope(), handle); } } /** * Get parameters. * @return The parameters. */ public IMParameter[] getParameters() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.parameterelement_has_parameters); IMParameter[] ret = new IMParameter[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MParameterFlyweight(getState(), getScope(), it.next()); } } object = ret; } }; return (IMParameter[])invoc.object; } else { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.parameterelement_has_parameters); IMParameter[] ret = new IMParameter[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MParameterFlyweight(getState(), getScope(), it.next()); } } return ret; } } /** * Get a parameter set. * @return The parameter set. */ public IMParameterSet getParameterSet(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object handle = getState().getAttributeValue(getHandle(), OAVBDIMetaModel.parameterelement_has_parametersets, name); if(handle==null) throw new RuntimeException("Parameterset not found: "+name); object = new MParameterSetFlyweight(getState(), getScope(), handle); } }; return (IMParameterSet)invoc.object; } else { Object handle = getState().getAttributeValue(getHandle(), OAVBDIMetaModel.parameterelement_has_parametersets, name); if(handle==null) throw new RuntimeException("Parameterset not found: "+name); return new MParameterSetFlyweight(getState(), getScope(), handle); } } /** * Get parameter sets. * @return The parameter sets. */ public IMParameterSet[] getParameterSets() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.parameterelement_has_parametersets); IMParameterSet[] ret = new IMParameterSet[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MParameterSetFlyweight(getState(), getScope(), it.next()); } } object = ret; } }; return (IMParameterSet[])invoc.object; } else { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.parameterelement_has_parametersets); IMParameterSet[] ret = new IMParameterSet[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MParameterSetFlyweight(getState(), getScope(), it.next()); } } return ret; } } /** * Get a parameter. * @return The parameter. */ public IMEParameter createParameter(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object param = getState().createObject(OAVBDIMetaModel.parameter_type); getState().setAttributeValue(param, OAVBDIMetaModel.modelelement_has_name, name); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.parameterelement_has_parameters, param); object = new MParameterFlyweight(getState(), getScope(), param); } }; return (IMEParameter)invoc.object; } else { Object param = getState().createObject(OAVBDIMetaModel.parameter_type); getState().setAttributeValue(param, OAVBDIMetaModel.modelelement_has_name, name); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.parameterelement_has_parameters, param); return new MParameterFlyweight(getState(), getScope(), param); } } /** * Get a parameter set. * @return The parameter set. */ public IMEParameterSet createParameterSet(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object param = getState().createObject(OAVBDIMetaModel.parameterset_type); getState().setAttributeValue(param, OAVBDIMetaModel.modelelement_has_name, name); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.parameterelement_has_parametersets, param); object = new MParameterSetFlyweight(getState(), getScope(), param); } }; return (IMEParameterSet)invoc.object; } else { Object param = getState().createObject(OAVBDIMetaModel.parameterset_type); getState().setAttributeValue(param, OAVBDIMetaModel.modelelement_has_name, name); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.parameterelement_has_parametersets, param); return new MParameterSetFlyweight(getState(), getScope(), param); } } }