diff options
author | 2017-09-04 19:57:31 +0800 | |
---|---|---|
committer | 2017-09-04 19:57:31 +0800 | |
commit | 08a13945e82270e6bf27c2d6b26a5dde127ad198 (patch) | |
tree | 2d3ea524c9b7e5b969f716e11bfa950538b64abb /sdc-workflow-designer-ui/src/app/components/property/rest-task | |
parent | 76f9fa54825d98013182524d16290f04e3c9398a (diff) |
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 <lv.bo163@zte.com.cn>
Diffstat (limited to 'sdc-workflow-designer-ui/src/app/components/property/rest-task')
-rw-r--r-- | sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.html | 44 | ||||
-rw-r--r-- | sdc-workflow-designer-ui/src/app/components/property/rest-task/rest-task.component.ts | 113 |
2 files changed, 157 insertions, 0 deletions
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 @@ +<!-- +/******************************************************************************* + * 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 + *******************************************************************************/ +--> + +<div class="form-group row"> + <label class="col-md-3 form-control-label text-md-right">Service</label> + <div class="col-md-9"> + <select class="form-control" [ngModel]="selectedMicroservice" + (ngModelChange)="serviceChanged($event)"> + <option *ngFor="let microservice of microservices" [ngValue]=microservice>{{getText4Microservice(microservice)}}</option> + </select> + </div> +</div> + +<div class="form-group row"> + <label class="col-md-3 form-control-label text-md-right">Path</label> + <div class="col-md-9"> + <select class="form-control" [ngModel]="node.url" + (ngModelChange)="urlChanged($event)"> + <option *ngFor="let interface of restInterfaces" value="{{interface}}">{{interface}}</option> + </select> + </div> +</div> + +<div class="form-group row"> + <label class="col-md-3 form-control-label text-md-right">Method</label> + <div class="col-md-9"> + <select class="form-control" [ngModel]="node.method" + (ngModelChange)="methodChanged($event)"> + <option *ngFor="let operation of restOperations" value="{{operation}}">{{operation}}</option> + </select> + </div> +</div> +<hr> 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'); + } +} |