Merge "package creation store preparation"
[ccsdk/cds.git] / cds-ui / designer-client / src / app / modules / feature-modules / packages / package-creation / package-creation.component.ts
1 /*
2 ============LICENSE_START==========================================
3 ===================================================================
4 Copyright (C) 2019 Orange. All rights reserved.
5 ===================================================================
6
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
11
12     http://www.apache.org/licenses/LICENSE-2.0
13
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============================================
20 */
21
22 import {Component, OnInit} from '@angular/core';
23 import {FilesContent, FolderNodeElement, MetaDataFile, MetaDataTabModel} from './mapping-models/metadata/MetaDataTab.model';
24 // import {saveAs} from 'file-saver/dist/FileSaver';
25 import * as JSZip from 'jszip';
26 import {PackageCreationStore} from './package-creation.store';
27 import {Definition} from './mapping-models/CBAPacakge.model';
28
29 @Component({
30     selector: 'app-package-creation',
31     templateUrl: './package-creation.component.html',
32     styleUrls: ['./package-creation.component.css']
33 })
34 export class PackageCreationComponent implements OnInit {
35     counter = 0;
36     modes: object[] = [
37         {name: 'Designer Mode', style: 'mode-icon icon-designer-mode'},
38         {name: 'Scripting Mode', style: 'mode-icon icon-scripting-mode'}];
39     private metaDataTab: MetaDataTabModel = new MetaDataTabModel();
40     private folder: FolderNodeElement = new FolderNodeElement();
41     private zipFile: JSZip = new JSZip();
42     private filesData: any = [];
43     private definition: Definition = new Definition();
44
45     constructor(private packageCreationStore: PackageCreationStore) {
46     }
47
48     ngOnInit() {
49
50     }
51
52     saveBluePrint() {
53         this.packageCreationStore.state$.subscribe(
54             cbaPackage => {
55                 console.log(cbaPackage);
56                 this.metaDataTab = cbaPackage.metaData;
57                 this.setModeType(this.metaDataTab);
58                 this.setEntryPoint(this.metaDataTab);
59                 this.addToscaMetaDataFile(this.metaDataTab);
60
61                 this.definition = cbaPackage.definitions;
62                 this.definition.metaDataTab = cbaPackage.metaData;
63                 this.createDefinitionsFolder(this.definition);
64                 // const vlbDefinition: VlbDefinition = new VlbDefinition();
65                 // this.fillVLBDefinition(vlbDefinition, this.metaDataTab);
66
67                 this.filesData.push(this.folder.TREE_DATA);
68                 this.saveBluePrintToDataBase();
69             });
70
71
72     }
73
74     private addToscaMetaDataFile(metaDataTab: MetaDataTabModel) {
75         const filename = 'TOSCA-Metadata/TOSCA.meta';
76         FilesContent.putData(filename, MetaDataFile.getValueOfMetaData(metaDataTab));
77     }
78
79 // TODO use enumerator
80     private setModeType(metaDataTab: MetaDataTabModel) {
81         if (metaDataTab.mode.startsWith('Scripting')) {
82             metaDataTab.mode = 'KOTLIN_SCRIPT';
83         } else if (metaDataTab.mode.startsWith('Designer')) {
84             metaDataTab.mode = 'DEFAULT';
85         } else {
86             metaDataTab.mode = 'GENERIC_SCRIPT';
87         }
88     }
89
90     private setEntryPoint(metaDataTab: MetaDataTabModel) {
91         if (metaDataTab.mode.startsWith('DEFAULT')) {
92             metaDataTab.entryFileName = 'Definitions/vLB_CDS.json';
93         } else {
94             metaDataTab.entryFileName = '';
95         }
96     }
97
98     saveBluePrintToDataBase() {
99         this.create();
100         this.zipFile.generateAsync({type: 'blob'})
101             .then(blob => {
102                 this.packageCreationStore.saveBluePrint(blob);
103             });
104     }
105
106
107     create() {
108         this.folder.TREE_DATA.forEach((path) => {
109             const name = path.name;
110             if (path.children) {
111                 this.zipFile.folder(name);
112                 path.children.forEach(children => {
113                     const name2 = children.name;
114                     if (FilesContent.getMapOfFilesNamesAndContent().has(name2)) {
115                         this.zipFile.file(name + '/' + name2, FilesContent.getMapOfFilesNamesAndContent().get(name2));
116                     } else {
117                     }
118
119                 });
120
121             }
122         });
123     }
124
125     private createDefinitionsFolder(definition: Definition) {
126         this.definition.imports.forEach((key, value) => {
127             FilesContent.putData(key, value);
128         });
129
130         /*const filenameEntry = 'vLB_CDS.json';
131         const vlbDefinition: VlbDefinition = new VlbDefinition();
132         const metadata: MetaDataTabModel = new MetaDataTabModel();
133
134         metadata.templateAuthor = ' lldkslds';
135         metadata.templateName = ' lldkslds';
136         metadata.templateTags = ' lldkslds';
137         metadata.templateVersion = ' lldkslds';
138         metadata['author-email'] = ' lldkslds';
139         metadata['user-groups'] = ' lldkslds';
140         vlbDefinition.metadata = metadata;
141
142         vlbDefinition.imports = [{
143             file: 'Definitions/data_types.json'
144         }];
145
146         const value = this.packageCreationUtils.transformToJson(vlbDefinition);
147         FilesContent.putData(filenameEntry, value);*/
148     }
149
150 }