Package nexj.core.meta.workflow

Examples of nexj.core.meta.workflow.Flow


               return null;
            }
         }
      }

      Flow flow = getFlow(sName);

      if (primary != null)
      {
         if (flow.getMetaclass() == null || !flow.getMetaclass().isUpcast(primary.getMetaclass()))
         {
            throw new WorkflowException("err.workflow.invalidClass",
               new Object[]{flow.getName(), primary.getMetaclass().getName()});
         }

         if (primary.getMetaclass().getPersistenceMapping() == null)
         {
            throw new MetadataException("err.meta.workflow.nonPersistentClass",
               new Object[]{primary.getMetaclass().getName(), flow.getFullName()});
         }
      }

      if (s_logger.isDebugEnabled())
      {
         s_logger.debug("Starting " + flow + " for " + primary);
      }

      boolean bSecure = m_context.isSecure();
      Instance instance = null;

      try
      {
         m_context.setSecure(false);
         instance = new Instance(metaclass, m_context);

         if (list != null)
         {
            list.add(instance);

            if (m_key == null)
            {
               m_key = new FlowKey();
            }

            m_key.instance = primary;
            m_context.getUnitOfWork().cacheTransient(m_key, list);
            m_key = null;
         }

         State state = new State(flow, true);

         state.setReservedValue(0, instance);
         state.setReservedValue(1, state);

         instance.setNew();
         instance.setValue("name", flow.getName());
         instance.setValue("version", Primitive.createInteger(flow.getVersion()));
         instance.setValue("oid", EMPTY_BINARY);
         instance.setValue("class", (primary == null) ? "" : primary.getMetaclass().getName());
         instance.setValue("local", (bGlobal) ? EMPTY_BINARY : GUIDUtil.generateGUID());
         instance.setValue("object", primary);
         instance.setValue("state", state);
View Full Code Here


         String sName = attributes.getHead().toString();

         if (sName.equals("object"))
         {
            Flow flow = getFlow((String)instance.getValue("name"), ((Number)instance.getValue("version")).intValue());
            String sClass = (String)instance.getValue("class");

            if (flow.getMetaclass() == null || sClass == null || sClass.length() == 0)
            {
               instance.setValue("object", null);
            }
            else
            {
               InstanceList list = (InstanceList)m_context.getMetadata().getMetaclass(sClass).invoke("read",
                  new Object[]{flow.getAttributes(), new Pair(Symbol.AT).eq(OID.fromBinary((Binary)instance.getValue("oid"))),
                     null, null, null, null});

               instance.setValue("object", (list.isEmpty()) ? null : list.get(0));
            }
         }
         else if (sName.equals("state"))
         {
            Flow flow = getFlow((String)instance.getValue("name"), ((Number)instance.getValue("version")).intValue());
            State state = new State(flow, (String)instance.getValue("serializedState"),
               (String)instance.getValue("serializedVariables"), m_context);

            state.setReservedValue(0, instance);
            state.setReservedValue(1, state);
View Full Code Here

    * @return The macro script step, or null if no macro is found.
    */
   public static FlowMacroScript loadFlowMacroScript(Element stepElement, String sStepName, Activity activity,
      XMLMetadataHelper helper, Machine machine, boolean bFull)
   {
      Flow flow = activity.getFlow();
      FlowMacro macro = flow.getMetadata().findFlowMacro(stepElement.getNodeName());

      if (macro == null)
      {
         return null;
      }

      if (flow instanceof Workflow && !macro.isWorkflowCompatible() ||
         flow instanceof Service && !macro.isServiceCompatible())
      {
         throw new MetadataException("err.meta." + flow.getPropName() + ".incompatibleMacro",
            new Object[]{macro.getName(), flow.getFullName()});
      }

      FlowMacroScript script = new FlowMacroScript(sStepName);

      script.setActivity(activity);
      script.setMacro(macro);

      NamedNodeMap attributeMap = stepElement.getAttributes();
      Set attributeSet = new HashHolder(attributeMap.getLength());

      for (int i = 0; i < attributeMap.getLength(); ++i)
      {
         attributeSet.add(attributeMap.item(i).getNodeName());
      }

      Object[] args = new Object[macro.getArgumentCount()];

      for (int i = 0, n = macro.getArgumentCount(); i < n; ++i)
      {
         FlowMacro.Argument arg = macro.getArgument(i);
         String sValue = stepElement.getAttribute(arg.getName());

         if (arg.getType() == null || arg.getType() == Primitive.ANY)
         {
            Object value = helper.parse(sValue, arg.getType() == null,
               flow.getPosMap(), Undefined.VALUE,
               machine.getGlobalEnvironment());

            if (bFull)
            {
               script.setArgumentValue(i, value);
            }

            args[i] = (value == Undefined.VALUE) ? arg.getDefault() : value;
         }
         else
         {
            if (sValue == null)
            {
               args[i] = arg.getDefault();

               if (bFull)
               {
                  script.setArgumentValue(i, Undefined.VALUE);
               }
            }
            else
            {
               args[i] = arg.getType().convert(sValue);

               if (bFull)
               {
                  script.setArgumentValue(i, args[i]);
               }
            }
         }

         if (args[i] == Undefined.VALUE)
         {
            throw new MetadataException("err.meta." + flow.getPropName() + ".missingMacroArg",
               new Object[]{arg.getName(), macro.getName(), flow.getFullName()});
         }

         attributeSet.remove(arg.getName());
      }

      attributeSet.remove("name");
      attributeSet.remove("caption");
      attributeSet.remove("description");
      attributeSet.remove("layout");

      if (attributeSet.size() != 0)
      {
         throw new MetadataException("err.meta." + flow.getPropName() + ".macroArgLookup",
            new Object[]{attributeSet.iterator().next(), macro.getName(), flow.getFullName()});
      }

      script.setBody(new Pair(machine.invoke(macro.getFunction(), args)));

      Lookup flowPosMap = flow.getPosMap();
      Lookup macroPosMap = macro.getTextPositionMap();

      if (flowPosMap != null && macroPosMap != null)
      {
         for (Lookup.Iterator itr = macroPosMap.iterator(); itr.hasNext();)
View Full Code Here

               activity.addStep(fork);
               step = join;
            }
            else if (sElement.equals("Assignment"))
            {
               Flow workflow = activity.getFlow();
               Assignment assignment = new Assignment(sStepName);

               assignment.setActivity(activity);
               assignment.setQueue(parseQueueName(XMLUtil.getStringAttr(element, "queue"), activity, m_machine));
               assignment.setPriority(m_helper.parse(XMLUtil.getStringAttr(element, "priority"),
                  false, workflow.getPosMap(), assignment.getPriority(), m_metadata.getGlobalEnvironment()));
               assignment.setAssignee(m_helper.parse(XMLUtil.getStringAttr(element, "assignee"),
                  false, workflow.getPosMap(), assignment.getAssignee(), m_metadata.getGlobalEnvironment()));
               assignment.setOwner(m_helper.parse(XMLUtil.getStringAttr(element, "owner"),
                  false, workflow.getPosMap(), assignment.getOwner(), m_metadata.getGlobalEnvironment()));
               assignment.setCaption(m_helper.parse(XMLUtil.getStringAttr(element, "title"),
                  false, workflow.getPosMap(), XMLUtil.getStringAttr(element, "caption"),
                  m_metadata.getGlobalEnvironment()));
               assignment.setFactory((Pair)m_helper.parse(XMLUtil.getStringAttr(element, "factory"),
                  true, workflow.getPosMap(), assignment.getFactory(),
                  m_metadata.getGlobalEnvironment()));

               boolean bTarget = loadTarget(element, assignment, Boolean.TRUE, null, false);

               activity.addStep(assignment);

               if (isWorkflowHandler(element))
               {
                  AutoCompletion unassignment = new AutoCompletion(assignment);

                  loadWorkflowHandler(element, unassignment, workflow);
                  step = unassignment;
               }
               else
               {
                  step = new ManualCompletion(assignment);
               }

               nextElement = XMLUtil.findFirstElement(element.getNextSibling());

               if (nextElement != null)
               {
                  if (nextElement.getNodeName().equals("UIAction"))
                  {
                     loadTarget(element, assignment, Boolean.TRUE, null, bTarget);
                  }
                  else
                  {
                     nextElement = null;
                  }
               }

               assignment.setNext(step);
            }
            else if (sElement.equals("Semaphore"))
            {
               step = loadSemaphore(element, sStepName, activity, m_machine, new ActivityLoader()
               {
                  public void loadActivity(Element element, Activity activity)
                  {
                     XMLMetadataLoader.this.loadActivity(element.getFirstChild(), activity);
                  }
               });
            }
            else if (sElement.equals("Goto"))
            {
               step = new Goto();
               step.setActivity(activity);
            }
            else if (sElement.equals("Queue"))
            {
               final Flow workflow = activity.getFlow();
               Assignment assignment = new Assignment(sStepName);

               assignment.setActivity(activity);
               assignment.setQueue(parseQueueName(XMLUtil.getStringAttr(element, "queue"), activity, m_machine));
               assignment.setPriority(m_helper.parse(XMLUtil.getStringAttr(element, "priority"),
                  false, workflow.getPosMap(), assignment.getPriority(), m_metadata.getGlobalEnvironment()));
               assignment.setAssignee(m_helper.parse(XMLUtil.getStringAttr(element, "assignee"),
                  false, workflow.getPosMap(), assignment.getAssignee(), m_metadata.getGlobalEnvironment()));
               assignment.setOwner(m_helper.parse(XMLUtil.getStringAttr(element, "owner"),
                  false, workflow.getPosMap(), assignment.getOwner(), m_metadata.getGlobalEnvironment()));
               assignment.setCaption(m_helper.parse(XMLUtil.getStringAttr(element, "title"),
                  false, workflow.getPosMap(), XMLUtil.getStringAttr(element, "caption"),
                  m_metadata.getGlobalEnvironment()));
               assignment.setFactory((Pair)m_helper.parse(XMLUtil.getStringAttr(element, "factory"),
                  true, workflow.getPosMap(), assignment.getFactory(),
                  m_metadata.getGlobalEnvironment()));

               activity.addStep(assignment);
               step = loadQueue(element, assignment);
            }
View Full Code Here

TOP

Related Classes of nexj.core.meta.workflow.Flow

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.