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 <[email protected]>
Authored: Tue Jul 22 01:06:25 2014 +0530
Committer: sathwik <[email protected]>
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

Reply via email to