support XML for "Upload Attributes List" button for mapping 14/110214/1
authorAhmedEldeeb50 <ahmed.eldeeb.ext@orange.com>
Wed, 15 Jul 2020 19:58:59 +0000 (21:58 +0200)
committerAhmedEldeeb50 <ahmed.eldeeb.ext@orange.com>
Wed, 15 Jul 2020 19:58:59 +0000 (21:58 +0200)
Issue-ID: CCSDK-2571

Signed-off-by: AhmedEldeeb50 <ahmed.eldeeb.ext@orange.com>
Change-Id: I4164fdef145e92faa2cf2550a036d50273127c6a

cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.html
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.ts
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/utils/Parser.spec.ts [new file with mode: 0644]
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/utils/Parser.ts [new file with mode: 0644]
cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/utils/XmlParser.ts [new file with mode: 0644]

index f517cb1..65845a6 100644 (file)
                             <br />
                             <span>Use Current Template Instance</span>
                         </button>
-                        <a href="#" (click)="allowedExt=['.csv']" data-toggle="modal" data-target="#templateModal"
+                        <a href="#" (click)="allowedExt=['.csv','.xml']" data-toggle="modal" data-target="#templateModal"
                             class="mapping-source-load">
                             <i class="icon-upload-attributes"></i>
                             <br />
                             <div>Upload Attributes List</div>
-                            <div class="source-load-note">(Should be comma delimited file)</div>
+                            <div class="source-load-note">CSV or XML files</div>
                         </a>
                         <!-- <a href="#" class="mapping-source-load">
                             <i class="icon-import-cds"></i>
index af7acc2..61ea374 100644 (file)
@@ -10,6 +10,7 @@ import { PackageCreationUtils } from '../../package-creation.utils';
 import { JsonConvert, Any } from 'json2typescript';
 import { ToastrService } from 'ngx-toastr';
 import { SharedService } from '../shared-service';
+import { XmlParser } from '../utils/XmlParser';
 declare var $: any;
 
 @Component({
@@ -21,8 +22,8 @@ export class TemplMappCreationComponent implements OnInit, OnDestroy {
     @Output() showListView = new EventEmitter<any>();
     @Output() showCreationView = new EventEmitter<any>();
     public uploadedFiles: FileSystemFileEntry[] = [];
-     fileNames: Set<string> = new Set();
-     jsonConvert = new JsonConvert();
+    fileNames: Set<string> = new Set();
+    jsonConvert = new JsonConvert();
     public files: NgxFileDropEntry[] = [];
     fileName: any;
     templateInfo = new TemplateInfo();
@@ -132,6 +133,11 @@ export class TemplMappCreationComponent implements OnInit, OnDestroy {
         }
     }
 
+    fileExtensionFromString(filename: string): string {
+        const fileExtension = filename.substring(filename.lastIndexOf('.') + 1);
+        return fileExtension;
+    }
+
     public getTemplateVariable(fileContent: string) {
         const variables: string[] = [];
         const stringsSlittedByBraces = fileContent.split('${');
@@ -196,22 +202,26 @@ export class TemplMappCreationComponent implements OnInit, OnDestroy {
     uploadFile() {
         this.dependancies.clear();
         this.dependanciesSource.clear();
-        if (this.allowedExt.includes('.csv')) {
-            this.fetchCSVkeys();
+        if (this.allowedExt.includes('.csv') || this.allowedExt.includes('.xml')) {
+            this.fetchkeysfromfile();
         } else {
             this.setTemplateFilesToStore();
         }
         $('.btn-cancel').click();
-
-
     }
 
-    fetchCSVkeys() {
+    fetchkeysfromfile() {
         for (const droppedFile of this.uploadedFiles) {
             droppedFile.file((file: File) => {
                 const fileReader = new FileReader();
                 fileReader.onload = (e) => {
-                    this.variables = fileReader.result.toString().split(',');
+                    const fileExt = this.fileExtensionFromString(droppedFile.name);
+                    if (fileExt === 'csv') {
+                        this.variables = fileReader.result.toString().split(',');
+                    } else {
+                        const parser = new XmlParser();
+                        this.variables = parser.getVariables(fileReader.result.toString());
+                    }
                     console.log(this.variables);
                     this.getMappingTableFromTemplate(null);
 
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/utils/Parser.spec.ts b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/utils/Parser.spec.ts
new file mode 100644 (file)
index 0000000..e90377e
--- /dev/null
@@ -0,0 +1,28 @@
+import { XmlParser } from './XmlParser';
+
+fdescribe('ImportsTabComponent', () => {
+    const parser: XmlParser = new XmlParser();
+
+
+    beforeEach(() => {
+    });
+
+    it('Test xml Parser', () => {
+        const fileContent = `<vlb-business-vnf-onap-plugin xmlns="urn:opendaylight:params:xml:ns:yang:vlb-business-vnf-onap-plugin">
+        <vdns-instances>
+            <vdns-instance>
+                <ip-addr>$vdns_int_private_ip_0</ip-addr>
+                <oam-ip-addr>$vdns_onap_private_ip_0</oam-ip-addr>
+                <enabled>false</enabled>
+                <tag>dddd</tag>
+            </vdns-instance>
+        </vdns-instances>
+    </vlb-business-vnf-onap-plugin>`;
+
+        const res = parser.getVariables(fileContent);
+        console.log(res);
+        expect(res.length).toEqual(2);
+        expect(res[0]).toEqual('vdns_int_private_ip_0');
+        expect(res[1]).toEqual('vdns_onap_private_ip_0');
+    });
+});
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/utils/Parser.ts b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/utils/Parser.ts
new file mode 100644 (file)
index 0000000..495c643
--- /dev/null
@@ -0,0 +1,3 @@
+export interface Parser {
+    getVariables(fileContent: string): string[];
+}
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/utils/XmlParser.ts b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/utils/XmlParser.ts
new file mode 100644 (file)
index 0000000..4feb703
--- /dev/null
@@ -0,0 +1,34 @@
+import { Parser } from './Parser';
+import { variable } from '@angular/compiler/src/output/output_ast';
+
+export class XmlParser implements Parser {
+    getVariables(fileContent: string): string[] {
+        const variables = [];
+        const xmlSplit = fileContent.split('$');
+        for (const val of xmlSplit) {
+            const res = val.substring(0, val.indexOf('</'));
+            if (res && res.length > 0) {
+                variables.push(res);
+            }
+
+        }
+        return variables;
+    }
+
+}
+
+/*
+
+<vlb-business-vnf-onap-plugin xmlns="urn:opendaylight:params:xml:ns:yang:vlb-business-vnf-onap-plugin">
+    <vdns-instances>
+        <vdns-instance>
+            <ip-addr>$vdns_int_private_ip_0</ip-addr>
+            <oam-ip-addr>$vdns_onap_private_ip_0</oam-ip-addr>
+            <tag>aaaa</tag>
+            <enabled>false</enabled>
+            <tag>dddd</tag>
+        </vdns-instance>
+    </vdns-instances>
+</vlb-business-vnf-onap-plugin>
+
+*/