Adding view and edit feature 05/102505/3
authorshaaban Altanany <shaaban.eltanany.ext@orange.com>
Thu, 27 Feb 2020 14:35:57 +0000 (16:35 +0200)
committershaaban Altanany <shaaban.eltanany.ext@orange.com>
Thu, 27 Feb 2020 15:33:43 +0000 (17:33 +0200)
Issue-ID: CCSDK-2123

Signed-off-by: shaaban Altanany <shaaban.eltanany.ext@orange.com>
Change-Id: I6fa4469a982a3c6f76002909813480c9ac4d0e65

14 files changed:
cds-ui/designer-client/src/app/modules/feature-modules/packages/configuration-dashboard/configuration-dashboard.component.html
cds-ui/designer-client/src/app/modules/feature-modules/packages/configuration-dashboard/configuration-dashboard.component.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/configuration-dashboard/configuration-dashboard.service.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/configuration-dashboard/package.store.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/creationModes/DesignerCreationMode.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/creationModes/PackageCreationModes.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/dsl-definitions-tab/dsl-definitions-tab.component.html
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/dsl-definitions-tab/dsl-definitions-tab.component.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/mapping-models/metadata/MetaDataTab.model.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/metadata-tab/metadata-tab.component.html
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/metadata-tab/metadata-tab.component.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/package-creation.component.html
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/package-creation.component.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/package-creation.store.ts

index f072584..6194a9b 100644 (file)
                         <li>Package Name</li>
                     </ul>
                 </h2>
-               <!-- <div class="col d-flex justify-content-end header-button-save">
-                    <button class="float btn btn-sm btn-outline-secondary" disabled>Discard Changes</button>
-                    <button class="float btn btn-sm btn-primary" (click)="saveBluePrint()">Save</button>
-                </div>-->
+                <div class="col d-flex justify-content-end header-button-save">
+                    <button class="float btn btn-sm btn-outline-secondary" (click)="goBacktoDashboard()" >Discard Changes</button>
+                    <button class="float btn btn-sm btn-primary" (click)="editBluePrint()">Apply Changes</button>
+                </div>
             </div>
         </header>
 
 
 
-        <div class="container-fluid body-container">
+        <div class="container-fluid body-container">                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
 
             <div class="container">
                <!-- <div class="creat-action-container">
@@ -77,7 +77,7 @@
                             <a class="nav-item nav-link active" id="nav-metadata-tab" data-toggle="tab"
                                href="#nav-metadata"
                                role="tab" aria-controls="nav-metadata"
-                               aria-selected="true">METADATA</a>
+                               aria-selected="true"  autofocus  #nameit (focusout)="saveMetaData()">METADATA</a>
                             <a class="nav-item nav-link" id="nav-template-tab" data-toggle="tab" href="#nav-template"
                                role="tab" aria-controls="nav-template"
                                aria-selected="false">TEMPLATE & MAPPING</a>
index 766e0b1..1fcc35f 100644 (file)
@@ -1,7 +1,16 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-import { PackageStore } from './package.store';
-import { BluePrintDetailModel } from '../model/BluePrint.detail.model';
+import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';
+import {ActivatedRoute, Router} from '@angular/router';
+import {BluePrintDetailModel} from '../model/BluePrint.detail.model';
+import {PackageCreationStore} from '../package-creation/package-creation.store';
+import {FilesContent, FolderNodeElement, MetaDataTabModel} from '../package-creation/mapping-models/metadata/MetaDataTab.model';
+import {MetadataTabComponent} from '../package-creation/metadata-tab/metadata-tab.component';
+import * as JSZip from 'jszip';
+import {ConfigurationDashboardService} from './configuration-dashboard.service';
+import {VlbDefinition} from '../package-creation/mapping-models/definitions/VlbDefinition';
+import {DslDefinition} from '../package-creation/mapping-models/CBAPacakge.model';
+import {PackageCreationUtils} from '../package-creation/package-creation.utils';
+import {PackageCreationModes} from '../package-creation/creationModes/PackageCreationModes';
+import {PackageCreationBuilder} from '../package-creation/creationModes/PackageCreationBuilder';
 
 
 @Component({
@@ -11,24 +20,156 @@ import { BluePrintDetailModel } from '../model/BluePrint.detail.model';
 })
 export class ConfigurationDashboardComponent implements OnInit {
     viewedPackage: BluePrintDetailModel = new BluePrintDetailModel();
+    @ViewChild(MetadataTabComponent, {static: false})
+    private metadataTabComponent: MetadataTabComponent;
 
-    constructor(private route: ActivatedRoute, private configurationStore: PackageStore) {
+    entryDefinitionKeys: string[] = ['template_tags', 'user-groups',
+        'author-email', 'template_version', 'template_name', 'template_author'];
+    @ViewChild('nameit', {static: true})
+    private elementRef: ElementRef;
+
+    private zipFile: JSZip = new JSZip();
+    private filesData: any = [];
+    private folder: FolderNodeElement = new FolderNodeElement();
+
+    constructor(private route: ActivatedRoute, private configurationDashboardService: ConfigurationDashboardService,
+                private packageCreationStore: PackageCreationStore,
+                private packageCreationUtils: PackageCreationUtils,
+                private router: Router) {
     }
-    // test
+
     ngOnInit() {
+        this.elementRef.nativeElement.focus();
         const id = this.route.snapshot.paramMap.get('id');
-        this.configurationStore.getPagedPackages(id).subscribe(
+        this.configurationDashboardService.getPagedPackages(id).subscribe(
             (bluePrintDetailModels) => {
-                console.log('-------------xxxxxxxxxxx----------------');
-                console.log(bluePrintDetailModels);
-                this.configurationStore.setConfiguration(bluePrintDetailModels);
-
-                console.log('----------------- id ' + id);
                 if (bluePrintDetailModels) {
-                    this.configurationStore.downloadResource(
-                        bluePrintDetailModels[0].artifactName + '/' + bluePrintDetailModels[0].artifactVersion);
+                    this.downloadCBAPackage(bluePrintDetailModels);
+                }
+            });
+    }
+
+
+    private downloadCBAPackage(bluePrintDetailModels: BluePrintDetailModel) {
+        this.configurationDashboardService.downloadResource(
+            bluePrintDetailModels[0].artifactName + '/' + bluePrintDetailModels[0].artifactVersion).subscribe(response => {
+            const blob = new Blob([response], {type: 'application/octet-stream'});
+            this.zipFile.loadAsync(blob).then((zip) => {
+                Object.keys(zip.files).forEach((filename) => {
+                    console.log(filename);
+                    zip.files[filename].async('string').then((fileData) => {
+                        if (fileData) {
+                            if (filename.includes('Scripts/')) {
+                                this.setScripts(filename, fileData);
+                            } else if (filename.includes('Templates/')) {
+                                if (filename.includes('-mapping.')) {
+                                    this.setMapping(filename, fileData);
+                                } else if (filename.includes('-template.')) {
+                                    this.setTemplates(filename, fileData);
+                                }
+                            } else if (filename.includes('Definitions/')) {
+                                this.setImports(filename, fileData);
+                            } else if (filename.includes('TOSCA-Metadata/')) {
+                                const metaDataTabInfo: MetaDataTabModel = this.getMetaDataTabInfo(fileData);
+                                // console.log(metaDataTabInfo);
+                                this.setMetaData(metaDataTabInfo, bluePrintDetailModels[0]);
+                            }
+                        }
+                    });
+                });
+            });
+        });
+    }
+
+    private setScripts(filename: string, fileData: any) {
+        this.packageCreationStore.addScripts(filename, fileData);
+    }
+
+    private setImports(filename: string, fileData: any) {
+        if (filename.includes('blueprint.json') || filename.includes('vLB_CDS.json')) {
+            let definition = new VlbDefinition();
+            definition = fileData as VlbDefinition;
+            definition = JSON.parse(fileData);
+            const dslDefinition = new DslDefinition();
+            dslDefinition.content = this.packageCreationUtils.transformToJson(definition.dsl_definitions);
+            const mapOfCustomKeys = new Map<string, string>();
+            for (const metadataKey in definition.metadata) {
+                if (!this.entryDefinitionKeys.includes(metadataKey + '')) {
+                    mapOfCustomKeys.set(metadataKey + '', definition.metadata[metadataKey + '']);
                 }
+            }
+            this.packageCreationStore.changeDslDefinition(dslDefinition);
+            this.packageCreationStore.setCustomKeys(mapOfCustomKeys);
+        } else {
+            this.packageCreationStore.addDefinition(filename, fileData);
+
+        }
+    }
+
+    private setTemplates(filename: string, fileData: any) {
+        this.packageCreationStore.addTemplate(filename, fileData);
+    }
+
+    private setMapping(fileName: string, fileData: string) {
+        this.packageCreationStore.addMapping(fileName, fileData);
+    }
+
+    editBluePrint() {
+        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();
+            });
+    }
+
+    private setMetaData(metaDataObject: MetaDataTabModel, bluePrintDetailModel: BluePrintDetailModel) {
+        metaDataObject.description = bluePrintDetailModel.artifactDescription;
+        this.packageCreationStore.changeMetaData(metaDataObject);
+
+    }
+
+    saveMetaData() {
+        this.metadataTabComponent.saveMetaDataToStore();
+    }
+
+    getMetaDataTabInfo(fileData: string) {
+        const metaDataTabModel = new MetaDataTabModel();
+        const arrayOfLines = fileData.split('\n');
+        metaDataTabModel.entryFileName = arrayOfLines[3].split(':')[1];
+        metaDataTabModel.name = arrayOfLines[4].split(':')[1];
+        metaDataTabModel.version = arrayOfLines[5].split(':')[1];
+        metaDataTabModel.mode = arrayOfLines[6].split(':')[1];
+        metaDataTabModel.templateTags = new Set<string>(arrayOfLines[7].split(':')[1].split(','));
+        console.log(metaDataTabModel.mode);
+        return metaDataTabModel;
+    }
+
+    saveBluePrintToDataBase() {
+        this.create();
+        this.zipFile.generateAsync({type: 'blob'})
+            .then(blob => {
+                this.packageCreationStore.saveBluePrint(blob);
+                this.router.navigate(['/packages']);
             });
     }
 
+
+    create() {
+        FilesContent.getMapOfFilesNamesAndContent().forEach((value, key) => {
+            this.zipFile.folder(key.split('/')[0]);
+            this.zipFile.file(key, value);
+        });
+
+    }
+
+    goBacktoDashboard() {
+        this.router.navigate(['/packages']);
+    }
 }
index 566339d..239dd63 100644 (file)
@@ -13,13 +13,15 @@ export class ConfigurationDashboardService {
 
     }
 
-    getBluePrintModel(id: string): Observable<BluePrintDetailModel> {
+    private getBluePrintModel(id: string): Observable<BluePrintDetailModel> {
         return this.api.getOne(BlueprintURLs.getOneBlueprint + '/' + id);
     }
+    getPagedPackages(id: string) {
+        return this.getBluePrintModel(id);
+    }
 
-
-    public downloadResource(id: string) {
-        return this.api.getCustomized(id, {responseType: 'blob'});
+    public downloadResource(path: string) {
+        return this.api.getCustomized(BlueprintURLs.download + path, {responseType: 'blob'});
     }
 
 }
index 4669ef1..49de59e 100644 (file)
@@ -19,11 +19,11 @@ limitations under the License.
 ============LICENSE_END============================================
 */
 
-import { Injectable } from '@angular/core';
-import { Store } from '../../../../common/core/stores/Store';
-import { ConfigurationDashboardService } from './configuration-dashboard.service';
-import { PackageDashboardState } from '../model/package-dashboard.state';
-import { BlueprintURLs } from '../../../../common/constants/app-constants';
+import {Injectable} from '@angular/core';
+import {Store} from '../../../../common/core/stores/Store';
+import {ConfigurationDashboardService} from './configuration-dashboard.service';
+import {PackageDashboardState} from '../model/package-dashboard.state';
+import {BlueprintURLs} from '../../../../common/constants/app-constants';
 import * as JSZip from 'jszip';
 
 @Injectable({
@@ -37,53 +37,13 @@ export class PackageStore extends Store<PackageDashboardState> {
         super(new PackageDashboardState());
     }
 
-    getPagedPackages(id: string) {
+   /* getPagedPackages(id: string) {
         return this.configurationDashboardService.getBluePrintModel(id);
     }
 
     public downloadResource(path: string) {
-        console.log('download resource xx');
-        this.configurationDashboardService.downloadResource(BlueprintURLs.download + path).subscribe(response => {
-            console.log('try to download ');
-            const blob = new Blob([response], { type: 'application/octet-stream' });
-            this.zipFile.loadAsync(blob).then((zip) => {
-                Object.keys(zip.files).forEach((filename) => {
-                    console.log(filename);
-                    zip.files[filename].async('string').then((fileData) => {
-                        if (fileData) {
-                            if (filename.includes('Scripts/')) {
-                                this.setScripts(filename, fileData);
-                            } else if (filename.includes('templates/')) {
-                                this.setTemplates(filename, fileData);
-                            } else if (filename.includes('definitions/')) {
-                                this.setImports(filename, fileData);
-                            }
-                        }
-                    });
-                });
-            });
-        });
-    }
-
-    setConfiguration(bluePrintDetailModels) {
-        this.setState({
-            ...this.state,
-            configuration: bluePrintDetailModels[0]
-        });
-    }
-
-    private setScripts(filename: string, fileData: any) {
-        this.setState({
-            ...this.state,
-            scripts: this.state.scripts.setScripts(filename, fileData)
-        });
-    }
+        return this.configurationDashboardService.downloadResource(BlueprintURLs.download + path);
+    }*/
 
-    private setImports(filename: string, fileData: any) {
 
-    }
-
-    private setTemplates(filename: string, fileData: any) {
-
-    }
 }
index 1606d65..e1efc3c 100644 (file)
@@ -41,7 +41,7 @@ export class DesignerCreationMode extends PackageCreationModes {
             FilesContent.putData(key, valueOfFile);
         });
 
-        const filenameEntry = 'Definitions/vLB_CDS.json';
+        const filenameEntry = 'Definitions/blueprint.json';
         const vlbDefinition: VlbDefinition = new VlbDefinition();
         const metadata: Metadata = new Metadata();
 
index b2a9d14..8ccf0c3 100644 (file)
@@ -11,7 +11,7 @@ export abstract class PackageCreationModes {
 
     public static setEntryPoint(metaDataTab: MetaDataTabModel) {
         if (metaDataTab.mode.startsWith(ModeType.Designer)) {
-            metaDataTab.entryFileName = 'Definitions/vLB_CDS.json';
+            metaDataTab.entryFileName = 'Definitions/blueprint.json';
         } else {
             // TODO Not implemented
             metaDataTab.entryFileName = '';
index 6fb1dcf..a67d12b 100644 (file)
@@ -1,5 +1,5 @@
 <ace-editor [(text)]="dslDefinition.content" [mode]="'javascript'" [autoUpdateContent]="true"
-    [durationBeforeCallback]="1000" [theme]="'tomorrow_night_bright'" #editor style="height:300px;">
+    [durationBeforeCallback]="1000" (textChanged)="textChanged($event)" [theme]="'tomorrow_night_bright'" #editor style="height:300px;">
 </ace-editor>
 
-<!-- <app-source-editor [lang]="'javascript'" (textChanged)="textChanged($event)" [(text)]="dslDefinition.content"></app-source-editor> -->
\ No newline at end of file
+<!-- <app-source-editor [lang]="'javascript'" (textChanged)="textChanged($event)" [(text)]="dslDefinition.content"></app-source-editor> -->
index 7171e73..1297bc1 100644 (file)
@@ -1,6 +1,6 @@
-import { Component, OnInit } from '@angular/core';
-import { DslDefinition } from '../mapping-models/CBAPacakge.model';
-import { PackageCreationStore } from '../package-creation.store';
+import {Component, OnInit} from '@angular/core';
+import {DslDefinition} from '../mapping-models/CBAPacakge.model';
+import {PackageCreationStore} from '../package-creation.store';
 
 @Component({
     selector: 'app-dsl-definitions-tab',
@@ -16,11 +16,15 @@ export class DslDefinitionsTabComponent implements OnInit {
     }
 
     ngOnInit() {
-        this.packageCreationStore.changeDslDefinition(this.dslDefinition);
+        this.packageCreationStore.state$.subscribe(cbaPackage => {
+            if (cbaPackage && cbaPackage.definitions && cbaPackage.definitions.dslDefinition) {
+                this.dslDefinition.content = cbaPackage.definitions.dslDefinition.content;
+            }
+        });
 
     }
 
     textChanged(event) {
-        console.log('event changed');
+        this.packageCreationStore.changeDslDefinition(this.dslDefinition);
     }
 }
index 1f8783d..7200e12 100644 (file)
@@ -31,6 +31,11 @@ export class MetaDataTabModel {
     templateName: string;
     templateTags: Set<string> = new Set<string>();
 
+    setCustomKey(mapOfCustomKey: Map<string, string>) {
+        this.mapOfCustomKey = mapOfCustomKey;
+        return this;
+    }
+
 }
 
 /*TOSCA-Meta-File-Version: 1.0.0
@@ -59,10 +64,10 @@ export class FolderNodeElement {
         {
             name: 'Definitions',
             children: [
-                { name: 'activation-blueprint.json' },
-                { name: 'artifacts_types.json' },
-                { name: 'data_types.json' },
-                { name: 'vLB_CDS.json' },
+                {name: 'activation-blueprint.json'},
+                {name: 'artifacts_types.json'},
+                {name: 'data_types.json'},
+                {name: 'vLB_CDS.json'},
             ]
         },
         {
@@ -71,8 +76,8 @@ export class FolderNodeElement {
                 {
                     name: 'kotlin',
                     children: [
-                        { name: 'ScriptComponent.cba.kts' },
-                        { name: 'ResourceAssignmentProcessor.cba.kts' },
+                        {name: 'ScriptComponent.cba.kts'},
+                        {name: 'ResourceAssignmentProcessor.cba.kts'},
                     ]
                 }
             ]
index 6508c96..0ae8efb 100644 (file)
@@ -3,10 +3,11 @@
         <label class="label-name">Mode</label>
         <label name="trst" *ngFor="let mode of modes; let i = index">
             <input class="form-check-input" [(ngModel)]="metaDataTab.mode" type="radio" name="exampleRadios"
-                id="exampleRadios1" value={{mode.name}}>
+                  id="exampleRadios1" value={{mode.name}}>
 
             <span>
-                <i [className]="mode.style" aria-hidden="true" [id]="mode.name"></i>
+                <i [className]="mode.style" aria-hidden="true"
+                   [id]="mode.name"></i>
                 {{mode.name}}
             </span>
         </label>
 
 </div>
 <div class="card creat-card">
-    <div class="single-line-model error">
+    <div class="single-line-model">
         <label class="label-name">Name <span>*</span></label>
         <div class="label-input">
-            <input type="input" [(ngModel)]="metaDataTab.name" placeholder="Topology name.vLB.CDS">
+            <input type="input" [readOnly]="!packageNameAndVersionEnables" [(ngModel)]="metaDataTab.name"
+                   placeholder="Topology name.vLB.CDS">
         </div>
-        <div class="model-note-container error-message">
+        <!--<div class="model-note-container error-message">
             Package name already exists with this version. Please enter a different name or enter different version
             number.
-        </div>
+        </div>-->
     </div>
 
     <div class="single-line-model">
         <label class="label-name">Version <span>*</span></label>
         <div class="label-input">
-            <input type="input" [(ngModel)]="metaDataTab.version" (input)="validatePackageNameAndVersion()"
-                placeholder="Example: 1.0.0">
+            <input type="input" [readOnly]="!packageNameAndVersionEnables" [(ngModel)]="metaDataTab.version" (input)="validatePackageNameAndVersion()"
+                   placeholder="Example: 1.0.0">
         </div>
         <div class="model-note-container error-message">{{errorMessage}}</div>
     </div>
         <label class="label-name">tags</label>
         <div class="label-input">
             <input type="input" (keyup.enter)="addTag($event)" [(ngModel)]="metaDataTab.tags"
-                placeholder="Ex., vDNS-CDS">
+                   placeholder="Ex., vDNS-CDS">
 
         </div>
         <div class="model-note-container tag-notes">Seprate tags with comma or space</div>
         <div class="model-note-container tages-container">
             <span *ngFor="let tag of tags" class="single-tage">{{tag}} <i (click)="removeTag(tag)"
-                    class="fa fa-times-circle"></i></span>
+                                                                          class="fa fa-times-circle"></i></span>
         </div>
     </div>
 </div>
@@ -77,7 +79,7 @@
             </div>
             <div *ngFor="let map of customKeysMap | keyvalue; let i=index" class="single-custom-key">
                 <div class="single-line-custom-key">
-                    <label class="label-name"><span>{{i+1}}-</span> Name</label>
+                    <label class="label-name"><span>{{i + 1}}-</span> Name</label>
                     <div class="label-input">
                         <input value="{{map.key}}" name="key" type="input" placeholder="Enter name">
                     </div>
                         <input value="{{map.value}}" name="value" type="input" placeholder="Enter value">
                     </div>
                 </div>
-                <div class="single-line-custom-key-delete"><button (click)="removeKey($event,map.key)"
-                        class="custom-key-delete"><i aria-hidden="true" class="icon-delete"></i></button></div>
+                <div class="single-line-custom-key-delete">
+                    <button (click)="removeKey($event,map.key)"
+                            class="custom-key-delete"><i aria-hidden="true" class="icon-delete"></i></button>
+                </div>
             </div>
 
             <div class="single-custom-key">
                 <div class="single-line-custom-key">
-                    <label class="label-name"><span>{{customKeysMap.size+1}}.</span> Name</label>
+                    <label class="label-name"><span>{{customKeysMap.size + 1}}.</span> Name</label>
                     <div class="label-input">
                         <input (keyup.enter)="addCustomKey()" name="key" type="input" class="mapKey"
-                            placeholder="Enter name">
+                               placeholder="Enter name">
                     </div>
                 </div>
                 <div class="single-line-custom-key">
                     <label class="label-name">Value</label>
                     <div class="label-input">
                         <input (keyup.enter)="addCustomKey()" class="mapValue" name="value" type="input"
-                            placeholder="Enter value">
+                               placeholder="Enter value">
                     </div>
                 </div>
                 <!-- <div class="single-line-custom-key-delete"><button (click)="removeKey($event)"
 
         </div>
     </div>
-</div>
\ No newline at end of file
+</div>
index eb486cf..b999257 100644 (file)
@@ -1,8 +1,9 @@
-import { Component, OnInit } from '@angular/core';
-import { PackageCreationService } from '../package-creation.service';
-import { MetaDataTabModel } from '../mapping-models/metadata/MetaDataTab.model';
-import { PackageCreationStore } from '../package-creation.store';
-import { PackageStore } from '../../configuration-dashboard/package.store';
+import {Component, OnInit} from '@angular/core';
+import {PackageCreationService} from '../package-creation.service';
+import {MetaDataTabModel} from '../mapping-models/metadata/MetaDataTab.model';
+import {PackageCreationStore} from '../package-creation.store';
+import {PackageStore} from '../../configuration-dashboard/package.store';
+import {ActivatedRoute} from '@angular/router';
 
 
 @Component({
@@ -11,37 +12,47 @@ import { PackageStore } from '../../configuration-dashboard/package.store';
     styleUrls: ['./metadata-tab.component.css']
 })
 export class MetadataTabComponent implements OnInit {
-
+    packageNameAndVersionEnables = true;
     counter = 0;
     tags = new Set<string>();
     customKeysMap = new Map();
     modes: object[] = [
-        { name: 'Designer Mode', style: 'mode-icon icon-designer-mode' },
-        { name: 'Scripting Mode', style: 'mode-icon icon-scripting-mode' },
-        { name: 'Generic Script Mode', style: 'mode-icon icon-generic-script-mode' }];
+        {name: 'Designer Mode', style: 'mode-icon icon-designer-mode'}];
+    /*  {name: 'Scripting Mode', style: 'mode-icon icon-scripting-mode'},
+      {name: 'Generic Script Mode', style: 'mode-icon icon-generic-script-mode'}];*/
     private metaDataTab: MetaDataTabModel = new MetaDataTabModel();
     private errorMessage: string;
 
-    constructor(
-        private packageCreationService: PackageCreationService,
-        private packageCreationStore: PackageCreationStore,
-        private packageStore: PackageStore) {
+    constructor(private route: ActivatedRoute,
+                private packageCreationService: PackageCreationService,
+                private packageCreationStore: PackageCreationStore,
+                private packageStore: PackageStore) {
 
     }
 
     ngOnInit() {
         this.metaDataTab.templateTags = this.tags;
         this.metaDataTab.mapOfCustomKey = this.customKeysMap;
-        this.packageCreationStore.changeMetaData(this.metaDataTab);
 
-        this.packageStore.state$.subscribe(element => {
-            if (element && element.configuration) {
-                console.log('from element2');
+        const id = this.route.snapshot.paramMap.get('id');
+        id ? this.packageNameAndVersionEnables = false :
+            this.packageNameAndVersionEnables = true;
+        this.packageCreationStore.state$.subscribe(element => {
+
+            if (element && element.metaData) {
+
+                this.metaDataTab.name = element.metaData.name;
+                this.metaDataTab.version = element.metaData.version;
+                this.metaDataTab.description = element.metaData.description;
+                this.tags = element.metaData.templateTags;
+                this.metaDataTab.templateTags = this.tags;
                 console.log(element);
-                this.metaDataTab.name = element.configuration.artifactName;
-                this.metaDataTab.version = element.configuration.artifactVersion;
-                this.metaDataTab.description = element.configuration.artifactDescription;
-                this.tags = new Set(element.configuration.tags.split(','));
+                if (element.metaData.mode && element.metaData.mode.includes(' DEFAULT')) {
+                    this.metaDataTab.mode = 'Designer Mode';
+                }
+
+                this.customKeysMap = element.metaData.mapOfCustomKey;
+                // this.tags = element.metaData.templateTags;
 
             }
         });
@@ -95,4 +106,8 @@ export class MetadataTabComponent implements OnInit {
         }
 
     }
+
+    saveMetaDataToStore() {
+        this.packageCreationStore.changeMetaData(this.metaDataTab);
+    }
 }
index 9069048..af5ed4f 100644 (file)
@@ -2,21 +2,20 @@
 
 <div class="new-wrapper">
     <div class="container-fluid main-container">
-    <header class="page-title">
-        <div class="row">
-            <h2 class="col m-0">
-                <ul class="breadcrumb-header">
-                    <li>CBA Packages</li>
-                    <li>Package Name</li>
-                </ul>
-            </h2>
-            <div class="col d-flex justify-content-end header-button-save">
-                <button class="float btn btn-sm btn-outline-secondary" disabled>Discard Changes</button>
-                <button class="float btn btn-sm btn-primary" (click)="saveBluePrint()">Save</button>
+        <header class="page-title">
+            <div class="row">
+                <h2 class="col m-0">
+                    <ul class="breadcrumb-header">
+                        <li>CBA Packages</li>
+                        <li>Package Name</li>
+                    </ul>
+                </h2>
+                <div class="col d-flex justify-content-end header-button-save">
+                    <button class="float btn btn-sm btn-outline-secondary" (click)="goBackToDashBorad()" >Discard Changes</button>
+                    <button class="float btn btn-sm btn-primary" (click)="saveBluePrint()">Save</button>
+                </div>
             </div>
-        </div>
-    </header>
-
+        </header>
 
 
         <div class="container-fluid body-container">
                     </a>
                 </div>
 
-                <div class="card creat-card view-package-container">
-                    <div class="row">
-                        <div class="col-8">
-                            <div class="row">
-                                <div class="col d-flex">
-                                    <i class="package-type-icon icon-designer-mode"></i>
-                                    <div class="package-name-container">
-                                        <div class="row">
-                                            <div class="col-12 package-name deployed">
-                                                Package Name
-                                                <span>.vLB.CDS</span>
-                                                <i class="icon-deploy"></i>
-                                            </div>
-                                            <div class="col-12 package-description">
-                                                Last modified Oct 4, 2019 03:48 PM By Ahmed Abbas
-                                            </div>
-                                        </div>
-                                        <!-- <div class="row">
-                                            <div class="col-4">
-                                                <div class="package-view-title">Author Name</div>
-                                                <p>Abdelmuhaimen Seaudi</p>
-                                            </div>
-                                            <div class="col-4">
-                                                <div class="package-view-title">Author Email</div>
-                                                <p>abdelmuhaimen.seaudi@orange.com</p>
-                                            </div>
-                                            <div class="col-4">
-                                                <div class="package-view-title">Contributions</div>
-                                                <ul class="package-contributers">
-                                                    <li>
-                                                        <button type="button" class="border-fade" data-toggle="tooltip"
-                                                                data-placement="bottom"
-                                                                title="User name">
-                                                            <img src="/assets/img/img-user1.jpeg">
-                                                        </button>
-                                                    </li>
-                                                    <li>
-                                                        <button type="button" data-toggle="tooltip" data-placement="bottom"
-                                                                title="User name">
-                                                            <img src="/assets/img/img-user2.jpg">
-                                                        </button>
-                                                    </li>
-                                                    <li>
-                                                        <button type="button" data-toggle="tooltip" data-placement="bottom"
-                                                                title="User name">
-                                                            <img src="/assets/img/img-user3.jpg">
-                                                        </button>
-                                                    </li>
-                                                    <li>
-                                                        <a href="">5 contributors</a>
-                                                    </li>
-                                                </ul>
-                                            </div>
-                                        </div> -->
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="col-4 package-view-button">
-                            <button class="btn btn-sm btn-outline-secondary"><i class="fa fa-play-circle"></i> Deploy</button>
-                            <button class="btn btn-sm btn-primary">Designer Mode</button>
-                        </div>
-                    </div>
-                 
-                </div>
 
                 <nav class="row">
                     <!--Nav Tabs-->
                             <a class="nav-item nav-link active" id="nav-metadata-tab" data-toggle="tab"
                                href="#nav-metadata"
                                role="tab" aria-controls="nav-metadata"
-                               aria-selected="true">METADATA</a>
+                               aria-selected="false"  autofocus  #nameit (focusout)="test()">METADATA</a>
                             <a class="nav-item nav-link" id="nav-template-tab" data-toggle="tab" href="#nav-template"
                                role="tab" aria-controls="nav-template"
                                aria-selected="false">TEMPLATE & MAPPING</a>
                 </div>
             </div>
         </div>
-</div>
+    </div>
 </div>
index 58c04e8..42db268 100644 (file)
@@ -19,15 +19,17 @@ 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, 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 {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';
 
 
 @Component({
@@ -36,24 +38,33 @@ import { PackageCreationUtils } from './package-creation.utils';
     styleUrls: ['./package-creation.component.css']
 })
 export class PackageCreationComponent implements OnInit {
+
+    // adding initial referencing to designer mode
+
+
+    constructor(private packageCreationStore: PackageCreationStore,
+                private packageCreationUtils: PackageCreationUtils,
+                private router: Router) {
+    }
+
     counter = 0;
     modes: object[] = [
-        { name: 'Designer Mode', style: 'mode-icon icon-designer-mode' },
-        { name: 'Scripting Mode', style: 'mode-icon icon-scripting-mode' }];
+        {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();
 
-    // adding initial referencing to designer mode
+    @ViewChild(MetadataTabComponent, {static: false})
+    private metadataTabComponent: MetadataTabComponent;
 
-
-    constructor(private packageCreationStore: PackageCreationStore, private packageCreationUtils: PackageCreationUtils) {
-    }
+    @ViewChild('nameit', {static: true})
+    private elementRef: ElementRef;
 
     ngOnInit() {
-
+        this.elementRef.nativeElement.focus();
     }
 
     saveBluePrint() {
@@ -76,9 +87,10 @@ 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.router.navigate(['/packages']);
             });
     }
 
@@ -88,23 +100,14 @@ export class PackageCreationComponent implements OnInit {
             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));
-                    }
-
-                });
-
-            }
-        });*/
+
     }
 
+    test() {
+        this.metadataTabComponent.saveMetaDataToStore();
+    }
 
+    goBackToDashBorad() {
+        this.router.navigate(['/packages']);
+    }
 }
index 6a9d9c4..b2268f0 100644 (file)
@@ -19,16 +19,15 @@ limitations under the License.
 ============LICENSE_END============================================
 */
 
-import { Injectable } from '@angular/core';
+import {Injectable} from '@angular/core';
 
-import { Store } from '../../../../common/core/stores/Store';
+import {Store} from '../../../../common/core/stores/Store';
 
-import { CBAPackage, DslDefinition } from './mapping-models/CBAPacakge.model';
-import { PackageCreationService } from './package-creation.service';
-import { FolderNodeElement, MetaDataTabModel } from './mapping-models/metadata/MetaDataTab.model';
-import * as JSZip from 'jszip';
-import { Observable } from 'rxjs';
-import { ResourceDictionary } from './mapping-models/ResourceDictionary.model';
+import {CBAPackage, DslDefinition} from './mapping-models/CBAPacakge.model';
+import {PackageCreationService} from './package-creation.service';
+import {MetaDataTabModel} from './mapping-models/metadata/MetaDataTab.model';
+import {Observable} from 'rxjs';
+import {ResourceDictionary} from './mapping-models/ResourceDictionary.model';
 
 
 @Injectable({
@@ -36,8 +35,6 @@ import { ResourceDictionary } from './mapping-models/ResourceDictionary.model';
 })
 export class PackageCreationStore extends Store<CBAPackage> {
 
-    private folder: FolderNodeElement = new FolderNodeElement();
-    private zipFile: JSZip = new JSZip();
 
     constructor(private packageCreationService: PackageCreationService) {
         super(new CBAPackage());
@@ -51,6 +48,13 @@ export class PackageCreationStore extends Store<CBAPackage> {
         });
     }
 
+    setCustomKeys(mapOfCustomKey: Map<string, string>) {
+        this.setState({
+            ...this.state,
+            metaData: this.state.metaData.setCustomKey(mapOfCustomKey)
+        });
+    }
+
     changeDslDefinition(dslDefinition: DslDefinition) {
 
         this.setState({