You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by sa...@apache.org on 2014/07/21 21:36:43 UTC

git commit: ODE-1017: Backported setVariable operation in PMAPI from trunk

Repository: ode
Updated Branches:
  refs/heads/ode-1.3.x 79a1094a0 -> 7f6f94c05


ODE-1017: Backported setVariable operation in PMAPI from trunk


Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/7f6f94c0
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/7f6f94c0
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/7f6f94c0

Branch: refs/heads/ode-1.3.x
Commit: 7f6f94c0509696601d58fe0154fd6ea166c8662d
Parents: 79a1094
Author: sathwik <sa...@apache.org>
Authored: Tue Jul 22 01:06:25 2014 +0530
Committer: sathwik <sa...@apache.org>
Committed: Tue Jul 22 01:06:25 2014 +0530

----------------------------------------------------------------------
 axis2/src/main/wsdl/pmapi.wsdl                  | 25 +++++++++++
 .../ProcessAndInstanceManagementImpl.java       | 46 ++++++++++++++++++++
 .../java/org/apache/ode/utils/DOMUtils.java     |  8 ++++
 3 files changed, 79 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/7f6f94c0/axis2/src/main/wsdl/pmapi.wsdl
----------------------------------------------------------------------
diff --git a/axis2/src/main/wsdl/pmapi.wsdl b/axis2/src/main/wsdl/pmapi.wsdl
index ef619bd..5517a8b 100644
--- a/axis2/src/main/wsdl/pmapi.wsdl
+++ b/axis2/src/main/wsdl/pmapi.wsdl
@@ -172,6 +172,14 @@
     <message name="getVariableInfoOutput">
         <part name="variable-info" type="typ:tVariableInfo"/>
     </message>
+    <message name="setVariableInput">
+        <part name="sid" type="xsd:string"/>
+        <part name="varName" type="xsd:string"/>
+        <part name="value" type="xsd:anyType"/>
+    </message>
+    <message name="setVariableOutput">
+        <part name="scope-info" type="typ:tVariableInfo"/>
+    </message>
     <message name="listEventsInput">
         <part name="instanceFilter" type="xsd:string"/>
         <part name="eventFilter" type="xsd:string"/>
@@ -340,6 +348,11 @@
             <output message="tns:getVariableInfoOutput"/>
             <fault name="ManagementFault" message="tns:managementFault"/>
         </operation>
+        <operation name="setVariable">
+            <input message="tns:setVariableInput"/>
+            <output message="tns:setVariableOutput"/>
+            <fault name="ManagementFault" message="tns:managementFault"/>
+        </operation>
         <operation name="listEvents">
             <input message="tns:listEventsInput"/>
             <output message="tns:listEventsOutput"/>
@@ -626,6 +639,18 @@
                 <soap:fault name="ManagementFault" use="literal"/>
              </fault>
         </operation>
+        <operation name="setVariable">
+            <soap:operation soapAction="" style="rpc"/>
+            <input>
+                <soap:body namespace="http://www.apache.org/ode/pmapi" use="literal"/>
+            </input>
+            <output>
+                <soap:body namespace="http://www.apache.org/ode/pmapi" use="literal"/>
+            </output>
+            <fault name="ManagementFault">
+                <soap:fault name="ManagementFault" use="literal"/>
+             </fault>
+        </operation>
         <operation name="listEvents">
             <soap:operation soapAction="" style="rpc"/>
             <input>

http://git-wip-us.apache.org/repos/asf/ode/blob/7f6f94c0/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
index d21f378..9523121 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
@@ -19,6 +19,7 @@
 
 package org.apache.ode.bpel.engine;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.text.ParseException;
 import java.util.ArrayList;
@@ -140,6 +141,8 @@ import org.apache.ode.utils.msg.MessageBundle;
 import org.apache.ode.utils.stl.CollectionsX;
 import org.apache.ode.utils.stl.MemberOfFunction;
 import org.apache.ode.utils.stl.UnaryFunction;
+import org.apache.xmlbeans.XmlObject;
+import org.apache.xmlbeans.XmlOptions;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -457,6 +460,49 @@ public class ProcessAndInstanceManagementImpl implements InstanceManagement, Pro
         return ret;
     }
 
+	public VariableInfoDocument setVariable(final String scopeId,final String varName, final XmlObject value) throws ManagementException {
+		VariableInfoDocument ret = VariableInfoDocument.Factory.newInstance();
+		final TVariableInfo vinf = ret.addNewVariableInfo();
+		final TVariableRef sref = vinf.addNewSelf();
+		dbexec(new BpelDatabase.Callable<Object>() {
+			public Object run(BpelDAOConnection session) throws Exception {
+				ScopeDAO scope = session.getScope(new Long(scopeId));
+				if (scope == null) {
+					throw new InvalidRequestException("ScopeNotFound:"
+							+ scopeId);
+				}
+
+				sref.setSiid(scopeId);
+				sref.setIid(scope.getProcessInstance().getInstanceId()
+						.toString());
+				sref.setName(varName);
+
+				XmlDataDAO var = scope.getVariable(varName);
+				if (var == null) {
+					throw new InvalidRequestException("VarNotFound:" + varName);
+				}
+
+				{
+					ByteArrayOutputStream out = new ByteArrayOutputStream();
+					value.save(out, new XmlOptions().setSaveOuter());
+					Node value2 = DOMUtils.getFirstChildElement(DOMUtils
+							.stringToDOM(out.toString()));
+					var.set(value2);
+				}
+
+				Node nval = var.get();
+				if (nval != null) {
+					TVariableInfo.Value val = vinf.addNewValue();
+					val.getDomNode().appendChild(
+							val.getDomNode().getOwnerDocument()
+									.importNode(nval, true));
+				}
+				return null;
+			}
+		});
+		return ret;
+	}
+
     //
     // INSTANCE ACTIONS
     //

http://git-wip-us.apache.org/repos/asf/ode/blob/7f6f94c0/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/main/java/org/apache/ode/utils/DOMUtils.java b/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
index a9d30de..d8714c3 100644
--- a/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
+++ b/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
@@ -135,6 +135,14 @@ public class DOMUtils {
         return out.toString();
     }
 
+    public static Element getFirstChildElement(Node node) {
+        NodeList l = node.getChildNodes();
+        for (int i = 0; i < l.getLength(); i++) {
+            if (l.item(i) instanceof Element) return (Element) l.item(i);
+        }
+        return null;
+    }
+
     /**
      * Returns the value of an attribute of an element. Returns null if the
      * attribute is not found (whereas Element.getAttributeNS returns "" if an