James Moger
2011-06-18 669686f6118544bf2122f1e7f3e39c5dbc9654f5
Improved web.xml builder. Now it includes the parameter comments.
1 files modified
79 ■■■■ changed files
src/com/gitblit/BuildWebXml.java 79 ●●●● patch | view | raw | blame | history
src/com/gitblit/BuildWebXml.java
@@ -15,51 +15,72 @@
 */
package com.gitblit;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
public class BuildWebXml {
    private static final String PARAMS = "<!-- PARAMS -->";
    private static final String [] STRIP_TOKENS = { "<!-- STRIP", "STRIP -->" };
    private static final String[] STRIP_TOKENS = { "<!-- STRIP", "STRIP -->" };
    private static final String COMMENT_PATTERN = "\n\t<!-- {0} -->";
    private static final String PARAM_PATTERN = "\n\t<context-param>\n\t\t<param-name>{0}</param-name>\n\t\t<param-value>{1}</param-value>\n\t</context-param>\n";
    public static void main(String[] args) throws Exception {
        // Read the current Gitblit properties
        // TODO extract the comments and inject them into web.xml too
        FileInputStream fis = new FileInputStream(new File("distrib/gitblit.properties"));
        Properties fileSettings = new Properties();
        fileSettings.load(fis);
        fis.close();
        List<String> keys = new ArrayList<String>(fileSettings.stringPropertyNames());
        Collections.sort(keys);
        StringBuilder parameters = new StringBuilder();
        for (String key : keys) {
            if (!skipKey(key)) {
                String value = fileSettings.getProperty(key);
                parameters.append(MessageFormat.format(PARAM_PATTERN, key, value));
        BufferedReader propertiesReader = new BufferedReader(new FileReader(new File(
                "distrib/gitblit.properties")));
        Vector<Setting> settings = new Vector<Setting>();
        List<String> comments = new ArrayList<String>();
        String line = null;
        while ((line = propertiesReader.readLine()) != null) {
            if (line.length() == 0) {
                comments.clear();
            } else {
                if (line.charAt(0) == '#') {
                    if (line.length() > 1) {
                        comments.add(line.substring(1).trim());
                    }
                } else {
                    String[] kvp = line.split("=", 2);
                    String key = kvp[0].trim();
                    if (!skipKey(key)) {
                        Setting s = new Setting(key, kvp[1].trim(), comments);
                        settings.add(s);
                    }
                    comments.clear();
                }
            }
        }
        propertiesReader.close();
        StringBuilder parameters = new StringBuilder();
        for (Setting setting : settings) {
            for (String comment : setting.comments) {
                parameters.append(MessageFormat.format(COMMENT_PATTERN, comment));
            }
            parameters.append(MessageFormat.format(PARAM_PATTERN, setting.name, setting.value));
        }
        // Read the prototype web.xml file
        File webxml = new File("src/WEB-INF/web.xml");
        char [] buffer = new char[(int) webxml.length()];
        FileReader reader = new FileReader(webxml);
        reader.read(buffer);
        reader.close();
        char[] buffer = new char[(int) webxml.length()];
        FileReader webxmlReader = new FileReader(webxml);
        webxmlReader.read(buffer);
        webxmlReader.close();
        String webXmlContent = new String(buffer);
        // Insert the Gitblit properties into the prototype web.xml
        for (String stripToken:STRIP_TOKENS) {
        for (String stripToken : STRIP_TOKENS) {
            webXmlContent = webXmlContent.replace(stripToken, "");
        }
        int idx = webXmlContent.indexOf(PARAMS);
@@ -77,4 +98,16 @@
    private static boolean skipKey(String key) {
        return key.startsWith(Keys.server._ROOT);
    }
    private static class Setting {
        final String name;
        final String value;
        final List<String> comments;
        Setting(String name, String value, List<String> comments) {
            this.name = name;
            this.value = value;
            this.comments = new ArrayList<String>(comments);
        }
    }
}