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 6ba91d7..1d23405 100644 (file)
@@ -19,149 +19,160 @@ limitations under the License.
 ============LICENSE_END============================================
 */
 
-import {Component, OnInit} from '@angular/core';
-import {FilesContent, FolderNodeElement, MetaDataFile, MetaDataTab} from './mapping-models/metadata/MetaDataTab.model';
-// import {saveAs} from 'file-saver/dist/FileSaver';
+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 {Observable} from 'rxjs';
-import {ApiService} from '../../../../common/core/services/api.service';
-import {BlueprintURLs} from '../../../../common/constants/app-constants';
-import {Import, Metadata, VlbDefinition} from './mapping-models/definitions/VlbDefinition';
-import {JsonConvert} from 'json2typescript';
-import {JsonPipe} from '@angular/common';
-import {PackageCreationService} from './package-creation.service';
-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({
     selector: 'app-package-creation',
     templateUrl: './package-creation.component.html',
     styleUrls: ['./package-creation.component.css']
 })
-export class PackageCreationComponent implements OnInit {
+export class PackageCreationComponent extends ComponentCanDeactivate implements OnInit, OnDestroy {
 
-    modes: string[] = ['Designer Mode', 'Scripting Mode'];
-    dictionaryLibraryInstances: string[] = ['x', 'y'];
-    private target: HTMLElement;
-    private newElement: HTMLElement;
-    private metaDataTab: MetaDataTab = new MetaDataTab();
 
-    private result: string;
+    // adding initial referencing to designer mode
 
-    private folder: FolderNodeElement = new FolderNodeElement();
-    private zipFile: JSZip = new JSZip();
-    private filesData: any = [];
 
+    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) {
 
-    constructor(private packageCreationService: PackageCreationService, private packageCreationUtils: PackageCreationUtils) {
+        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', '');
+            }
+        });
     }
 
-
-    createAnotherCustomKeyDiv() {
-        console.log(this.metaDataTab);
-        this.newElement = document.createElement('div');
-        this.newElement.setAttribute('class', 'alert-dark');
-        this.target = document.getElementById('target');
-        this.target.appendChild(this.newElement);
-        this.metaDataTab = new MetaDataTab();
-        this.metaDataTab.name = 'klfdj';
-        this.metaDataTab.entryFileName = 'Definitions/vLB_CDS.json';
-        this.metaDataTab.description = 'rere';
-        this.metaDataTab.tags = 'ffsssssss';
-        this.metaDataTab.version = '1.01.10';
-        this.metaDataTab.templateName = 'test';
-
-
-        this.saveToFileSystem(MetaDataFile.getObjectInstance(this.metaDataTab));
+    openTourGuide(step: string) {
+        // this.tourService.goto(step);
     }
 
-    validatePacakgeName() {
-
-    }
+    saveBluePrint() {
+        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();
 
-    getDictionaryLibraryInstances() {
 
     }
 
-    saveMetaData() {
-
 
+    saveBluePrintToDataBase() {
+        this.create();
+        this.zipFile.generateAsync({ type: 'blob' })
+            .then(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();
+                    });
+            });
     }
 
-    private saveToFileSystem(response) {
 
-        const filename = 'TOSCA.meta';
-        FilesContent.putData(filename, response);
-
-        const filenameEntry = 'vLB_CDS.json';
-        const vlbDefinition: VlbDefinition = new VlbDefinition();
-        const metadata: Metadata = new Metadata();
-
-        metadata.templateAuthor = ' lldkslds';
-        metadata.templateName = ' lldkslds';
-        metadata.templateTags = ' lldkslds';
-        metadata.templateVersion = ' lldkslds';
-        metadata['author-email'] = ' lldkslds';
-        metadata['user-groups'] = ' lldkslds';
-        vlbDefinition.metadata = metadata;
-
-        vlbDefinition.imports = [{
-            file: 'Definitions/data_types.json'
-        }];
-
-        const value = this.packageCreationUtils.transformToJson(vlbDefinition);
-        FilesContent.putData(filenameEntry, value);
+    create() {
+        FilesContent.getMapOfFilesNamesAndContent().forEach((value, key) => {
+            this.zipFile.folder(key.split('/')[0]);
+            this.zipFile.file(key, value);
+        });
 
-        this.filesData.push(this.folder.TREE_DATA);
-        this.saveToBackend();
     }
 
 
-    saveToBackend() {
-        this.create();
-        this.zipFile.generateAsync({type: 'blob'})
-            .then(blob => {
-                const formData = new FormData();
-                formData.append('file', blob);
-                this.packageCreationService.saveBlueprint(formData)
-                    .subscribe(
-                        data => {
-                            console.log('Success:' + JSON.stringify(data));
-                        }, error => {
-                            console.log('Error -' + error.message);
-                        });
-
-            });
+    goBackToDashBorad() {
+        this.router.navigate(['/packages']);
     }
 
+    saveMetaData() {
+        console.log('executed change');
+        this.metadataTabComponent.saveMetaDataToStore();
 
-    create() {
-        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;
-                    console.log(FilesContent.getMapOfFilesNamesAndContent());
-                    console.log(name2);
-                    if (FilesContent.getMapOfFilesNamesAndContent().has(name2)) {
-                        this.zipFile.file(name + '/' + name2, FilesContent.getMapOfFilesNamesAndContent().get(name2));
-                    } else {
-                    }
-
-                });
+    }
 
-            }
-        });
+    canDeactivate(): boolean {
+        return this.isSaveEnabled;
     }
 
+    ngOnDestroy(): void {
 
-    searchPackages($event: Event) {
-        const searchQuery = event.target.value;
-        searchQuery = searchQuery.trim();
-        this.packagesStore.search(searchQuery);
     }
 }