Fix: Run both sonar and clm scans in parallel
[ccsdk/cds.git] / cds-ui / designer-client / src / app / modules / feature-modules / packages / package-creation / package-creation.component.ts
index c15a5dd..1d23405 100644 (file)
@@ -19,15 +19,23 @@ limitations under the License.
 ============LICENSE_END============================================
 */
 
-import {Component, OnInit} from '@angular/core';
-import {FilesContent, FolderNodeElement, MetaDataTabModel} from './mapping-models/metadata/MetaDataTab.model';
+import { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';
+import { FilesContent, FolderNodeElement, MetaDataTabModel } from './mapping-models/metadata/MetaDataTab.model';
 
 import * as JSZip from 'jszip';
-import {PackageCreationStore} from './package-creation.store';
-import {Definition} from './mapping-models/CBAPacakge.model';
-import {PackageCreationModes} from './creationModes/PackageCreationModes';
-import {PackageCreationBuilder} from './creationModes/PackageCreationBuilder';
-import {PackageCreationUtils} from './package-creation.utils';
+import { PackageCreationStore } from './package-creation.store';
+import { CBAPackage, Definition } from './mapping-models/CBAPacakge.model';
+import { PackageCreationModes } from './creationModes/PackageCreationModes';
+import { PackageCreationBuilder } from './creationModes/PackageCreationBuilder';
+import { PackageCreationUtils } from './package-creation.utils';
+import { MetadataTabComponent } from './metadata-tab/metadata-tab.component';
+import { Router } from '@angular/router';
+import { ToastrService } from 'ngx-toastr';
+import { TourService } from 'ngx-tour-md-menu';
+import { PackageCreationService } from './package-creation.service';
+import { ComponentCanDeactivate } from '../../../../common/core/canDactivate/ComponentCanDeactivate';
+import { DesignerStore } from '../designer/designer.store';
+import { NgxUiLoaderService } from 'ngx-ui-loader';
 
 
 @Component({
@@ -35,40 +43,85 @@ import {PackageCreationUtils} from './package-creation.utils';
     templateUrl: './package-creation.component.html',
     styleUrls: ['./package-creation.component.css']
 })
-export class PackageCreationComponent implements OnInit {
-    counter = 0;
-    modes: object[] = [
-        {name: 'Designer Mode', style: 'mode-icon icon-designer-mode'},
-        {name: 'Scripting Mode', style: 'mode-icon icon-scripting-mode'}];
-    private metaDataTab: MetaDataTabModel = new MetaDataTabModel();
-    private folder: FolderNodeElement = new FolderNodeElement();
-    private zipFile: JSZip = new JSZip();
-    private filesData: any = [];
-    private definition: Definition = new Definition();
+export class PackageCreationComponent extends ComponentCanDeactivate implements OnInit, OnDestroy {
+
 
     // adding initial referencing to designer mode
 
 
-    constructor(private packageCreationStore: PackageCreationStore, private packageCreationUtils: PackageCreationUtils) {
+    constructor(
+        private packageCreationStore: PackageCreationStore,
+        private packageCreationService: PackageCreationService,
+        private packageCreationUtils: PackageCreationUtils,
+        private router: Router,
+        private tourService: TourService,
+        private toastService: ToastrService,
+        private ngxService: NgxUiLoaderService,
+        private designerStore: DesignerStore) {
+
+        super();
     }
 
+    counter = 0;
+    modes: object[] = [
+        { name: 'Designer Mode', style: 'mode-icon icon-designer-mode' },
+        { name: 'Scripting Mode', style: 'mode-icon icon-scripting-mode' }];
+    metaDataTab: MetaDataTabModel = new MetaDataTabModel();
+    folder: FolderNodeElement = new FolderNodeElement();
+    zipFile: JSZip = new JSZip();
+    filesData: any = [];
+    definition: Definition = new Definition();
+    isSaveEnabled = false;
+
+    @ViewChild(MetadataTabComponent, { static: false })
+    metadataTabComponent: MetadataTabComponent;
+
+    @ViewChild('nameit', { static: true })
+    elementRef: ElementRef;
+    versionPattern = '^(\\d+\\.)?(\\d+\\.)?(\\*|\\d+)$';
+    metadataClasses = 'nav-item nav-link active complete';
+    private cbaPackage: CBAPackage;
+
     ngOnInit() {
+        this.elementRef.nativeElement.focus();
+        const regexp = RegExp(this.versionPattern);
+        this.packageCreationStore.state$.subscribe(cbaPackage => {
+            console.log(cbaPackage);
+            console.log('abbaaaas' + cbaPackage.metaData.name);
+            this.cbaPackage = cbaPackage;
+            if (cbaPackage && cbaPackage.metaData && cbaPackage.metaData.description
+                && cbaPackage.metaData.name && cbaPackage.metaData.version &&
+                regexp.test(cbaPackage.metaData.version)) {
+                this.isSaveEnabled = true;
+                if (!this.metadataClasses.includes('complete')) {
+                    console.log('added');
+                    this.metadataClasses += 'complete';
+                }
+                console.log('perhaps it is been added');
+            } else {
+                this.isSaveEnabled = false;
+                this.metadataClasses = this.metadataClasses.replace('complete', '');
+            }
+        });
+    }
 
+    openTourGuide(step: string) {
+        // this.tourService.goto(step);
     }
 
     saveBluePrint() {
-        this.packageCreationStore.state$.subscribe(
-            cbaPackage => {
-                console.log(cbaPackage);
-                FilesContent.clear();
-                let packageCreationModes: PackageCreationModes;
-                cbaPackage = PackageCreationModes.mapModeType(cbaPackage);
-                cbaPackage.metaData = PackageCreationModes.setEntryPoint(cbaPackage.metaData);
-                packageCreationModes = PackageCreationBuilder.getCreationMode(cbaPackage);
-                packageCreationModes.execute(cbaPackage, this.packageCreationUtils);
-                this.filesData.push(this.folder.TREE_DATA);
-                this.saveBluePrintToDataBase();
-            });
+        this.ngxService.start();
+        console.log(this.cbaPackage);
+        FilesContent.clear();
+        let packageCreationModes: PackageCreationModes;
+        this.cbaPackage = PackageCreationModes.mapModeType(this.cbaPackage);
+        this.cbaPackage.metaData = PackageCreationModes.setEntryPoint(this.cbaPackage.metaData);
+        packageCreationModes = PackageCreationBuilder.getCreationMode(this.cbaPackage);
+
+        // this.cbaPackage.templateTopology.content = this.designerStore.state.sourceContent;
+        packageCreationModes.execute(this.cbaPackage, this.packageCreationUtils);
+        this.filesData.push(this.folder.TREE_DATA);
+        this.saveBluePrintToDataBase();
 
 
     }
@@ -76,35 +129,50 @@ export class PackageCreationComponent implements OnInit {
 
     saveBluePrintToDataBase() {
         this.create();
-        this.zipFile.generateAsync({type: 'blob'})
+        this.zipFile.generateAsync({ type: 'blob' })
             .then(blob => {
-                this.packageCreationStore.saveBluePrint(blob);
+                this.packageCreationService.savePackage(blob).subscribe(
+                    bluePrintDetailModels => {
+                        if (bluePrintDetailModels) {
+                            const id = bluePrintDetailModels.toString().split('id')[1].split(':')[1].split('"')[1];
+                            this.toastService.success('Package Updated Successfully ');
+                            this.isSaveEnabled = false;
+                            this.router.navigate(['/packages/package/' + id]);
+                        }
+                    }, error => {
+                        // this.toastService.error('Error occure during editng process ' + error.message);
+                        console.log('Error -' + error.message);
+                    }, () => {
+                        this.ngxService.stop();
+                    });
             });
     }
 
 
     create() {
-        FilesContent.getMapOfFilesNamesAndContent().forEach((key, value) => {
+        FilesContent.getMapOfFilesNamesAndContent().forEach((value, key) => {
             this.zipFile.folder(key.split('/')[0]);
             this.zipFile.file(key, value);
         });
-        /*this.folder.TREE_DATA.forEach((path) => {
-            const name = path.name;
-            if (path.children) {
-                this.zipFile.folder(name);
-                path.children.forEach(children => {
-                    const name2 = children.name;
-                    if (FilesContent.getMapOfFilesNamesAndContent().has(name2)) {
-                        this.zipFile.file(name + '/' + name2, FilesContent.getMapOfFilesNamesAndContent().get(name2));
-                    } else {
-                        // this.zipFile.file(name2, FilesContent.getMapOfFilesNamesAndContent().get(name2));
-                    }
-
-                });
 
-            }
-        });*/
     }
 
 
+    goBackToDashBorad() {
+        this.router.navigate(['/packages']);
+    }
+
+    saveMetaData() {
+        console.log('executed change');
+        this.metadataTabComponent.saveMetaDataToStore();
+
+    }
+
+    canDeactivate(): boolean {
+        return this.isSaveEnabled;
+    }
+
+    ngOnDestroy(): void {
+
+    }
 }