get parameters for rest task 99/10299/1
authorLvbo163 <lv.bo163@zte.com.cn>
Tue, 5 Sep 2017 03:26:28 +0000 (11:26 +0800)
committerLvbo163 <lv.bo163@zte.com.cn>
Tue, 5 Sep 2017 03:26:28 +0000 (11:26 +0800)
get parameters for rest task from swagger definition

Issue-ID: SDC-284

Change-Id: I3d3504fffe1e99d1793a74de2af585a5393cb358
Signed-off-by: Lvbo163 <lv.bo163@zte.com.cn>
sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.ts
sdc-workflow-designer-ui/src/app/util/workflow-util.ts [new file with mode: 0644]

index 654d19b..58b2837 100644 (file)
@@ -19,6 +19,8 @@ import { RestTask } from '../../../model/workflow/rest-task';
 import { BroadcastService } from '../../../services/broadcast.service';
 import { WorkflowConfigService } from '../../../services/workflow-config.service';
 import { Microservice } from "../../../model/workflow/microservice";
+import { WorkflowUtil } from "../../../util/workflow-util";
+import { RestParameter } from "../../../model/workflow/rest-parameter";
 
 @Component({
     selector: 'b4t-rest-task',
@@ -107,7 +109,35 @@ export class RestTaskComponent implements AfterViewInit, OnInit {
     }
 
     private updateMethodInfo() {
-        // TODO update parameters
-        console.log('rest task updated');
+        if (this.node.method) {
+            const path: any = this.swagger.paths[this.node.url];
+            const method: SwaggerMethod = path[this.node.method];
+
+            this.node.consumes = WorkflowUtil.deepClone(method.consumes);
+            this.node.produces = WorkflowUtil.deepClone(method.produces);
+
+            // request parameters
+            method.parameters.forEach(param => {
+                const nodeParam = new RestParameter(param.name, '', ValueSource[ValueSource.String],
+                    param.type, param.position, param.schema);
+                this.node.parameters.push(nodeParam);
+            });
+
+            // response parameters
+            const responseParams = this.getResponseParameters(method.responses);
+            this.node.responses = responseParams.map(param => WorkflowUtil.deepClone(param));
+        }
+    }
+
+    private getResponseParameters(responses: any) {
+        let response: SwaggerResponse = null;
+
+        for (const key of Object.keys(responses)) {
+            if (key.startsWith('20')) {
+                response = responses[key];
+            }
+        }
+
+        return [response];
     }
 }
diff --git a/sdc-workflow-designer-ui/src/app/util/workflow-util.ts b/sdc-workflow-designer-ui/src/app/util/workflow-util.ts
new file mode 100644 (file)
index 0000000..504e090
--- /dev/null
@@ -0,0 +1,30 @@
+/**\r
+ * Copyright (c) 2017 ZTE Corporation.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * and the Apache License 2.0 which both accompany this distribution,\r
+ * and are available at http://www.eclipse.org/legal/epl-v10.html\r
+ * and http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Contributors:\r
+ *     ZTE - initial API and implementation and/or initial documentation\r
+ */\r
+export class WorkflowUtil {\r
+    public static deepClone(source: any) {\r
+        if (source === null || typeof source !== 'object') {\r
+            return source;\r
+        } else {\r
+            if (source instanceof Array) {\r
+                const target = [];\r
+                source.forEach(item => target.push(WorkflowUtil.deepClone(item)));\r
+                return target;\r
+            } else {\r
+                const target = {};\r
+                for (const key in source) {\r
+                    target[key] = WorkflowUtil.deepClone(source[key]);\r
+                }\r
+                return target;\r
+            }\r
+        }\r
+    }\r
+}\r