2 ============LICENSE_START==========================================
3 ===================================================================
4 Copyright (C) 2019 Orange. 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, ElementRef, OnInit, ViewChild} from '@angular/core';
23 import {FilesContent, FolderNodeElement, MetaDataTabModel} from './mapping-models/metadata/MetaDataTab.model';
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 import {PackageCreationService} from './package-creation.service';
36 import {ComponentCanDeactivate} from '../../../../common/core/canDactivate/ComponentCanDeactivate';
37 import {DesignerStore} from '../designer/designer.store';
41 selector: 'app-package-creation',
42 templateUrl: './package-creation.component.html',
43 styleUrls: ['./package-creation.component.css']
45 export class PackageCreationComponent extends ComponentCanDeactivate implements OnInit {
48 // adding initial referencing to designer mode
52 private packageCreationStore: PackageCreationStore,
53 private packageCreationService: PackageCreationService,
54 private packageCreationUtils: PackageCreationUtils,
55 private router: Router,
56 private tourService: TourService,
57 private toastService: ToastrService,
58 private designerStore: DesignerStore) {
65 {name: 'Designer Mode', style: 'mode-icon icon-designer-mode'},
66 {name: 'Scripting Mode', style: 'mode-icon icon-scripting-mode'}];
67 metaDataTab: MetaDataTabModel = new MetaDataTabModel();
68 folder: FolderNodeElement = new FolderNodeElement();
69 zipFile: JSZip = new JSZip();
71 definition: Definition = new Definition();
72 isSaveEnabled = false;
74 @ViewChild(MetadataTabComponent, {static: false})
75 metadataTabComponent: MetadataTabComponent;
77 @ViewChild('nameit', {static: true})
78 elementRef: ElementRef;
79 versionPattern = '^(\\d+\\.)?(\\d+\\.)?(\\*|\\d+)$';
80 metadataClasses = 'nav-item nav-link active complete';
83 this.elementRef.nativeElement.focus();
84 const regexp = RegExp(this.versionPattern);
85 this.packageCreationStore.state$.subscribe(cbaPackage => {
86 if (cbaPackage && cbaPackage.metaData && cbaPackage.metaData.description
87 && cbaPackage.metaData.name && cbaPackage.metaData.version &&
88 regexp.test(cbaPackage.metaData.version)) {
89 this.isSaveEnabled = true;
90 if (!this.metadataClasses.includes('complete')) {
92 this.metadataClasses += 'complete';
94 console.log('perhaps it is been added');
96 this.isSaveEnabled = false;
97 this.metadataClasses = this.metadataClasses.replace('complete', '');
102 openTourGuide(step: string) {
103 // this.tourService.goto(step);
107 this.packageCreationStore.state$.subscribe(
109 console.log(cbaPackage);
110 FilesContent.clear();
111 let packageCreationModes: PackageCreationModes;
112 cbaPackage = PackageCreationModes.mapModeType(cbaPackage);
113 cbaPackage.metaData = PackageCreationModes.setEntryPoint(cbaPackage.metaData);
114 packageCreationModes = PackageCreationBuilder.getCreationMode(cbaPackage);
115 cbaPackage.templateTopology.content = this.designerStore.state.sourceContent;
116 packageCreationModes.execute(cbaPackage, this.packageCreationUtils);
117 this.filesData.push(this.folder.TREE_DATA);
118 this.saveBluePrintToDataBase();
125 saveBluePrintToDataBase() {
127 this.zipFile.generateAsync({type: 'blob'})
129 this.packageCreationService.savePackage(blob).subscribe(
130 bluePrintDetailModels => {
131 if (bluePrintDetailModels) {
132 const id = bluePrintDetailModels.toString().split('id')[1].split(':')[1].split('"')[1];
133 this.toastService.info('package updated successfully ');
134 this.isSaveEnabled = false;
135 this.router.navigate(['/packages/package/' + id]);
138 // this.toastService.error('error happened when editing ' + error.message);
139 console.log('Error -' + error.message);
146 FilesContent.getMapOfFilesNamesAndContent().forEach((value, key) => {
147 this.zipFile.folder(key.split('/')[0]);
148 this.zipFile.file(key, value);
154 goBackToDashBorad() {
155 this.router.navigate(['/packages']);
159 console.log('executed change');
160 this.metadataTabComponent.saveMetaDataToStore();
164 canDeactivate(): boolean {
165 return this.isSaveEnabled;