1 import {Injectable, ViewChild} from '@angular/core';
2 import {MetaDataTabModel} from './mapping-models/metadata/MetaDataTab.model';
3 import {VlbDefinition} from './mapping-models/definitions/VlbDefinition';
4 import {DslDefinition} from './mapping-models/CBAPacakge.model';
5 import {PackageCreationStore} from './package-creation.store';
6 import * as JSZip from 'jszip';
7 import {PackageCreationUtils} from './package-creation.utils';
8 import {MetadataTabComponent} from './metadata-tab/metadata-tab.component';
9 import {DesignerStore} from '../designer/designer.store';
14 export class PackageCreationExtractionService {
16 zipFile: JSZip = new JSZip();
17 entryDefinitionKeys: string[] = ['template_tags', 'user-groups',
18 'author-email', 'template_version', 'template_name', 'template_author', 'template_description'];
19 @ViewChild(MetadataTabComponent, {static: false})
20 metadataTabComponent: MetadataTabComponent;
22 constructor(private packageCreationStore: PackageCreationStore,
23 private packageCreationUtils: PackageCreationUtils,
24 private designerStore: DesignerStore) {
27 public extractBlobToStore(blob) {
28 let packageName = null;
29 this.zipFile.loadAsync(blob).then((zip) => {
30 Object.keys(zip.files).filter(fileName => fileName.includes('TOSCA-Metadata/'))
31 .forEach((filename) => {
32 zip.files[filename].async('string').then((fileData) => {
34 if (filename.includes('TOSCA-Metadata/')) {
35 const metaDataTabInfo: MetaDataTabModel = this.getMetaDataTabInfo(fileData);
36 packageName = metaDataTabInfo.name;
37 this.setMetaData(metaDataTabInfo);
38 console.log('found file ' + packageName);
45 this.zipFile.loadAsync(blob).then((zip) => {
46 Object.keys(zip.files).forEach((filename) => {
47 zip.files[filename].async('string').then((fileData) => {
48 console.log(filename);
50 if (filename.includes('Scripts/')) {
51 this.setScripts(filename, fileData);
52 } else if (filename.includes('Templates/')) {
53 if (filename.includes('-mapping.')) {
54 this.setMapping(filename, fileData);
55 } else if (filename.includes('-template.')) {
56 this.setTemplates(filename, fileData);
59 } else if (filename.includes('Definitions/')) {
60 this.setImports(filename, fileData, packageName);
68 setScripts(filename: string, fileData: any) {
69 this.packageCreationStore.addScripts(filename, fileData);
72 setImports(filename: string, fileData: any, packageName: string) {
73 console.log(filename);
74 if (filename.includes(packageName)) {
75 let definition = new VlbDefinition();
76 definition = fileData as VlbDefinition;
77 definition = JSON.parse(fileData);
78 const dslDefinition = new DslDefinition();
79 dslDefinition.content = this.packageCreationUtils.transformToJson(definition.dsl_definitions);
80 const mapOfCustomKeys = new Map<string, string>();
81 for (const metadataKey in definition.metadata) {
82 if (!this.entryDefinitionKeys.includes(metadataKey + '')) {
83 mapOfCustomKeys.set(metadataKey + '', definition.metadata[metadataKey + '']);
86 this.packageCreationStore.changeDslDefinition(dslDefinition);
87 this.packageCreationStore.setCustomKeys(mapOfCustomKeys);
88 this.setPackageDescription(definition.metadata.template_description);
89 if (definition.topology_template && definition.topology_template.content) {
90 this.designerStore.saveSourceContent(definition.topology_template.content);
94 this.packageCreationStore.addDefinition(filename, fileData);
98 setTemplates(filename: string, fileData: any) {
99 this.packageCreationStore.addTemplate(filename, fileData);
102 setMapping(fileName: string, fileData: string) {
103 this.packageCreationStore.addMapping(fileName, fileData);
106 setMetaData(metaDataObject: MetaDataTabModel) {
107 this.packageCreationStore.changeMetaData(metaDataObject);
110 getMetaDataTabInfo(fileData: string) {
111 const metaDataTabModel = new MetaDataTabModel();
112 const arrayOfLines = fileData.split('\n');
113 metaDataTabModel.entryFileName = arrayOfLines[3].split(':')[1];
114 metaDataTabModel.name = arrayOfLines[4].split(':')[1];
115 metaDataTabModel.version = arrayOfLines[5].split(':')[1];
116 metaDataTabModel.mode = arrayOfLines[6].split(':')[1];
117 console.log(arrayOfLines[7]);
118 if (arrayOfLines[7].split(':')) {
119 metaDataTabModel.templateTags = new Set<string>(arrayOfLines[7].split(':')[1].split(','));
121 return metaDataTabModel;
124 private setPackageDescription(templateDescription: string) {
125 const metaData = this.packageCreationStore.getMetaData();
126 metaData.description = templateDescription;
127 this.setMetaData(metaData);