Package nexj.core.meta

Examples of nexj.core.meta.Event


            {
               throw new SecurityViolationException("err.rpc.eventVisibility",
                  new Object[]{member.getName(), metaclass.getName()});
            }

            Event event = (Event)member;
            Object[] args = new Object[nArgCount + 1];

            if (arguments != null)
            {
               for (int k = 0; k < nArgCount; ++k)
               {
                  args[k + 1] = instanceFactory.instantiate(arguments[k]);
               }
            }

            if (event.isStatic())
            {
               args[0] = metaclass;

               if (arguments == null)
               {
                  int nEventArgCount = event.getArgumentCount();

                  if (event.isVarArg())
                  {
                     --nEventArgCount;
                  }

                  for (int k = 0; k < nEventArgCount; ++k)
                  {
                     args[k + 1] = instanceFactory.instantiate(tobj.getValue(event.getArgument(k).getName()));
                  }

                  if (event.isVarArg())
                  {
                     int nArg = nEventArgCount;

                     for (PropertyIterator itr = tobj.getIterator(); itr.hasNext();)
                     {
                        itr.next();

                        Argument arg = event.findArgument(itr.getName());

                        if (arg == null || arg == event.getArgument(nEventArgCount))
                        {
                           args[++nArg] = new Pair(Symbol.define(itr.getName()), instanceFactory.instantiate(itr.getValue()));
                        }
                     }
                  }
               }

               // Allow auditing of static events
               identityMap.put(tobj, null);
            }
            else
            {
               args[0] = instanceFactory.instantiate(tobj);
            }

            eventArray[i] = event;
            argArray[i] = args;
            eventMap.put(tobj, event);
         }

         Lookup diffMap = null;

         // Instantiate the transfer objects from the instance filters
         if (bInstanceFilter)
         {
            diffMap = new HashTab();

            for (int i = 0; i < nFilterCount; ++i)
            {
               m_context.setTransient(bTransient);

               TransferObject tobj = request.getFilter(i);
               Object instances = tobj.findValue("instances");

               if (instances != null)
               {
                  List instanceList = (List)instances;
                  int nCount = instanceList.size();

                  for (int k = 0; k < nCount; ++k)
                  {
                     tobj = (TransferObject)instanceList.get(k);

                     Instance inst = instanceFactory.instantiate(tobj);

                     instanceList.set(k, inst);

                     if (inst != null)
                     {
                        diffMap.put(inst, tobj);
                     }
                  }
               }
            }
         }

         instanceFactory.complete();
         instanceFactory = null;
         GenericServer.auditRequest(identityMap, eventMap, m_context);
         identityMap = null;

         Object[] resultArray = new Object[nInvocationCount << 1];

         // Unset the pending event flag on the request argument instances
         for (int i = 0; i < nInvocationCount; ++i)
         {
            Object[] args = argArray[i];
            Object obj = args[0];

            if (obj instanceof Instance)
            {
               Instance instance = (Instance)obj;

               if (args.length == 1 && eventArray[i].getName().equals(instance.getPendingEventName()))
               {
                  resultArray[i << 1] = instance;
               }

               instance.suspendEvent();
            }
         }

         m_context.setTransient(false);
         uow.invokePendingEvents(false, false);

         // Invoke the events and accumulate the results
         for (int i = 0; i < nInvocationCount; ++i)
         {
            TransferObject tobj = request.getObject(i);
            Event event = eventArray[i];
            Pair attributes = EMPTY_PAIR;
            Object[] args = argArray[i];
            Object obj = args[0];
            int nAttrIndex = -1;

            m_context.setTransient(event.isTransient(bTransient));

            if (event.getArgumentCount() != 0)
            {
               Argument arg = event.findArgument("attributes");

               if (arg != null)
               {
                  nAttrIndex = arg.getOrdinal() + 1;

                  Object value = args[nAttrIndex];

                  attributes = (value instanceof Pair) ? (Pair)value : null;
               }
            }

            if (nAttrIndex < 0)
            {
               Object value = tobj.findValue("attributes", EMPTY_PAIR);

               if (value != EMPTY_PAIR)
               {
                  nAttrIndex = 0;
                  attributes =  (Pair)value;
               }
            }

            if (event.isStatic() && m_context.isProtected() && m_context.isSecure())
            {
               Metaclass metaclass = event.getMetaclass();
               Argument result = event.getResult();

               if (result != null && !result.getType().isPrimitive())
               {
                  metaclass = (Metaclass)result.getType();
               }

               if (nAttrIndex > 0)
               {
                  Pair security = metaclass.checkReadAccess(attributes, m_context.getPrivilegeSet());
  
                  if (security != null)
                  {
                     args[nAttrIndex] = Pair.nconc(security, attributes);
                  }
               }

               metaclass.checkExpressionAccess(findArg(event, "where", args, tobj),  m_context.getPrivilegeSet());
               metaclass.checkOrderByAccess(findArg(event, "orderBy", args, tobj), m_context.getPrivilegeSet());
            }

            boolean bInvoked = false;
            boolean bDeleted = false;

            m_context.setUnitOfWork(uow);
            m_context.setTransient(event.isTransient(bTransient));

            if (obj instanceof Instance)
            {
               Instance instance = (Instance)obj;
               UnitOfWork instanceUOW = instance.getUnitOfWork();

               // Use the instance UoW
               if (!event.isStatic() && instanceUOW != null && instanceUOW != uow)
               {
                  m_context.setUnitOfWork(instanceUOW);
               }

               bInvoked = instance.invokeSuspendedEvent();
               bDeleted = (instance.getState() == Instance.DELETED);

               if (nAttrIndex <= 0)
               {
                  Attribute attribute = instance.getMetaclass().findAttribute("attributes");

                  if (attribute != null && !attribute.isStatic())
                  {
                     attributes = (Pair)instance.getValue(attribute.getOrdinal());
                  }
               }
            }

            if (resultArray[i << 1] == null)
            {
               if (!bDeleted)
               {
                  resultArray[i << 1] = event.invoke(args, m_context.getMachine());
               }
            }
            else
            {
               if (!bInvoked && !bDeleted)
               {
                  event.invoke(args, m_context.getMachine());
               }

               eventArray[i] = null;
            }
View Full Code Here


      {
         if (itr.next() instanceof TransferObject)
         {
            TransferObject tobj = (TransferObject)itr.getKey();
            Instance instance = (Instance)itr.getValue();
            Event pendingEvent = null;
            Event event = null;

            if (instance != null && instance.isEventPending())
            {
               pendingEvent = (Event)instance.getMetaclass().getSelector(instance.getPendingEventName()).getMember(0);
            }
View Full Code Here

   protected Object unmarshal(Metaclass metaclass, String sContext) throws IOException, RequestException
   {
      XMLUnmarshaller unmarshaller = new XMLUnmarshaller(m_context);
      String sMethod = getMethod();
      OID oid = null;
      Event event = null;

      if (sContext.length() != 0)
      {
         int i = sContext.indexOf('/');
         String sOID;
View Full Code Here

         if (!(member instanceof Event) || member.isStatic() != bStatic)
         {
            continue;
         }

         Event event = (Event)member;
         boolean bMatch = true;

         // go through all event arguments and check that they were specified
         for (int k = 0, nCount = event.getArgumentCount(); k < nCount && bMatch; ++k)
         {
            Argument arg = event.getArgument(k);

            bMatch = !arg.isRequired() || getParameter(arg.getName()) != null;
         }

         if (bMatch) // ensure all required arguments for this event exist
View Full Code Here

      super.addEventDependencies(meta);

      // exported events require that all <element> types are defined, need to define "-array" types
      for (int i = 0, nCount = meta.getEventCount(); i < nCount; ++i)
      {
         Event event = meta.getEvent(i);

         if (isExportedEvent(event))
         {
            Argument result = event.getResult();

            // check if array <element> required for return type
            if (result != null && result.isCollection())
            {
               m_requiredArrayTypeSet.add(result.getType());
View Full Code Here

         m_writer.endElement("method");

         // output static event method hooks
         for (int i = 0, nCount = metaclass.getEventCount(); i < nCount; ++i)
         {
            Event event = metaclass.getEvent(i);

            if (event.isStatic() && isExportedEvent(event))
            {
               writeEventMethod(event, null);
            }
         }

         writeEventResources(metaclass, true); // output static event resource hooks

         m_writer.openElement("resource");
            m_writer.writeAttribute("path", "{oid}");
            m_writer.writeAttribute("queryType", "text/xml");
         m_writer.closeElement();

            m_writer.openElement("param");
               m_writer.writeAttribute("href", "#authorization");
            m_writer.closeEmptyElement();

            m_writer.openElement("param");
               m_writer.writeAttribute("name", "oid");
               m_writer.writeAttribute("style", "template");
               m_writer.writeAttribute("type", XML.XSD_NS, ":hexBinary");
            m_writer.closeEmptyElement();

            m_writer.openElement("method");
               m_writer.writeAttribute("href", "#read-request");
            m_writer.closeEmptyElement();

            m_writer.openElement("method");
               m_writer.writeAttribute("name", "POST");
            m_writer.closeElement();

               m_writer.startElement("request");
                  writeParam("attributes", null);
                  writeRepresentation(XML.TNS_NS, metaclass.getName(), null, null, null);
               m_writer.endElement("request");

               m_writer.startElement("response");

                  writeRepresentation(XML.TNS_NS, metaclass.getName(), null, null, null);
                  writeRepresentation(XML.TNS_NS, XML.BASE_PREFIX, "Nil", null, null);

                  m_writer.openElement("fault");
                     m_writer.writeAttribute("href", "#exception");
                  m_writer.closeEmptyElement();
               m_writer.endElement("response");
            m_writer.endElement("method");

            m_writer.openElement("method");
               m_writer.writeAttribute("name", "PUT");
            m_writer.closeElement();

               m_writer.startElement("request");
                  writeParam("attributes", null);
                  writeRepresentation(XML.TNS_NS, metaclass.getName(), null, null, null);
               m_writer.endElement("request");

               m_writer.startElement("response");

                  writeRepresentation(XML.TNS_NS, metaclass.getName(), null, null, null);

                  m_writer.openElement("fault");
                     m_writer.writeAttribute("href", "#exception");
                  m_writer.closeEmptyElement();
               m_writer.endElement("response");

            m_writer.endElement("method");


            m_writer.openElement("method");
               m_writer.writeAttribute("name", "DELETE");
            m_writer.closeElement();

               m_writer.startElement("request");
               m_writer.endElement("request");

               m_writer.startElement("response");
                  m_writer.openElement("fault");
                     m_writer.writeAttribute("href", "#exception");
                  m_writer.closeEmptyElement();
               m_writer.endElement("response");

            m_writer.endElement("method");

            // output non-static event method hooks
            for (int i = 0, nCount = metaclass.getEventCount(); i < nCount; ++i)
            {
               Event event = metaclass.getEvent(i);

               if (!event.isStatic() && isExportedEvent(event))
               {
                  writeEventMethod(event, null);
               }
            }
View Full Code Here

         String sEvURI = m_sURI + '/' + m_sType;

         // create unmarshallers for all WSDL exported events
         for (int i = 0, nCount = m_metaclass.getEventCount(); i < nCount; ++i)
         {
            Event event = m_metaclass.getEvent(i);

            if (event.getVisibility() == Metaclass.PUBLIC)
            {
               QName type = new QName(sEvURI, XSDGenerator.computeElementName(event));

               m_eventMap.put(type, new EventUnmarshaller(type, event));
            }
View Full Code Here

      assert meta != null;

      // add all event argument types
      for (int i = 0, nCount = meta.getEventCount(); i < nCount; ++i)
      {
         Event event = meta.getEvent(i);

         if (!isExportedEvent(event))
         {
            continue; // ignored event
         }

         for (int k = 0, nArgCount = event.getArgumentCount(); k < nArgCount; ++k)
         {
            Argument arg = event.getArgument(k);
            Type type = arg.getType();

            setRequiredType(type, arg.isCollection());

            if (event.isVarArg() && k == nArgCount - 1) //varArg args might require arrays e.g. WSDL
            {
               setRequiredType(type, true);
            }
         }

         if (!isExportedEventResult(event))
         {
            continue; // skip result types that are not exported
         }

         Argument result = event.getResult();

         if (result == null) // undeclared
         {
            setRequiredType(Primitive.ANY, false);
         }
View Full Code Here

            m_writer.writeAttribute("transport", XML.NS_URI_SOAP_HTTP);
         m_writer.closeEmptyElement();

         for (int i = 0, nCount = meta.getEventCount(); i < nCount; ++i)
         {
            Event event = meta.getEvent(i);

            if (isExportedEvent(event))
            {
               writeBindingOperation(computeElementName(event), null, isExportedEventResult(event));
            }
View Full Code Here

    */
   protected void writeMessages(Metaclass meta) throws IOException
   {
      for (int i = 0, nCount = meta.getEventCount(); i < nCount; ++i)
      {
         Event event = meta.getEvent(i);

         if (isExportedEvent(event))
         {
            String sEvent = computeElementName(event);

View Full Code Here

TOP

Related Classes of nexj.core.meta.Event

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.