From 4251a21da3b59005344d8b05497639b4d2fda631 Mon Sep 17 00:00:00 2001 From: Lvbo163 Date: Tue, 5 Sep 2017 11:26:28 +0800 Subject: get parameters for rest task get parameters for rest task from swagger definition Issue-ID: SDC-284 Change-Id: I3d3504fffe1e99d1793a74de2af585a5393cb358 Signed-off-by: Lvbo163 --- .../property/rest-task/rest-task.component.ts | 34 ++++++++++++++++++++-- .../src/app/util/workflow-util.ts | 30 +++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 sdc-workflow-designer-ui/src/app/util/workflow-util.ts (limited to 'sdc-workflow-designer-ui') diff --git a/sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.ts b/sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.ts index 654d19b9..58b28370 100644 --- a/sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.ts +++ b/sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.ts @@ -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 index 00000000..504e0903 --- /dev/null +++ b/sdc-workflow-designer-ui/src/app/util/workflow-util.ts @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2017 ZTE Corporation. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and the Apache License 2.0 which both accompany this distribution, + * and are available at http://www.eclipse.org/legal/epl-v10.html + * and http://www.apache.org/licenses/LICENSE-2.0 + * + * Contributors: + * ZTE - initial API and implementation and/or initial documentation + */ +export class WorkflowUtil { + public static deepClone(source: any) { + if (source === null || typeof source !== 'object') { + return source; + } else { + if (source instanceof Array) { + const target = []; + source.forEach(item => target.push(WorkflowUtil.deepClone(item))); + return target; + } else { + const target = {}; + for (const key in source) { + target[key] = WorkflowUtil.deepClone(source[key]); + } + return target; + } + } + } +} -- cgit 1.2.3-korg