From 1bd25ec9e5811f5dfb19c65b9956630f597673e3 Mon Sep 17 00:00:00 2001 From: Ezhilarasi Date: Wed, 14 Aug 2019 23:12:14 +0530 Subject: Edit CBA method integration Added method for Edit CBA after search Change-Id: I6f3e80c014c0cb9b1c1068089145b20bc60b2216 Issue-ID: CCSDK-1275 Signed-off-by: Ezhilarasi --- .../search-from-database.component.ts | 157 ++++++++++++++++++++- 1 file changed, 153 insertions(+), 4 deletions(-) (limited to 'cds-ui/client/src') diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.ts index df3aafb73..588854f6b 100644 --- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.ts +++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-from-database/search-from-database.component.ts @@ -21,10 +21,18 @@ limitations under the License. import { Component, OnInit, ViewChild, EventEmitter, Output } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Store } from '@ngrx/store'; import { SearchTemplateService } from '../search-template.service'; import { MatAutocompleteTrigger } from '@angular/material'; import { NotificationHandlerService } from 'src/app/common/core/services/notification-handler.service'; import { SearchPipe } from 'src/app/common/shared/pipes/search.pipe'; +import * as JSZip from 'jszip'; +import { SortPipe } from '../../../../../common/shared/pipes/sort.pipe'; +import { LoaderService } from '../../../../../common/core/services/loader.service'; +import { IBlueprint } from '../../../../../common/core/store/models/blueprint.model'; +import { IBlueprintState } from '../../../../../common/core/store/models/blueprintState.model'; +import { IAppState } from '../../../../../common/core/store/state/app.state'; +import { SetBlueprintState } from '../../../../../common/core/store/actions/blueprint.action'; @Component({ selector: 'app-search-from-database', @@ -36,11 +44,25 @@ export class SearchFromDatabaseComponent implements OnInit { myControl: FormGroup; @Output() resourcesData = new EventEmitter(); options: any[] = []; - @ViewChild('resourceSelect', { read: MatAutocompleteTrigger }) resourceSelect: MatAutocompleteTrigger; + // @ViewChild('resourceSelect', { read: MatAutocompleteTrigger }) resourceSelect: MatAutocompleteTrigger; + + validfile: boolean = false; + filesTree: any = []; + filesData: any = []; + private zipFile: JSZip = new JSZip(); + private paths = []; + private tree; + private fileObject: any; + private activationBlueprint: any; + private tocsaMetadaData: any; + private blueprintName: string; + private entryDefinition: string; + uploadedFileName: string; searchText: string = ''; constructor(private _formBuilder: FormBuilder, - private searchService: SearchTemplateService, private alertService: NotificationHandlerService, ) { } + private searchService: SearchTemplateService, private alertService: NotificationHandlerService, + private loader: LoaderService, private store: Store) { } ngOnInit() { this.myControl = this._formBuilder.group({ @@ -63,10 +85,137 @@ export class SearchFromDatabaseComponent implements OnInit { }) } - editCBA(artifactname: string,option : string) { - + editCBA(artifactName: string,artifactVersion:string, option: string) { + this.zipFile.generateAsync({ type: "blob" }) + .then(blob => { + const formData = new FormData(); + formData.append("file", blob); + // this.editorService.enrich("/enrich-blueprint/", formData) + this.searchService.getBlueprintZip(artifactName + "/" + artifactVersion) + .subscribe( + (response) => { + // console.log(response); + this.zipFile.files = {}; + this.zipFile.loadAsync(response) + .then((zip) => { + if (zip) { + this.buildFileViewData(zip); + // console.log("processed"); + let data: IBlueprint = this.activationBlueprint ? JSON.parse(this.activationBlueprint.toString()) : this.activationBlueprint; + let blueprintState = { + blueprint: data, + name: this.blueprintName, + files: this.tree, + filesData: this.paths, + uploadedFileName: this.blueprintName, + entryDefinition: this.entryDefinition + } + this.store.dispatch(new SetBlueprintState(blueprintState)); + // console.log(blueprintState); + } + }); + // this.alertService.success('Blueprint enriched successfully'); + }, + (error) => { + this.alertService.error('Blue print error' + error.message); + }); + }); + } + + create() { + this.filesData.forEach((path) => { + let index = path.name.indexOf("/"); + let name = path.name.slice(index + 1, path.name.length); + this.zipFile.file(name, path.data); + }); + } + + async buildFileViewData(zip) { + this.validfile = false; + this.paths = []; + // console.log(zip.files); + for (var file in zip.files) { + console.log("name: " + zip.files[file].name); + this.fileObject = { + // nameForUIDisplay: this.uploadedFileName + '/' + zip.files[file].name, + // name: zip.files[file].name, + name: this.uploadedFileName + '/' + zip.files[file].name, + data: '' + }; + const value = await zip.files[file].async('string'); + this.fileObject.data = value; + this.paths.push(this.fileObject); + } + + if (this.paths) { + this.paths.forEach(path => { + if (path.name.includes("TOSCA.meta")) { + this.validfile = true + } + }); + } else { + alert('Please update proper file'); + } + + if (this.validfile) { + this.fetchTOSACAMetadata(); + this.paths = new SortPipe().transform(this.paths, 'asc', 'name'); + this.tree = this.arrangeTreeData(this.paths); + } else { + alert('Please update proper file with TOSCA metadata'); + } } + arrangeTreeData(paths) { + const tree = []; + paths.forEach((path) => { + const pathParts = path.name.split('/'); + // pathParts.shift(); + let currentLevel = tree; + + pathParts.forEach((part) => { + const existingPath = currentLevel.filter(level => level.name === part); + + if (existingPath.length > 0) { + currentLevel = existingPath[0].children; + } else { + const newPart = { + name: part, + children: [], + data: path.data, + path: path.name + }; + if (part.trim() == this.blueprintName.trim()) { + this.activationBlueprint = path.data; + newPart.data = JSON.parse(this.activationBlueprint.toString()); + // console.log('newpart', newPart); + this.entryDefinition = path.name.trim(); + } + if (newPart.name !== '') { + currentLevel.push(newPart); + currentLevel = newPart.children; + } + } + }); + }); + this.loader.hideLoader(); + return tree; + } + + fetchTOSACAMetadata() { + let toscaData = {}; + this.paths.forEach(file => { + if (file.name.includes('TOSCA.meta')) { + let keys = file.data.split("\n"); + keys.forEach((key) => { + let propertyData = key.split(':'); + toscaData[propertyData[0]] = propertyData[1]; + }); + } + }); + this.blueprintName = (((toscaData['Entry-Definitions']).split('/'))[1]).toString();; + // console.log(toscaData); + } } -- cgit 1.2.3-korg