Merge branch 'master' into 32-camunda-reporting-input-format
authorDavid Kaufmann <david.kaufmann@student.tuwien.ac.at>
Thu, 29 Nov 2018 00:18:28 +0000 (01:18 +0100)
committerDavid Kaufmann <david.kaufmann@student.tuwien.ac.at>
Thu, 29 Nov 2018 00:18:28 +0000 (01:18 +0100)
camunda-overlay/camunda.py
camunda-overlay/sentiment-analysis.bpmn

index 8ecaa0c027b984fad8798c7ddf6b35b6eb218d74..65ad271d3e74ac9e130f4bea08093ecd54ba8305 100755 (executable)
@@ -14,6 +14,13 @@ def get_current_deployments(key = 'sentiment-analysis'):
     #return [proc for proc in res.json() if proc['name'] == key]
     return res.json()
 
+def get_current_process_instances(key = 'sentiment-analysis'):
+    res = requests.get(CAMUNDA + 'process-instance')
+    if (key is None):
+        return res.json()
+    else:
+        return [instance for instance in res.json() if instance['definitionId'].startswith(key + ":")]
+
 def cleanup_old_deployments(key='sentiment-analysis'):
     print ("Cleaning up old deployments")
     for deployment in get_current_deployments(key):
@@ -77,6 +84,18 @@ def submit_terms(terms):
             except:
                 pprint(res.content)
 
+def download_pdf():
+    instances = get_current_process_instances()
+    if len(instances) == 0:
+        print ("Error: no running instance found.")
+        return
+    instance = instances[0]['id']
+    res = requests.get(CAMUNDA + 'process-instance/' + instance + '/variables')
+    try:
+        pprint(res.json())
+    except:
+        pprint(res.content)
+
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
     parser.add_argument('--no-deploy', dest='deploy', default=True, action='store_false', help="Do not run the deployment step")
@@ -91,3 +110,6 @@ if __name__ == "__main__":
     if args.autoclick >= 1:
         # start clicking
         submit_terms(["voting", "phonegate", "35c3"])
+
+    if args.autoclick >= 2:
+        download_pdf()
index 00637579c8db3ba092c477c344c0c8a71b83bbae..101e7ecccbaf2cfec6207d0b56c81a93c2973fcb 100644 (file)
@@ -35,7 +35,8 @@ var termStr = term.prop('term').value();
 //results.prop(termStr, analysis);
 // this is for list
 var item = {};
-item[termStr] = analysis;
+item["name"] = termStr;
+item["sentiment"] = analysis;
 results.append(item)
 
 execution.setVariable("results", S(results))</camunda:script>
@@ -114,18 +115,103 @@ S(response);</camunda:script>
             <camunda:inputParameter name="method">POST</camunda:inputParameter>
             <camunda:inputParameter name="headers">
               <camunda:map>
-                <camunda:entry key="Accept">application/pdf</camunda:entry>
+                <camunda:entry key="Accept">application/base64</camunda:entry>
                 <camunda:entry key="Content-Type">application/json</camunda:entry>
               </camunda:map>
             </camunda:inputParameter>
             <camunda:inputParameter name="payload">${results.toString()}</camunda:inputParameter>
             <camunda:outputParameter name="reportPDF">
               <camunda:script scriptFormat="javascript">var response = connector.getVariable("response");
-print ("response: ")
-print (response)
-var file = Java.type('org.camunda.bpm.engine.variable.Variables').fileValue("pdfTest").file(response.getBytes("utf-8")).mimeType('application/pdf').create()
-//response.getBytes("utf-8")
-file</camunda:script>
+// from nodejs base64 package                            
+var lookup = []
+var revLookup = []
+var javaByteArray = Java.type('byte[]')
+
+var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+for (var i = 0, len = code.length; i &lt; len; ++i) {
+  lookup[i] = code[i]
+  revLookup[code.charCodeAt(i)] = i
+}
+
+// Support decoding URL-safe base64 strings, as Node.js does.
+// See: https://en.wikipedia.org/wiki/Base64#URL_applications
+revLookup['-'.charCodeAt(0)] = 62
+revLookup['_'.charCodeAt(0)] = 63
+
+function getLens (b64) {
+  var len = b64.length
+
+  if (len % 4 &gt; 0) {
+    throw new Error('Invalid string. Length must be a multiple of 4')
+  }
+
+  // Trim off extra bytes after placeholder bytes are found
+  // See: https://github.com/beatgammit/base64-js/issues/42
+  var validLen = b64.indexOf('=')
+  if (validLen === -1) validLen = len
+
+  var placeHoldersLen = validLen === len
+    ? 0
+    : 4 - (validLen % 4)
+
+  return [validLen, placeHoldersLen]
+}
+
+function _byteLength (b64, validLen, placeHoldersLen) {
+  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
+}
+
+function toByteArray (b64) {
+  var tmp
+  var lens = getLens(b64)
+  var validLen = lens[0]
+  var placeHoldersLen = lens[1]
+
+  var arr = new javaByteArray(_byteLength(b64, validLen, placeHoldersLen))
+
+  var curByte = 0
+
+  // if there are placeholders, only get up to the last complete 4 chars
+  var len = placeHoldersLen &gt; 0
+    ? validLen - 4
+    : validLen
+
+  for (var i = 0; i &lt; len; i += 4) {
+    tmp =
+      (revLookup[b64.charCodeAt(i)] &lt;&lt; 18) |
+      (revLookup[b64.charCodeAt(i + 1)] &lt;&lt; 12) |
+      (revLookup[b64.charCodeAt(i + 2)] &lt;&lt; 6) |
+      revLookup[b64.charCodeAt(i + 3)]
+    arr[curByte++] = (tmp &gt;&gt; 16) &amp; 0xFF
+    arr[curByte++] = (tmp &gt;&gt; 8) &amp; 0xFF
+    arr[curByte++] = tmp &amp; 0xFF
+  }
+
+  if (placeHoldersLen === 2) {
+    tmp =
+      (revLookup[b64.charCodeAt(i)] &lt;&lt; 2) |
+      (revLookup[b64.charCodeAt(i + 1)] &gt;&gt; 4)
+    arr[curByte++] = tmp &amp; 0xFF
+  }
+
+  if (placeHoldersLen === 1) {
+    tmp =
+      (revLookup[b64.charCodeAt(i)] &lt;&lt; 10) |
+      (revLookup[b64.charCodeAt(i + 1)] &lt;&lt; 4) |
+      (revLookup[b64.charCodeAt(i + 2)] &gt;&gt; 2)
+    arr[curByte++] = (tmp &gt;&gt; 8) &amp; 0xFF
+    arr[curByte++] = tmp &amp; 0xFF
+  }
+
+  return arr
+}
+
+var source = "kP/+kA==";
+var decoded = toByteArray(source);
+//decoded
+var file = Java.type('org.camunda.bpm.engine.variable.Variables').fileValue("pdfTest").file(toByteArray(response)).mimeType('application/pdf').create()
+file
+</camunda:script>
             </camunda:outputParameter>
           </camunda:inputOutput>
           <camunda:connectorId>http-connector</camunda:connectorId>