mizi_sk
mizi_sk

Reputation: 1007

How to convert (by using ANT) .properties file into constants as a code file?

I want to use ANT build to translate .properties file into text file (code).

Input file my.properties:

FOO=foo bar
BAR=bar bar foo

Desired output file Constants.as:

package foo.bar {
    public final class Constants {
        public static const FOO:String = "FOO";
        public static const BAR:String = "BAR";
    }
}

Note: ActionScript can't use properties files like Java, so I need to use this translation as a pre-build task. My properties file is localization and I want the keys as constants.

Upvotes: 0

Views: 436

Answers (2)

ewan.chalmers
ewan.chalmers

Reputation: 16235

You could do this by including a filterchain in a concat task.

        <concat destfile="Constants.as">

            <header filtering="false">
package foo.bar {
    public final class Constants {
</header>
            <footer filtering="false">
    }
}
</footer>

            <fileset file="my.properties"/>
            <filterchain>
                <tokenfilter>
                    <ignoreblank/>
                    <trim/>
                    <replaceregex pattern="(.*)=(.*)" replace="        public static const \1:String = &#34;\2&#34;;"/>
                </tokenfilter>
            </filterchain>

        </concat>

Upvotes: 1

mizi_sk
mizi_sk

Reputation: 1007

I've managed to hack it through scriptdef in JavaScript.

Any ideas how to do it better?

<scriptdef name="localization-regen" language="javascript">
    <attribute name="input.file.path"/>
    <attribute name="output.file.category"/>
    <attribute name="output.file.package"/>
    <attribute name="output.file.dir"/>
    <attribute name="output.property"/>
    <![CDATA[

        importPackage(java.io);

        inputFilePath = attributes.get("input.file.path");
        outputFileCategory = attributes.get("output.file.category");
        outputFilePackage = attributes.get("output.file.package");
        outputFileDir = attributes.get("output.file.dir");

        outputFileClass = "LocalizationKeys" + outputFileCategory.substring(0, 1).toUpperCase() + outputFileCategory.substring(1, outputFileCategory.length());


        inputFile = new File(inputFilePath);

        inputStream = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile)));

        outputLines = "";

        for(line = inputStream.readLine(); line != null; line = inputStream.readLine())
        {
            vars = line.split("=");
            c = vars[0];
            if(c.substring(0, 1) == "#") continue;
            outputLines += "\t\tpublic static const " + c + ":String = \"" + c + "\";\n";
        }

        output = "";
        output  = "package " + outputFilePackage + "\n"
                + "{\n"
                + "\tpublic final class " + outputFileClass + "\n"
                + "\t{\n"
                + outputLines
                + "\t}\n"
                + "}";


        outputFilePath = outputFileDir + "/" + outputFileClass+ ".as";

        out = new BufferedWriter(new FileWriter(outputFilePath));
        out.write(output, 0, output.length);
        out.flush();
        out.close();
    ]]>
</scriptdef>

Upvotes: 0

Related Questions