1 import { Component, OnDestroy, OnInit } from '@angular/core';
2 import { DesignerStore } from '../designer.store';
3 import { PackageCreationStore } from '../../package-creation/package-creation.store';
4 import { Subject } from 'rxjs';
5 import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
6 import { CBAPackage } from '../../package-creation/mapping-models/CBAPacakge.model';
7 import { TemplateAndMapping } from '../../package-creation/template-mapping/TemplateAndMapping';
8 import { FunctionsStore } from '../functions.store';
11 selector: 'app-functions-attribute',
12 templateUrl: './functions-attribute.component.html',
13 styleUrls: ['./functions-attribute.component.css']
15 export class FunctionsAttributeComponent implements OnInit, OnDestroy {
17 ngUnsubscribe = new Subject();
18 designerDashboardState: DecodeSuccessCallback;
19 cbaPackage: CBAPackage;
20 templateAndMappingMap = new Map<string, TemplateAndMapping>();
21 selectedTemplates = new Map<string, TemplateAndMapping>();
23 requiredInputs = new Map<string, {}>();
24 requiredOutputs = new Map<string, {}>();
25 OptionalInputs = new Map<string, {}>();
26 optionalOutputs = new Map<string, {}>();
27 artifactPrefix = false;
30 private designerStore: DesignerStore,
31 private packageCreationStore: PackageCreationStore,
32 private functionStore: FunctionsStore
37 this.designerStore.state$
39 distinctUntilChanged((a: any, b: any) => JSON.stringify(a) === JSON.stringify(b)),
40 takeUntil(this.ngUnsubscribe))
41 .subscribe(designerDashboardState => {
42 this.designerDashboardState = designerDashboardState;
45 this.packageCreationStore.state$
46 .subscribe(cbaPackage => {
47 this.cbaPackage = cbaPackage;
48 console.log('File name =>================== ');
49 console.log(this.cbaPackage.templates.files);
50 this.cbaPackage.templates.files.forEach((value, key) => {
51 console.log('File name => ' + key);
52 const templateAndMapping = new TemplateAndMapping();
53 templateAndMapping.isTemplate = true;
54 const isFromTemplate = true;
55 this.setIsMappingOrTemplate(key, templateAndMapping, isFromTemplate);
58 this.cbaPackage.mapping.files.forEach((value, key) => {
59 const templateAndMapping = new TemplateAndMapping();
60 templateAndMapping.isMapping = true;
61 const isFromTemplate = false;
62 this.setIsMappingOrTemplate(key, templateAndMapping, isFromTemplate);
65 this.getNodeType('component-resource-resolution');
70 this.ngUnsubscribe.next();
71 this.ngUnsubscribe.complete();
75 private setIsMappingOrTemplate(key: string, templateAndMapping: TemplateAndMapping, isFromTemplate: boolean) {
76 const nameOfFile = isFromTemplate ?
77 key.split('/')[1].split('.')[0].split('-template')[0]
78 : key.split('/')[1].split('.')[0].split('-mapping')[0];
79 // const fullName = nameOfFile + ',' + key.split('.');
80 if (this.templateAndMappingMap.has(nameOfFile)) {
81 const templateAndMappingExisted = this.templateAndMappingMap.get(nameOfFile);
82 !isFromTemplate ? templateAndMappingExisted.isMapping = true : templateAndMappingExisted.isTemplate = true;
83 this.templateAndMappingMap.set(nameOfFile, templateAndMappingExisted);
85 this.templateAndMappingMap.set(nameOfFile, templateAndMapping);
91 addToInputs(optionalInput) {
92 this.requiredInputs.set(optionalInput, this.OptionalInputs.get(optionalInput));
93 this.OptionalInputs.delete(optionalInput);
96 setTemplate(file: string) {
97 if (this.selectedTemplates.has(file)) {
98 this.selectedTemplates.delete(file);
100 this.selectedTemplates.set(file, this.templateAndMappingMap.get(file));
102 console.log(this.selectedTemplates);
105 getKeys(map: Map<string, any>) {
106 return Array.from(map.keys());
108 getValue(file: string, map: Map<string, any>) {
109 return map.get(file);
112 getObjectKey(object) {
113 // console.log(object);
114 return Object.keys(object);
116 getObjectValue(object) {
117 return Object.values(object);
119 getNodeType(nodeName: string) {
120 this.functionStore.state$
121 .subscribe(state => {
123 const functions = state.serverFunctions;
124 // tslint:disable-next-line: prefer-for-of
125 for (let i = 0; i < functions.length; i++) {
126 if (functions[i].modelName === nodeName) {
127 // tslint:disable: no-string-literal
128 console.log(functions[i].definition['interfaces']);
129 this.getInputFields(functions[i].definition['interfaces'], 'ResourceResolutionComponent', 'inputs');
130 this.getInputFields(functions[i].definition['interfaces'], 'ResourceResolutionComponent', 'outputs');
137 getInputFields(interfaces, nodeName, type) {
138 console.log(interfaces[nodeName]['operations']['process'][type]);
139 const fields = interfaces[nodeName]['operations']['process'][type];
141 for (const [key, value] of Object.entries(fields)) {
142 if (key === 'artifact-prefix-names') {
143 this.artifactPrefix = true;
144 } else if (value['required']) {
145 console.log('This field is required = ' + key);
146 if (type === 'inputs') {
147 this.requiredInputs.set(key, Object.assign({}, value));
149 this.requiredOutputs.set(key, Object.assign({}, value));
152 console.log('This field is Optional ' + key);
153 if (type === 'inputs') {
154 this.OptionalInputs.set(key, Object.assign({}, value));
156 this.optionalOutputs.set(key, Object.assign({}, value));
161 // console.log(this.requiredOutputs);