From e23c51352e65336af7b0c767779de945c0306747 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 17 Dec 2007 17:06:41 +0000 Subject: [PATCH] [ 1846595 ] 2pack do not set the start node in a workflow after import - Added proper defer endElement processing handling. --- .../src/org/adempiere/pipo/PackInHandler.java | 30 ++++++++++++++----- .../pipo/handler/WorkflowElementHandler.java | 4 +-- ...rkflowNodeNextConditionElementHandler.java | 2 ++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/base/src/org/adempiere/pipo/PackInHandler.java b/base/src/org/adempiere/pipo/PackInHandler.java index d04a4ea213..ac95a90977 100644 --- a/base/src/org/adempiere/pipo/PackInHandler.java +++ b/base/src/org/adempiere/pipo/PackInHandler.java @@ -640,13 +640,17 @@ public class PackInHandler extends DefaultHandler { setupHandlers(); } else { Element e = stack.pop(); - ElementHandler handler = handlers.get(elementValue); - if (handler != null) - handler.endElement(m_ctx, e); - if (e.defer) - defer.add(new DeferEntry(e, false)); - else if (!e.skip) - System.out.println("Processed: " + e.getElementValue() + " - " + e.attributes.getValue(0)); + if (e.defer) { + defer.add(new DeferEntry(e, false)); + } else { + ElementHandler handler = handlers.get(elementValue); + if (handler != null) + handler.endElement(m_ctx, e); + if (e.defer) + defer.add(new DeferEntry(e, false)); + else if (!e.skip) + System.out.println("Processed: " + e.getElementValue() + " - " + e.attributes.getValue(0)); + } } } // endElement @@ -666,12 +670,24 @@ public class PackInHandler extends DefaultHandler { do { int startSize = defer.size(); List tmp = new ArrayList(defer); + List startElements = new ArrayList(); defer.clear(); for (DeferEntry d : tmp) { if (d.startElement) { d.element.defer = false; d.element.unresolved = ""; d.element.pass++; + startElements.add(d.element); + } else { + if (d.element.defer && startElements.contains(d.element)) { + defer.add(d); + continue; + } else { + //only defer endElement + d.element.defer = false; + d.element.unresolved = ""; + d.element.pass++; + } } ElementHandler handler = handlers.get(d.element.getElementValue()); if (handler != null) { diff --git a/base/src/org/adempiere/pipo/handler/WorkflowElementHandler.java b/base/src/org/adempiere/pipo/handler/WorkflowElementHandler.java index 832a348d0c..5a0f15a773 100644 --- a/base/src/org/adempiere/pipo/handler/WorkflowElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/WorkflowElementHandler.java @@ -178,8 +178,8 @@ public class WorkflowElementHandler extends AbstractElementHandler { MWorkflow m_Workflow = new MWorkflow(ctx, element.recordId, getTrxName(ctx)); int id = get_IDWithColumn(ctx, "AD_WF_Node", "Name", name); if (id <= 0) { - log.warning("Failed to resolve start node reference for workflow element. Workflow=" - + m_Workflow.getName() + " StartNode=" + name); + element.defer = true; + element.unresolved = "AD_WF_Node=" + name; return; } m_Workflow.setAD_WF_Node_ID(id); diff --git a/base/src/org/adempiere/pipo/handler/WorkflowNodeNextConditionElementHandler.java b/base/src/org/adempiere/pipo/handler/WorkflowNodeNextConditionElementHandler.java index 90aa01937f..15153a9476 100644 --- a/base/src/org/adempiere/pipo/handler/WorkflowNodeNextConditionElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/WorkflowNodeNextConditionElementHandler.java @@ -65,6 +65,7 @@ public class WorkflowNodeNextConditionElementHandler extends int wfNodeId = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), workflowId, workflowNodeName); if (wfNodeId <= 0) { + element.unresolved = "AD_WF_Node=" + workflowNodeName; element.defer = true; return; } @@ -72,6 +73,7 @@ public class WorkflowNodeNextConditionElementHandler extends int wfNodeNextId = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), workflowId, workflowNodeNextName); if (wfNodeNextId <= 0) { + element.unresolved = "AD_WF_Node=" + workflowNodeNextName; element.defer = true; return; }