Renaming Files having BluePrint to have Blueprint
[ccsdk/cds.git] / cds-ui / designer-client / src / app / modules / feature-modules / packages / package-creation / metadata-tab / metadata-tab.component.ts
1 import {Component, OnInit} from '@angular/core';
2 import {PackageCreationService} from '../package-creation.service';
3 import {MetaDataTabModel} from '../mapping-models/metadata/MetaDataTab.model';
4 import {PackageCreationStore} from '../package-creation.store';
5 import {ActivatedRoute} from '@angular/router';
6
7
8 @Component({
9     selector: 'app-metadata-tab',
10     templateUrl: './metadata-tab.component.html',
11     styleUrls: ['./metadata-tab.component.css']
12 })
13 export class MetadataTabComponent implements OnInit {
14
15     counter = 0;
16     tags = new Set<string>();
17     customKeysMap = new Map();
18     modes: any[] = [
19         {name: 'Designer Mode', style: 'mode-icon icon-topologyView-active'}];
20     /*  {name: 'Scripting Mode', style: 'mode-icon icon-topologySource'},
21       {name: 'Generic Script Mode', style: 'mode-icon icon-topologySource'}];*/
22     modeType = this.modes[0].name;
23     metaDataTab: MetaDataTabModel = new MetaDataTabModel();
24     errorMessage: string;
25     versionPattern = '^(\\d+\\.)?(\\d+\\.)?(\\*|\\d+)$';
26     isNameEditable = false;
27
28     constructor(
29         private route: ActivatedRoute,
30         private packageCreationService: PackageCreationService,
31         private packageCreationStore: PackageCreationStore
32     ) {
33
34     }
35
36     ngOnInit() {
37         this.metaDataTab.templateTags = this.tags;
38         this.metaDataTab.mapOfCustomKey = this.customKeysMap;
39         this.metaDataTab.mode = this.modeType;
40         this.isNameEditable = this.route.snapshot.paramMap.get('id') == null;
41         this.packageCreationStore.state$.subscribe(element => {
42
43             if (element && element.metaData) {
44
45                 this.metaDataTab.name = element.metaData.name;
46                 this.metaDataTab.version = element.metaData.version;
47                 this.metaDataTab.description = element.metaData.description;
48                 this.tags = element.metaData.templateTags;
49                 this.tags.delete('');
50                 this.metaDataTab.templateTags = this.tags;
51                 if (element.metaData.mode && element.metaData.mode.includes('DEFAULT')) {
52                     this.metaDataTab.mode = 'Designer Mode';
53                     this.modeType = this.metaDataTab.mode;
54                 }
55
56                 this.customKeysMap = element.metaData.mapOfCustomKey;
57                 this.metaDataTab.mapOfCustomKey = this.customKeysMap;
58                 /* if (this.isNameEditable) {
59                      this.validatePackageNameAndVersion();
60                  }*/
61                 // this.tags = element.metaData.templateTags;
62
63
64             }
65         });
66     }
67
68     removeTag(value) {
69         // console.log(event);
70         this.tags.delete(value);
71     }
72
73     addTag(event) {
74         const value = event.target.value;
75         console.log(value);
76         if (value && value.trim().length > 0) {
77             event.target.value = '';
78             this.tags.add(value.trim());
79         }
80     }
81
82     removeKey(event, key) {
83         console.log(event);
84         this.customKeysMap.delete(key);
85     }
86
87     addCustomKey() {
88         // tslint:disable-next-line: no-string-literal
89         const key = document.getElementsByClassName('mapKey')[0];
90         // tslint:disable-next-line: no-string-literal
91         const value = document.getElementsByClassName('mapValue')[0];
92
93         // tslint:disable-next-line: no-string-literal
94         if (key['value'] && value['value']) {
95             // tslint:disable-next-line: no-string-literal
96             this.customKeysMap.set(key['value'], value['value']);
97             // tslint:disable-next-line: no-string-literal
98             key['value'] = '';
99             // tslint:disable-next-line: no-string-literal
100             value['value'] = '';
101         }
102     }
103
104     validatePackageNameAndVersion() {
105         console.log('in validate');
106         console.log('in this.metaDataTab.name' + this.metaDataTab.name);
107         if (this.metaDataTab.name && this.metaDataTab.version) {
108             this.packageCreationService.checkBlueprintNameAndVersion(this.metaDataTab.name, this.metaDataTab.version).then(element => {
109                 if (element) {
110                     this.errorMessage = 'Package name already exists with this version. Use different name or different version number.';
111                 } else if (!this.metaDataTab.version.match(this.versionPattern)) {
112                     this.errorMessage = 'version should be as example 1.0.0';
113                 } else {
114                     this.errorMessage = '';
115                 }
116             });
117         }
118
119     }
120
121     saveMetaDataToStore() {
122         this.packageCreationStore.changeMetaData(this.metaDataTab);
123     }
124
125     checkRequiredElements() {
126         const newMetaData = new MetaDataTabModel();
127         newMetaData.description = this.metaDataTab.description;
128         newMetaData.name = this.metaDataTab.name;
129         newMetaData.version = this.metaDataTab.version;
130         newMetaData.templateTags = this.metaDataTab.templateTags;
131         newMetaData.mapOfCustomKey = this.metaDataTab.mapOfCustomKey;
132         newMetaData.mode = this.metaDataTab.mode;
133         this.packageCreationStore.changeMetaData(newMetaData);
134     }
135
136
137 }