4145e0f8e70e0ce024792de376bc7f6f51091d52
[ccsdk/cds.git] /
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, ElementRef, OnInit, ViewChild } from '@angular/core';
23 import { FilesContent, FolderNodeElement, MetaDataTabModel } from './mapping-models/metadata/MetaDataTab.model';
24
25 import * as JSZip from 'jszip';
26 import { PackageCreationStore } from './package-creation.store';
27 import { Definition } from './mapping-models/CBAPacakge.model';
28 import { PackageCreationModes } from './creationModes/PackageCreationModes';
29 import { PackageCreationBuilder } from './creationModes/PackageCreationBuilder';
30 import { PackageCreationUtils } from './package-creation.utils';
31 import { MetadataTabComponent } from './metadata-tab/metadata-tab.component';
32 import { Router } from '@angular/router';
33 import { ToastrService } from 'ngx-toastr';
34 import { TourService } from 'ngx-tour-md-menu';
35
36
37 @Component({
38     selector: 'app-package-creation',
39     templateUrl: './package-creation.component.html',
40     styleUrls: ['./package-creation.component.css']
41 })
42 export class PackageCreationComponent implements OnInit {
43
44     // adding initial referencing to designer mode
45
46
47     constructor(
48         private packageCreationStore: PackageCreationStore,
49         private packageCreationUtils: PackageCreationUtils,
50         private router: Router,
51         private tourService: TourService,
52         private toastService: ToastrService) {
53     }
54
55     counter = 0;
56     modes: object[] = [
57         { name: 'Designer Mode', style: 'mode-icon icon-designer-mode' },
58         { name: 'Scripting Mode', style: 'mode-icon icon-scripting-mode' }];
59     metaDataTab: MetaDataTabModel = new MetaDataTabModel();
60     folder: FolderNodeElement = new FolderNodeElement();
61     zipFile: JSZip = new JSZip();
62     filesData: any = [];
63     definition: Definition = new Definition();
64     isSaveEnabled = false;
65
66     @ViewChild(MetadataTabComponent, { static: false })
67     metadataTabComponent: MetadataTabComponent;
68
69     @ViewChild('nameit', { static: true })
70     elementRef: ElementRef;
71     versionPattern = '^(\\d+\\.)?(\\d+\\.)?(\\*|\\d+)$';
72     metadataClasses = 'nav-item nav-link active complete';
73
74     ngOnInit() {
75         this.elementRef.nativeElement.focus();
76         const regexp = RegExp(this.versionPattern);
77         this.packageCreationStore.state$.subscribe(cbaPackage => {
78             if (cbaPackage && cbaPackage.metaData && cbaPackage.metaData.description
79                 && cbaPackage.metaData.name && cbaPackage.metaData.version &&
80                 regexp.test(cbaPackage.metaData.version)) {
81                 this.isSaveEnabled = true;
82                 if (!this.metadataClasses.includes('complete')) {
83                     console.log('added');
84                     this.metadataClasses += 'complete';
85                 }
86                 console.log('perhaps it is been added');
87             } else {
88                 this.isSaveEnabled = false;
89                 this.metadataClasses = this.metadataClasses.replace('complete', '');
90             }
91         });
92     }
93
94     openTourGuide(step: string) {
95         // this.tourService.goto(step);
96     }
97
98     saveBluePrint() {
99         this.packageCreationStore.state$.subscribe(
100             cbaPackage => {
101                 console.log(cbaPackage);
102                 FilesContent.clear();
103                 let packageCreationModes: PackageCreationModes;
104                 cbaPackage = PackageCreationModes.mapModeType(cbaPackage);
105                 cbaPackage.metaData = PackageCreationModes.setEntryPoint(cbaPackage.metaData);
106                 packageCreationModes = PackageCreationBuilder.getCreationMode(cbaPackage);
107                 packageCreationModes.execute(cbaPackage, this.packageCreationUtils);
108                 this.filesData.push(this.folder.TREE_DATA);
109                 this.saveBluePrintToDataBase();
110             });
111
112
113     }
114
115
116     saveBluePrintToDataBase() {
117         this.create();
118         this.zipFile.generateAsync({ type: 'blob' })
119             .then(blob => {
120                 this.packageCreationStore.saveBluePrint(blob).subscribe(
121                     bluePrintDetailModels => {
122                         if (bluePrintDetailModels) {
123                             const id = bluePrintDetailModels.toString().split('id')[1].split(':')[1].split('"')[1];
124                             this.toastService.info('package updated successfully ');
125                             this.router.navigate(['/packages/package/' + id]);
126                         }
127                     }, error => {
128                         // this.toastService.error('error happened when editing ' + error.message);
129                         console.log('Error -' + error.message);
130                     });
131             });
132     }
133
134
135     create() {
136         FilesContent.getMapOfFilesNamesAndContent().forEach((value, key) => {
137             this.zipFile.folder(key.split('/')[0]);
138             this.zipFile.file(key, value);
139         });
140
141     }
142
143
144     goBackToDashBorad() {
145         this.router.navigate(['/packages']);
146     }
147
148     saveMetaData() {
149         console.log('executed change');
150         this.metadataTabComponent.saveMetaDataToStore();
151
152     }
153 }