summaryrefslogtreecommitdiffstats
path: root/configgen/src/main/java/com/yahoo/config/codegen/MakeConfigProperties.java
blob: 0116394573231f4481b87c3dfa3c0f1e37ec6813 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.codegen;

import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;

/**
 * Encapsulates data extracted from system properties.
 *
 * @author <a href="gv@yahoo-inc.com">Gjoran Voldengen</a>
 */
public class MakeConfigProperties {

    private final List<String> legalLanguages = Arrays.asList("java", "cpp", "cppng" );

    final File destDir;
    final File[] specFiles;
    final String language;
    final String dirInRoot; // Where within fileroot to store generated class files
    final boolean dumpTree;
    final boolean generateFrameworkCode;

    MakeConfigProperties() throws PropertyException {
        destDir = checkDestinationDir();
        specFiles = checkSpecificationFiles();
        language = checkLanguage();
        dirInRoot = checkDirInRoot();
        dumpTree = System.getProperty("config.dumpTree") != null &&
                   System.getProperty("config.dumpTree").equalsIgnoreCase("true");
        generateFrameworkCode = System.getProperty("config.useFramework") == null ||
                                System.getProperty("config.useFramework").equalsIgnoreCase("true");
    }

    private File checkDestinationDir() throws PropertyException {
        String destination = System.getProperty("config.dest");
        if (destination == null)
            throw new PropertyException("Missing property: config.dest.");

        File dir = new File(destination);
        if (!dir.isDirectory()) {
            throw new PropertyException("Could not find directory: " + dir.getPath());
        }
        return dir;
    }

    private String checkDirInRoot() throws PropertyException {
        String dirInRoot = System.getProperty("config.subdir");
            // Optional parameter
        if (dirInRoot == null) { return null; }
        File f = new File(destDir, dirInRoot);
        if (!f.isDirectory()) {
            throw new PropertyException("Could not find directory: " + f.getPath());
        }
        return dirInRoot;
    }

    /**
     * @return Desired programming language of generated code, default is "java".
     * @throws PropertyException if supplied language is not a legal language.
     */
    private String checkLanguage() throws PropertyException {
        String inputLang = System.getProperty("config.lang", "java").toLowerCase();
        if (! legalLanguages.contains(inputLang)) {
            throw new PropertyException
                    ("Unsupported code language: '" + inputLang + "'. Supported languages are: " + legalLanguages);
        }
        return inputLang;
    }

    private static File[] checkSpecificationFiles() throws PropertyException {
        String string = System.getProperty("config.spec");
        if (string == null)
            throw new PropertyException("Missing property: config.spec.");

        StringTokenizer st = new StringTokenizer(string, ",");
        if (st.countTokens() == 0)
            throw new PropertyException("Missing property: config.spec.");

        File[] files = new File[st.countTokens()];
        for (int i = 0; st.hasMoreElements(); i++) {
            files[i] = new File((String) st.nextElement());
            if (!files[i].isFile())
                throw new PropertyException("Could not read file " + files[i].getPath());
        }
        return files;
    }

}