2 ============LICENSE_START==========================================
3 ===================================================================
4 Copyright (C) 2019 Orange. All rights reserved.
5 ===================================================================
7 Unless otherwise specified, all software contained herein is licensed
8 under the Apache License, Version 2.0 (the License);
9 you may not use this software except in compliance with the License.
10 You may obtain a copy of the License at
12 http://www.apache.org/licenses/LICENSE-2.0
14 Unless required by applicable law or agreed to in writing, software
15 distributed under the License is distributed on an "AS IS" BASIS,
16 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 See the License for the specific language governing permissions and
18 limitations under the License.
19 ============LICENSE_END============================================
22 import {Component, OnInit} from '@angular/core';
23 import {FilesContent, FolderNodeElement, MetaDataFile, MetaDataTab} from './mapping-models/metadata/MetaDataTab.model';
24 // import {saveAs} from 'file-saver/dist/FileSaver';
25 import * as JSZip from 'jszip';
26 import {Observable} from 'rxjs';
27 import {ApiService} from '../../../../common/core/services/api.service';
28 import {BlueprintURLs} from '../../../../common/constants/app-constants';
29 import {Import, Metadata, VlbDefinition} from './mapping-models/definitions/VlbDefinition';
30 import {JsonConvert} from 'json2typescript';
31 import {JsonPipe} from '@angular/common';
32 import {PackageCreationService} from './package-creation.service';
33 import {PackageCreationUtils} from './package-creation.utils';
35 import {Router} from '@angular/router';
38 selector: 'app-package-creation',
39 templateUrl: './package-creation.component.html',
40 styleUrls: ['./package-creation.component.css']
42 export class PackageCreationComponent implements OnInit {
45 {name: 'Designer Mode', style: 'mode-icon icon-designer-mode'},
46 {name: 'Scripting Mode', style: 'mode-icon icon-scripting-mode'}];
47 customKeysAndValues: Map<string, string> = new Map<string, string>();
49 dictionaryLibraryInstances: string[] = ['x', 'y'];
50 private container: HTMLElement;
51 private elements: HTMLCollection;
52 private newElement: HTMLElement;
53 private metaDataTab: MetaDataTab = new MetaDataTab();
55 private result: string;
57 private folder: FolderNodeElement = new FolderNodeElement();
58 private zipFile: JSZip = new JSZip();
59 private filesData: any = [];
60 private errorMessage: string;
61 private keys: NodeListOf<HTMLElement>;
62 private values: NodeListOf<HTMLElement>;
65 constructor(private packageCreationService: PackageCreationService, private packageCreationUtils: PackageCreationUtils,
66 private router: Router) {
70 // this.customKeysAndValues.set('Dictionary Library Instances', ' ');
71 this.keys = document.getElementsByName('key');
72 this.values = document.getElementsByName('value');
76 createAnotherCustomKeyDiv() {
77 this.newElement = document.getElementById('target');
78 const id = this.newElement.getAttribute('id');
79 this.newElement.setAttribute('id', 'target' + this.counter++);
80 const copiedElement = this.newElement.cloneNode(true);
81 this.container = document.getElementById('container');
82 this.container.appendChild(copiedElement);
83 this.elements = this.container.children;
84 this.newElement.setAttribute('id', id);
85 this.clearCopiedElement();
87 // console.log(this.packageCreationService.checkBluePrintNameAndVersion(this.metaDataTab.name, this.metaDataTab.version));
88 /*this.metaDataTab = new MetaDataTab();
89 this.metaDataTab.name = 'klfdj';
90 this.metaDataTab.entryFileName = 'Definitions/vLB_CDS.json';
91 this.metaDataTab.description = 'rere';
92 this.metaDataTab.tags = 'ffsssssss';
93 this.metaDataTab.version = '1.01.10';
94 this.metaDataTab.templateName = 'test';
97 this.saveToFileSystem(MetaDataFile.getObjectInstance(this.metaDataTab));*/
100 private clearCopiedElement() {
101 const newCopiedElement: HTMLInputElement = document.getElementById('target' + (this.counter - 1)) as HTMLInputElement;
102 const inputElements = newCopiedElement.getElementsByTagName('input');
103 for (let i = 0; i < inputElements.length; i++) {
104 const element: HTMLInputElement = inputElements.item(i) as HTMLInputElement;
110 validatePackageNameAndVersion() {
111 if (this.metaDataTab.name && this.metaDataTab.version) {
112 this.packageCreationService.checkBluePrintNameAndVersion(this.metaDataTab.name, this.metaDataTab.version).then(element => {
114 this.errorMessage = 'the package with name and version is exists';
116 this.errorMessage = ' ';
123 getDictionaryLibraryInstances() {
129 for (let i = 0; i < this.values.length; i++) {
130 const inputKeyElement: HTMLInputElement = this.keys.item(i) as HTMLInputElement;
131 const inputKey: string = inputKeyElement.value;
132 const inputValueElement: HTMLInputElement = this.values.item(i) as HTMLInputElement;
133 const inputValue: string = inputValueElement.value;
134 this.customKeysAndValues.set(inputKey, inputValue);
137 this.metaDataTab.mapOfCustomKey = this.customKeysAndValues;
138 this.setModeType(this.metaDataTab);
139 this.setEntryPoint(this.metaDataTab);
141 this.addToscaMetaDataFile(this.metaDataTab);
143 const vlbDefinition: VlbDefinition = new VlbDefinition();
144 this.fillVLBDefinition(vlbDefinition, this.metaDataTab);
146 this.filesData.push(this.folder.TREE_DATA);
147 this.saveToBackend();
148 this.packageCreationService.refreshPackages();
149 this.router.navigate(['/packages']);
153 addToscaMetaDataFile(metaDataTab: MetaDataTab) {
154 const filename = 'TOSCA.meta';
155 FilesContent.putData(filename, MetaDataFile.getObjectInstance(this.metaDataTab));
158 private setModeType(metaDataTab: MetaDataTab) {
159 if (metaDataTab.mode.startsWith('Scripting')) {
160 metaDataTab.mode = 'KOTLIN_SCRIPT';
161 } else if (metaDataTab.mode.startsWith('Designer')) {
162 metaDataTab.mode = 'DEFAULT';
164 metaDataTab.mode = 'GENERIC_SCRIPT';
170 this.zipFile.generateAsync({type: 'blob'})
172 this.saveBluePrint(blob);
178 private saveBluePrint(blob) {
179 const formData = new FormData();
180 formData.append('file', blob);
181 this.packageCreationService.saveBlueprint(formData)
184 console.log('Success:' + JSON.stringify(data));
186 console.log('Error -' + error.message);
191 this.folder.TREE_DATA.forEach((path) => {
193 const name = path.name;
195 this.zipFile.folder(name);
196 path.children.forEach(children => {
197 const name2 = children.name;
198 if (FilesContent.getMapOfFilesNamesAndContent().has(name2)) {
199 this.zipFile.file(name + '/' + name2, FilesContent.getMapOfFilesNamesAndContent().get(name2));
210 deleteCustomKey(event) {
211 this.container = document.getElementById('container');
212 const element = event.parentElement.parentElement.parentElement;
213 this.container.removeChild(element);
217 private setEntryPoint(metaDataTab: MetaDataTab) {
218 if (metaDataTab.mode.startsWith('DEFAULT')) {
219 metaDataTab.entryFileName = 'Definitions/vLB_CDS.json';
221 metaDataTab.entryFileName = '';
227 private fillVLBDefinition(vlbDefinition: VlbDefinition, metaDataTab: MetaDataTab) {
229 const metadata: Metadata = new Metadata();
230 metadata.template_author = 'Shaaban';
231 metadata.template_name = metaDataTab.templateName;
232 metadata.template_tags = metaDataTab.tags;
234 metadata.dictionary_group = 'default';
235 metadata.template_version = metaDataTab.version;
236 metadata['author-email'] = 'shaaban.altanany.ext@orange.com';
237 metadata['user-groups'] = 'ADMIN';
238 // metadata.mapOfCustomKeys = this.metaDataTab.mapOfCustomKey;
239 vlbDefinition.tosca_definitions_version = metaDataTab.version;
240 vlbDefinition.metadata = metadata;
242 // console.log(vlbDefinition.metadata.mapOfCustomKeys);
243 const value = this.packageCreationUtils.transformToJson(vlbDefinition);
245 FilesContent.putData('vLB_CDS.json', value);