From: Lvbo163 Date: Mon, 4 Sep 2017 11:57:31 +0000 (+0800) Subject: support rest task node X-Git-Tag: v1.0.0~58 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=08a13945e82270e6bf27c2d6b26a5dde127ad198;p=sdc%2Fsdc-workflow-designer.git support rest task node support rest task node to call rest api definited by swagger Issue-ID: SDC-271 Change-Id: Ifb4acdd393609da4ce1e9e2cd8d20a2848365b9b Signed-off-by: Lvbo163 --- diff --git a/sdc-workflow-designer-ui/src/app/app.module.ts b/sdc-workflow-designer-ui/src/app/app.module.ts index 19b7b055..302f5b78 100644 --- a/sdc-workflow-designer-ui/src/app/app.module.ts +++ b/sdc-workflow-designer-ui/src/app/app.module.ts @@ -36,6 +36,7 @@ import { MicroserviceComponent } from "./components/menu/microservice/microservi import { MicroserviceListComponent } from "./components/menu/microservice/microservice-list/microservice-list.component"; import { ModalModule } from "ngx-bootstrap/modal"; import { WorkflowConfigService } from "./services/workflow-config.service"; +import { RestTaskComponent } from "./components/property/rest-task/rest-task.component"; @NgModule({ declarations: [ @@ -48,6 +49,7 @@ import { WorkflowConfigService } from "./services/workflow-config.service"; NodeComponent, ParameterComponent, PropertiesComponent, + RestTaskComponent, StartEventParametersComponent, ToolbarComponent, ], diff --git a/sdc-workflow-designer-ui/src/app/components/property/properties.component.html b/sdc-workflow-designer-ui/src/app/components/property/properties.component.html index d7a8500d..2ca5c690 100644 --- a/sdc-workflow-designer-ui/src/app/components/property/properties.component.html +++ b/sdc-workflow-designer-ui/src/app/components/property/properties.component.html @@ -40,4 +40,5 @@ + diff --git a/sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.html b/sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.html new file mode 100644 index 00000000..75422581 --- /dev/null +++ b/sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.html @@ -0,0 +1,44 @@ + + +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
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 new file mode 100644 index 00000000..654d19b9 --- /dev/null +++ b/sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.ts @@ -0,0 +1,113 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ +import { AfterViewInit, Component, Input, OnInit } from '@angular/core'; +import { Subscription } from 'rxjs/Subscription'; + +import { Swagger, SwaggerMethod, SwaggerParameter, SwaggerResponse } from '../../../model/swagger'; +import { ValueSource } from '../../../model/value-source.enum'; +import { ValueType } from '../../../model/value-type.enum'; +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"; + +@Component({ + selector: 'b4t-rest-task', + templateUrl: 'rest-task.component.html', +}) +export class RestTaskComponent implements AfterViewInit, OnInit { + @Input() public node: RestTask; + public swaggerJson: any = {}; + public restInterfaces: any[]; + public restOperations: any = []; + public microservices: Microservice[]; + public selectedMicroservice: Microservice; + private swagger: Swagger; + + constructor(private broadcastService: BroadcastService, + private configService: WorkflowConfigService) { } + + ngOnInit(): void { + this.microservices = this.configService.getMicroservices(); + this.selectedMicroservice = this.microservices.find(service => + (this.node.serviceName === service.name && this.node.serviceVersion === service.version)); + } + public ngAfterViewInit() { + setTimeout(() => { + this.loadInterfaces(); + }, 0); + } + + public getText4Microservice(microservice: Microservice): string { + return `${microservice.name} [${microservice.version}] `; + } + + public serviceChanged(service: Microservice) { + this.selectedMicroservice = service; + this.node.serviceName = service.name; + this.node.serviceVersion = service.version; + this.urlChanged(''); + this.loadInterfaces(); + } + + public urlChanged(url: string) { + this.node.url = url; + + this.node.consumes = []; + this.node.produces = []; + this.methodChanged(''); + + this.loadOperations(); + } + + public methodChanged(method: string) { + this.node.method = method; + + this.node.parameters = []; + this.node.responses = []; + + this.updateMethodInfo(); + } + + + private loadInterfaces() { + if (this.node.serviceName && this.node.serviceVersion) { + this.swagger = this.configService.getSwaggerInfo(this.node.serviceName, this.node.serviceVersion); + + if (this.swagger) { + this.restInterfaces = []; + for (const key of Object.keys(this.swagger.paths)) { + this.restInterfaces.push(key); + } + this.loadOperations(); + } else { + // TODO error handler + } + } + } + + private loadOperations() { + if (this.node.url) { + const swaggerPath: any = this.swagger.paths[this.node.url]; + + this.restOperations = []; + for (const key of Object.keys(swaggerPath)) { + this.restOperations.push(key); + } + } + } + + private updateMethodInfo() { + // TODO update parameters + console.log('rest task updated'); + } +} diff --git a/sdc-workflow-designer-ui/src/app/model/workflow/rest-parameter.ts b/sdc-workflow-designer-ui/src/app/model/workflow/rest-parameter.ts new file mode 100644 index 00000000..ecea3541 --- /dev/null +++ b/sdc-workflow-designer-ui/src/app/model/workflow/rest-parameter.ts @@ -0,0 +1,20 @@ +/** + * 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 + */ +import { Parameter } from './parameter'; +import { WorkflowNode } from './workflow-node'; + +export class RestParameter extends Parameter { + constructor(name: string, value: string, valueSource: string, type: string, + public position: string, public schema: any) { + super(name, value, valueSource, type); + } +} diff --git a/sdc-workflow-designer-ui/src/app/model/workflow/rest-task.ts b/sdc-workflow-designer-ui/src/app/model/workflow/rest-task.ts new file mode 100644 index 00000000..2b3045df --- /dev/null +++ b/sdc-workflow-designer-ui/src/app/model/workflow/rest-task.ts @@ -0,0 +1,25 @@ +/** + * 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 + */ +import { RestParameter } from './rest-parameter'; +import { WorkflowNode } from './workflow-node'; + +export class RestTask extends WorkflowNode { + public serviceName: string; + public serviceVersion: string; + public url: string; + public method: string; + public operationId: string; + public produces: string[] = []; + public consumes: string[] = []; + public parameters: RestParameter[] = []; + public responses: any[] = []; +} diff --git a/sdc-workflow-designer-ui/src/app/services/workflow-config.service.ts b/sdc-workflow-designer-ui/src/app/services/workflow-config.service.ts index 00a2b9ef..469fde92 100644 --- a/sdc-workflow-designer-ui/src/app/services/workflow-config.service.ts +++ b/sdc-workflow-designer-ui/src/app/services/workflow-config.service.ts @@ -15,6 +15,7 @@ import { WorkflowService } from "./workflow.service"; import { Microservice } from "../model/workflow/microservice"; import { Observable } from "rxjs/Rx"; import { HttpService } from "../util/http.service"; +import { Swagger } from "../model/swagger"; /** * WorkflowConfigService @@ -36,4 +37,13 @@ export class WorkflowConfigService { }; return this.httpService.get(url).map(response => response.data); } + + public getSwaggerInfo(serviceName: string, version: string): Swagger { + const microservice = this.getMicroservices().find(service => (service.name === serviceName && service.version === version)); + if(microservice) { + return microservice.swagger; + } else { + return undefined; + } + } } diff --git a/sdc-workflow-designer-ui/src/app/services/workflow.service.ts b/sdc-workflow-designer-ui/src/app/services/workflow.service.ts index 09e0e55e..3a6c5df1 100644 --- a/sdc-workflow-designer-ui/src/app/services/workflow.service.ts +++ b/sdc-workflow-designer-ui/src/app/services/workflow.service.ts @@ -19,6 +19,7 @@ import { Position } from "../model/workflow/position"; import { NodeType } from "../model/workflow/node-type.enum"; import { StartEvent } from "../model/workflow/start-event"; import { SequenceFlow } from "../model/workflow/sequence-flow"; +import { RestTask } from "../model/workflow/rest-task"; /** * WorkflowService @@ -44,6 +45,9 @@ export class WorkflowService { case NodeType[NodeType.startEvent]: node = new StartEvent(this.createId(), name, type, new Position(top, left), []); break; + case NodeType[NodeType.restTask]: + node = new RestTask(this.createId(), name, type, new Position(top, left), []); + break; default: node = new WorkflowNode(this.createId(), name, type, new Position(top, left), []); break;