2 ============LICENSE_START==========================================
3 ===================================================================
4 Copyright (C) 2019 IBM Intellectual Property. 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, ViewChild, EventEmitter, Output } from '@angular/core';
23 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
24 import { Store } from '@ngrx/store';
25 import { SearchTemplateService } from '../search-template.service';
26 import { MatAutocompleteTrigger } from '@angular/material';
27 import { NotificationHandlerService } from 'src/app/common/core/services/notification-handler.service';
28 import { SearchPipe } from 'src/app/common/shared/pipes/search.pipe';
29 import * as JSZip from 'jszip';
30 import { SortPipe } from '../../../../../common/shared/pipes/sort.pipe';
31 import { LoaderService } from '../../../../../common/core/services/loader.service';
32 import { IBlueprint } from '../../../../../common/core/store/models/blueprint.model';
33 import { IBlueprintState } from '../../../../../common/core/store/models/blueprintState.model';
34 import { IAppState } from '../../../../../common/core/store/state/app.state';
35 import { SetBlueprintState } from '../../../../../common/core/store/actions/blueprint.action';
36 import { SelectTemplateService } from '../../select-template.service';
38 selector: 'app-search-from-database',
39 templateUrl: './search-from-database.component.html',
40 styleUrls: ['./search-from-database.component.scss']
42 export class SearchFromDatabaseComponent implements OnInit {
45 @Output() resourcesData = new EventEmitter();
47 // @ViewChild('resourceSelect', { read: MatAutocompleteTrigger }) resourceSelect: MatAutocompleteTrigger;
49 validfile: boolean = false;
52 private zipFile: JSZip = new JSZip();
55 private fileObject: any;
56 private activationBlueprint: any;
57 private tocsaMetadaData: any;
58 private blueprintName: string;
59 private entryDefinition: string;
60 uploadedFileName: string;
62 searchText: string = '';
63 constructor(private _formBuilder: FormBuilder,
64 private searchService: SearchTemplateService, private alertService: NotificationHandlerService,
65 private loader: LoaderService, private store: Store<IAppState>, private cbEditOption: SelectTemplateService) { }
68 this.myControl = this._formBuilder.group({
69 search_input: ['', Validators.required]
73 this.resourcesData.emit(value);
76 fetchResourceByName() {
78 this.searchService.searchByTags(this.searchText)
80 data.forEach(element => {
81 this.options.push(element)
84 this.alertService.error('Blueprint not matching the search tag' + error);
88 editCBA(artifactName: string, artifactVersion: string, option: string) {
89 this.cbEditOption.setCbaOption(option);
90 this.uploadedFileName = artifactName;
91 console.log("filename:" + this.uploadedFileName);
92 this.zipFile.generateAsync({ type: "blob" })
94 const formData = new FormData();
95 formData.append("file", blob);
96 // this.editorService.enrich("/enrich-blueprint/", formData)
97 this.searchService.getBlueprintZip(artifactName + "/" + artifactVersion)
100 // console.log(response);
101 this.zipFile.files = {};
102 this.zipFile.loadAsync(response)
105 this.buildFileViewData(zip);
108 // this.alertService.success('Blueprint enriched successfully');
111 this.alertService.error('Blue print error' + error.message);
116 async buildFileViewData(zip) {
117 this.validfile = false;
119 // console.log(zip.files);
120 for (var file in zip.files) {
121 console.log("name: " + zip.files[file].name);
123 // nameForUIDisplay: this.uploadedFileName + '/' + zip.files[file].name,
124 // name: zip.files[file].name,
125 name: this.uploadedFileName + '/' + zip.files[file].name,
128 const value = <any>await zip.files[file].async('string');
129 this.fileObject.data = value;
130 this.paths.push(this.fileObject);
134 this.paths.forEach(path => {
135 if (path.name.includes("TOSCA.meta")) {
136 this.validfile = true
140 alert('Please update proper file');
143 if (this.validfile) {
144 this.fetchTOSACAMetadata();
145 this.paths = new SortPipe().transform(this.paths, 'asc', 'name');
146 this.tree = this.arrangeTreeData(this.paths);
148 alert('Please update proper file with TOSCA metadata');
152 arrangeTreeData(paths) {
155 paths.forEach((path) => {
157 const pathParts = path.name.split('/');
158 // pathParts.shift();
159 let currentLevel = tree;
161 pathParts.forEach((part) => {
162 const existingPath = currentLevel.filter(level => level.name === part);
164 if (existingPath.length > 0) {
165 currentLevel = existingPath[0].children;
173 if (part.trim() == this.blueprintName.trim()) {
174 this.activationBlueprint = path.data;
175 newPart.data = JSON.parse(this.activationBlueprint.toString());
176 // console.log('newpart', newPart);
177 this.entryDefinition = path.name.trim();
179 if (newPart.name !== '') {
180 currentLevel.push(newPart);
181 currentLevel = newPart.children;
186 this.loader.hideLoader();
187 this.filesTree = tree;
188 this.updateBlueprint();
191 fetchTOSACAMetadata() {
193 this.paths.forEach(file => {
194 if (file.name.includes('TOSCA.meta')) {
195 let keys = file.data.split("\n");
196 keys.forEach((key) => {
197 let propertyData = key.split(':');
198 toscaData[propertyData[0]] = propertyData[1];
202 this.blueprintName = (((toscaData['Entry-Definitions']).split('/'))[1]).toString();;
203 // console.log(toscaData);
208 let data: IBlueprint = this.activationBlueprint ? JSON.parse(this.activationBlueprint.toString()) : this.activationBlueprint;
209 let blueprintState = {
211 name: this.blueprintName,
212 files: this.filesTree,
213 filesData: this.filesData,
214 uploadedFileName: this.uploadedFileName,
215 entryDefinition: this.entryDefinition
217 this.store.dispatch(new SetBlueprintState(blueprintState));