improve selecting filenames of tempalte and mapping
[ccsdk/cds.git] / cds-ui / designer-client / src / app / modules / feature-modules / packages / package-creation / template-mapping / utils / ParserFactory / ParserFactory.ts
1
2 import { XmlParser } from './XmlParser';
3 import { Parser } from './Parser';
4 import { VtlParser } from './VtlParser';
5 import { FileExtension } from '../TemplateType';
6 import { JinjaXMLParser } from './JinjaXML';
7 import { VtlYMLParser } from './VtlYMLParser';
8 import { JinjaYMLParser } from './JinjaYML';
9 import { ASCIIParser } from './ASCII-Parser';
10
11 export class ParserFactory {
12
13     getParser(fileContent: string, fileExtension: string): Parser {
14         let parser: Parser;
15         console.log('file extension =' + fileExtension);
16
17         if (fileExtension === FileExtension.Velocity) {
18
19             if (this.isXML(fileContent)) {
20                 parser = new XmlParser();
21             } else if (this.isJSON(fileContent)) {
22                 parser = new VtlParser();
23             } else if (this.isASCII(fileContent)) {
24                 parser = new ASCIIParser();
25             } else {
26                 parser = new VtlYMLParser();
27             }
28
29         } else if (fileExtension === FileExtension.Jinja) {
30
31             if (this.isXML(fileContent)) {
32                 parser = new JinjaXMLParser();
33             } else if (this.isJSON(fileContent)) {
34                 // TODO: implement JSON parser
35             } else if (this.isASCII(fileContent)) {
36                 parser = new ASCIIParser();
37             } else {
38                 parser = new JinjaYMLParser();
39             }
40
41         } else if (fileExtension === FileExtension.XML) {
42             parser = new XmlParser();
43         }
44         return parser;
45     }
46
47     private isXML(fileContent: string): boolean {
48         return fileContent.includes('<?xml version="1.0" encoding="UTF-8"?>');
49     }
50
51     private isJSON(fileContent: string): boolean {
52         try {
53             JSON.parse(fileContent);
54         } catch (e) {
55             return false;
56         }
57         return true;
58     }
59
60     private isASCII(fileContent: string): boolean {
61         if (
62             fileContent.includes('end') &&
63             fileContent.includes('set') &&
64             fileContent.includes('$(')
65         ) {
66             return true;
67         }
68
69         return false;
70     }
71 }