package jadex.bdi.model.impl.flyweights; import jadex.bdi.model.IMEventbase; import jadex.bdi.model.IMInternalEvent; import jadex.bdi.model.IMInternalEventReference; import jadex.bdi.model.IMMessageEvent; import jadex.bdi.model.IMMessageEventReference; import jadex.bdi.model.OAVBDIMetaModel; import jadex.bdi.model.editable.IMEEventbase; import jadex.bdi.model.editable.IMEInternalEvent; import jadex.bdi.model.editable.IMEInternalEventReference; import jadex.bdi.model.editable.IMEMessageEvent; import jadex.bdi.model.editable.IMEMessageEventReference; import jadex.rules.state.IOAVState; import java.util.Collection; import java.util.Iterator; /** * Flyweight for the event base model. */ public class MEventbaseFlyweight extends MElementFlyweight implements IMEventbase, IMEEventbase { //-------- constructors -------- /** * Create a new beliefbase flyweight. * @param state The state. * @param scope The scope handle. */ public MEventbaseFlyweight(IOAVState state, Object scope) { super(state, scope, scope); } //-------- methods -------- /** * Get an internal event for a name. * @param name The event name. */ public IMInternalEvent getInternalEvent(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object handle = getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_internalevents, name); if(handle==null) throw new RuntimeException("Event not found: "+name); object = new MInternalEventFlyweight(getState(), getScope(), handle); } }; return (IMInternalEvent)invoc.object; } else { Object handle = getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_internalevents, name); if(handle==null) throw new RuntimeException("Event not found: "+name); return new MInternalEventFlyweight(getState(), getScope(), handle); } } /** * Get a message event for a name. * @param name The event set name. */ public IMMessageEvent getMessageEvent(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object handle = getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_messageevents, name); if(handle==null) throw new RuntimeException("Event not found: "+name); object = new MInternalEventFlyweight(getState(), getScope(), handle); } }; return (IMMessageEvent)invoc.object; } else { Object handle = getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_messageevents, name); if(handle==null) throw new RuntimeException("Event not found: "+name); return new MMessageEventFlyweight(getState(), getScope(), handle); } } /** * Returns all internal events. * @return All internal events. */ public IMInternalEvent[] getInternalEvents() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_internalevents); IMInternalEvent[] ret = new IMInternalEvent[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MInternalEventFlyweight(getState(), getScope(), it.next()); } } object = ret; } }; return (IMInternalEvent[])invoc.object; } else { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_internalevents); IMInternalEvent[] ret = new IMInternalEvent[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MInternalEventFlyweight(getState(), getScope(), it.next()); } } return ret; } } /** * Return all message events. * @return All message events. */ public IMMessageEvent[] getMessageEvents() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_messageevents); IMMessageEvent[] ret = new IMMessageEvent[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MMessageEventFlyweight(getState(), getScope(), it.next()); } } object = ret; } }; return (IMMessageEvent[])invoc.object; } else { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_messageevents); IMMessageEvent[] ret = new IMMessageEvent[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MMessageEventFlyweight(getState(), getScope(), it.next()); } } return ret; } } /** * Get an internal event reference for a name. * @param name The event name. */ public IMInternalEventReference getInternalEventReference(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object handle = getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_internaleventrefs, name); if(handle==null) throw new RuntimeException("InternalEvent reference not found: "+name); object = new MInternalEventReferenceFlyweight(getState(), getScope(), handle); } }; return (IMInternalEventReference)invoc.object; } else { Object handle = getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_internaleventrefs, name); if(handle==null) throw new RuntimeException("InternalEvent reference not found: "+name); return new MInternalEventReferenceFlyweight(getState(), getScope(), handle); } } /** * Returns all internal event references. * @return All internal event references. */ public IMInternalEventReference[] getInternalEventReferences() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_internaleventrefs); IMInternalEventReference[] ret = new IMInternalEventReference[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MInternalEventReferenceFlyweight(getState(), getScope(), it.next()); } } object = ret; } }; return (IMInternalEventReference[])invoc.object; } else { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_internaleventrefs); IMInternalEventReference[] ret = new IMInternalEventReference[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MInternalEventReferenceFlyweight(getState(), getScope(), it.next()); } } return ret; } } /** * Get a message event reference for a name. * @param name The event set name. */ public IMMessageEventReference getMessageEventReference(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object handle = getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_messageeventrefs, name); if(handle==null) throw new RuntimeException("MessageEvent reference not found: "+name); object = new MMessageEventReferenceFlyweight(getState(), getScope(), handle); } }; return (IMMessageEventReference)invoc.object; } else { Object handle = getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_messageeventrefs, name); if(handle==null) throw new RuntimeException("MessageEvent reference not found: "+name); return new MMessageEventReferenceFlyweight(getState(), getScope(), handle); } } /** * Return all message event references. * @return All message event references. */ public IMMessageEventReference[] getMessageEventReferences() { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_messageeventrefs); IMMessageEventReference[] ret = new IMMessageEventReference[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MMessageEventReferenceFlyweight(getState(), getScope(), it.next()); } } object = ret; } }; return (IMMessageEventReference[])invoc.object; } else { Collection elems = (Collection)getState().getAttributeValue(getScope(), OAVBDIMetaModel.capability_has_messageeventrefs); IMMessageEventReference[] ret = new IMMessageEventReference[elems==null? 0: elems.size()]; if(elems!=null) { int i=0; for(Iterator it=elems.iterator(); it.hasNext(); ) { ret[i++] = new MMessageEventReferenceFlyweight(getState(), getScope(), it.next()); } } return ret; } } /** * Create an internal with name. * @param name The event name. */ public IMEInternalEvent createInternalEvent(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object elem = getState().createObject(OAVBDIMetaModel.internalevent_type); getState().setAttributeValue(elem, OAVBDIMetaModel.modelelement_has_name, name); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.capability_has_internaleventrefs, elem); object = new MInternalEventFlyweight(getState(), getScope(), elem); } }; return (IMEInternalEvent)invoc.object; } else { Object elem = getState().createObject(OAVBDIMetaModel.internalevent_type); getState().setAttributeValue(elem, OAVBDIMetaModel.modelelement_has_name, name); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.capability_has_internaleventrefs, elem); return new MInternalEventFlyweight(getState(), getScope(), elem); } } /** * Create a message with name. * @param name The event set name. */ public IMEMessageEvent createMessageEvent(final String name) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object elem = getState().createObject(OAVBDIMetaModel.messageevent_type); getState().setAttributeValue(elem, OAVBDIMetaModel.modelelement_has_name, name); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.capability_has_messageeventrefs, elem); object = new MMessageEventFlyweight(getState(), getScope(), elem); } }; return (IMEMessageEvent)invoc.object; } else { Object elem = getState().createObject(OAVBDIMetaModel.messageevent_type); getState().setAttributeValue(elem, OAVBDIMetaModel.modelelement_has_name, name); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.capability_has_messageeventrefs, elem); return new MMessageEventFlyweight(getState(), getScope(), elem); } } /** * Create an internal event reference. * @param name The event name. * @param ref The name of referenced element. */ public IMEInternalEventReference createInternalEventReference(final String name, final String ref) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object elem = getState().createObject(OAVBDIMetaModel.internaleventreference_type); getState().setAttributeValue(elem, OAVBDIMetaModel.modelelement_has_name, name); if(ref!=null) getState().setAttributeValue(elem, OAVBDIMetaModel.elementreference_has_concrete, ref); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.capability_has_internaleventrefs, elem); object = new MInternalEventReferenceFlyweight(getState(), getScope(), elem); } }; return (IMEInternalEventReference)invoc.object; } else { Object elem = getState().createObject(OAVBDIMetaModel.internaleventreference_type); getState().setAttributeValue(elem, OAVBDIMetaModel.modelelement_has_name, name); if(ref!=null) getState().setAttributeValue(elem, OAVBDIMetaModel.elementreference_has_concrete, ref); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.capability_has_internaleventrefs, elem); return new MInternalEventReferenceFlyweight(getState(), getScope(), elem); } } /** * Create a message event reference. * @param name The event set name. * @param ref The name of referenced element. */ public IMEMessageEventReference createMessageEventReference(final String name, final String ref) { if(isExternalThread()) { AgentInvocation invoc = new AgentInvocation() { public void run() { Object elem = getState().createObject(OAVBDIMetaModel.messageeventreference_type); getState().setAttributeValue(elem, OAVBDIMetaModel.modelelement_has_name, name); if(ref!=null) getState().setAttributeValue(elem, OAVBDIMetaModel.elementreference_has_concrete, ref); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.capability_has_messageeventrefs, elem); object = new MMessageEventReferenceFlyweight(getState(), getScope(), elem); } }; return (IMEMessageEventReference)invoc.object; } else { Object elem = getState().createObject(OAVBDIMetaModel.messageeventreference_type); getState().setAttributeValue(elem, OAVBDIMetaModel.modelelement_has_name, name); if(ref!=null) getState().setAttributeValue(elem, OAVBDIMetaModel.elementreference_has_concrete, ref); getState().addAttributeValue(getHandle(), OAVBDIMetaModel.capability_has_messageeventrefs, elem); return new MMessageEventReferenceFlyweight(getState(), getScope(), elem); } } }