2 ============LICENSE_START==========================================
3 ===================================================================
4 Copyright (C) 2018 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, EventEmitter, Output, ViewChild } from '@angular/core';
23 import { Store } from '@ngrx/store';
24 import * as JSZip from 'jszip';
25 import { Observable } from 'rxjs';
27 import { IBlueprint } from '../../../../common/core/store/models/blueprint.model';
28 import { IBlueprintState } from '../../../../common/core/store/models/blueprintState.model';
29 import { IAppState } from '../../../../common/core/store/state/app.state';
30 import { LoadBlueprintSuccess, SET_BLUEPRINT_STATE, SetBlueprintState } from '../../../../common/core/store/actions/blueprint.action';
31 import { json } from 'd3';
34 selector: 'app-search-template',
35 templateUrl: './search-template.component.html',
36 styleUrls: ['./search-template.component.scss']
38 export class SearchTemplateComponent implements OnInit {
40 localBluePrintData: IBlueprint;
42 blueprintState: IBlueprintState;
43 bpState: Observable<IBlueprintState>;
44 validfile: boolean = false;
46 @ViewChild('fileInput') fileInput;
51 private zipFile: JSZip = new JSZip();
52 private fileObject: any;
53 private activationBlueprint: any;
54 private tocsaMetadaData: any;
55 private blueprintName: string;
57 constructor(private store: Store<IAppState>) { }
64 this.file = e.target.files[0];
65 this.zipFile.files = {};
66 this.zipFile.loadAsync(this.file)
69 this.buildFileViewData(zip);
74 updateBlueprintState() {
75 let data: IBlueprint = this.activationBlueprint ? JSON.parse(this.activationBlueprint.toString()) : this.activationBlueprint;
76 let blueprintState = {
78 name: this.blueprintName,
82 this.store.dispatch(new SetBlueprintState(blueprintState))
83 // this.store.dispatch(new LoadBlueprintSuccess(data));
86 async buildFileViewData(zip) {
87 this.validfile = false;
89 for (var file in zip.files) {
91 name: zip.files[file].name,
94 const value = <any>await zip.files[file].async('string');
95 this.fileObject.data = value;
96 this.paths.push(this.fileObject);
100 this.paths.forEach(path =>{
101 if(path.name.includes("TOSCA.meta")) {
102 this.validfile = true
106 alert('Please update proper file');
110 this.fetchTOSACAMetadata();
111 this.tree = this.arrangeTreeData(this.paths);
113 alert('Please update proper file with TOSCA metadata');
117 arrangeTreeData(paths) {
120 paths.forEach((path) => {
122 const pathParts = path.name.split('/');
123 // pathParts.shift();
124 let currentLevel = tree;
126 pathParts.forEach((part) => {
127 const existingPath = currentLevel.filter(level => level.name === part);
129 if (existingPath.length > 0) {
130 currentLevel = existingPath[0].children;
138 if(part.trim() == this.blueprintName.trim()) {
139 this.activationBlueprint = path.data;
140 newPart.data = JSON.parse(this.activationBlueprint.toString());
141 console.log('newpart', newPart);
143 if(newPart.name !== '') {
144 currentLevel.push(newPart);
145 currentLevel = newPart.children;
150 console.log('tree', tree);
154 fetchTOSACAMetadata() {
156 this.paths.forEach(file =>{
157 if(file.name.includes('TOSCA.meta')) {
158 let keys = file.data.split("\n");
159 keys.forEach((key)=>{
160 let propertyData = key.split(':');
161 toscaData[propertyData[0]] = propertyData[1];
165 this.blueprintName = (((toscaData['Entry-Definitions']).split('/'))[1]).toString();;
166 console.log(toscaData);