d8607c764e2c93cb2d6f8c016be214256e61f89e
[ccsdk/cds.git] /
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
10 export class ParserFactory {
11
12     getParser(fileContent: string, fileExtension: string): Parser {
13         let parser: Parser;
14         console.log('file extension =' + fileExtension);
15
16         if (fileExtension === FileExtension.Velocity) {
17
18             if (this.isXML(fileContent)) {
19                 parser = new XmlParser();
20             } else if (this.isJSON(fileContent)) {
21                 parser = new VtlParser();
22             } else {
23                 parser = new VtlYMLParser();
24             }
25
26         } else if (fileExtension === FileExtension.Jinja) {
27
28             if (this.isXML(fileContent)) {
29                 parser = new JinjaXMLParser();
30             } else if (this.isJSON(fileContent)) {
31                 // TODO: implement JSON parser
32             } else {
33                 parser = new JinjaYMLParser();
34             }
35
36         } else if (fileExtension === FileExtension.XML) {
37             parser = new XmlParser();
38         }
39         return parser;
40     }
41
42     private isXML(fileContent: string): boolean {
43         return fileContent.includes('<?xml version="1.0" encoding="UTF-8"?>');
44     }
45
46     private isJSON(fileContent: string): boolean {
47         try {
48             JSON.parse(fileContent);
49         } catch (e) {
50             return false;
51         }
52         return true;
53     }
54 }