aboutsummaryrefslogtreecommitdiffstats
path: root/sdc-workflow-designer-ui/src/app/components/property/node-template/node-template.component.ts
diff options
context:
space:
mode:
Diffstat (limited to 'sdc-workflow-designer-ui/src/app/components/property/node-template/node-template.component.ts')
-rw-r--r--sdc-workflow-designer-ui/src/app/components/property/node-template/node-template.component.ts132
1 files changed, 132 insertions, 0 deletions
diff --git a/sdc-workflow-designer-ui/src/app/components/property/node-template/node-template.component.ts b/sdc-workflow-designer-ui/src/app/components/property/node-template/node-template.component.ts
new file mode 100644
index 00000000..5d7339d0
--- /dev/null
+++ b/sdc-workflow-designer-ui/src/app/components/property/node-template/node-template.component.ts
@@ -0,0 +1,132 @@
+/**
+ * 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 } from '@angular/core';
+import { Subscription } from '../../../../../node_modules/rxjs/Subscription.d';
+
+import { PlanTreeviewItem } from '../../../model/plan-treeview-item';
+import { NodeTemplate } from '../../../model/topology/node-template';
+import { ValueSource } from '../../../model/value-source.enum';
+import { Parameter } from '../../../model/workflow/parameter';
+import { ToscaNodeTask } from '../../../model/workflow/tosca-node-task';
+import { BroadcastService } from '../../../services/broadcast.service';
+import { DataService } from '../../../services/data/data.service';
+
+/**
+ * node template component provides operations about tosca modules which saved in winery.
+ * This component will be used in the property component while the corresponding workflow node is calling the node template's operation
+ */
+@Component({
+ selector: 'b4t-node-template',
+ templateUrl: 'node-template.component.html',
+})
+export class NodeTemplateComponent implements AfterViewInit {
+ @Input() public node: ToscaNodeTask;
+ @Input() public planItems: PlanTreeviewItem[];
+
+ public inputSources: ValueSource[] = [ValueSource.String, ValueSource.Variable, ValueSource.Topology, ValueSource.Plan];
+ public outputSources: ValueSource[] = [ValueSource.Topology, ValueSource.Plan];
+ public nodeInterfaces: string[] = [];
+ public nodeOperations: any[] = [];
+ public nodeTemplates: NodeTemplate[] = [];
+
+ constructor(private dataService: DataService) {
+ }
+
+ public ngAfterViewInit() {
+ this.dataService.loadNodeTemplates()
+ .subscribe(nodeTemplates => this.nodeTemplates = nodeTemplates);
+
+ this.loadInterfaces();
+ this.loadOperations();
+ }
+
+ public nodeTemplateChanged() {
+ this.setTemplateNamespace();
+
+ this.nodeInterfaceChanged('');
+
+ this.loadInterfaces();
+ }
+
+ public nodeInterfaceChanged(newInterface: string) {
+ this.node.nodeInterface = newInterface;
+
+ this.nodeOperationChanged('');
+
+ this.loadOperations();
+ }
+
+ public nodeOperationChanged(operation: string) {
+ this.node.operation = operation;
+
+ this.node.input = [];
+ this.node.output = [];
+
+ this.loadParameters();
+ }
+
+ private setTemplateNamespace() {
+ const nodeTemplate = this.nodeTemplates.find(
+ tmpNodeTemplate => tmpNodeTemplate.id === this.node.template.id);
+
+ if (nodeTemplate) {
+ this.node.template.namespace = nodeTemplate.namespace;
+ this.node.template.type = nodeTemplate.type;
+ }
+ }
+
+ private loadInterfaces() {
+ if (this.node.template.id) {
+ this.dataService.loadNodeTemplateInterfaces(this.node.template)
+ .subscribe(interfaces => {
+ this.nodeInterfaces = interfaces;
+ });
+ } else {
+ this.nodeInterfaces = [];
+ }
+ }
+
+ private loadOperations() {
+ if (this.node.nodeInterface) {
+ this.nodeOperations = [];
+ this.dataService.loadNodeTemplateOperations(
+ this.node.template,
+ this.node.nodeInterface)
+ .subscribe(operations => this.nodeOperations = operations);
+ } else {
+ this.nodeOperations = [];
+ }
+ }
+
+ private loadParameters() {
+ if (this.node.operation) {
+ this.dataService.loadNodeTemplateOperationParameter(
+ this.node.template,
+ this.node.nodeInterface,
+ this.node.operation)
+ .subscribe(params => {
+ this.node.input = [];
+ this.node.output = [];
+
+ params.input.forEach(param => {
+ const p = new Parameter(param, '', ValueSource[ValueSource.String]);
+ this.node.input.push(p);
+ });
+
+ params.output.forEach(param => {
+ const p = new Parameter(param, '', ValueSource[ValueSource.Definition]);
+ this.node.output.push(p);
+ });
+ });
+ }
+ }
+}