package com.occamlab.te.config; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; import javax.xml.namespace.QName; public class ConfigFileBuilder { public static void main(String[] args) throws Exception { String home = ""; String scriptsDir = "webapps/teamengine/WEB-INF/scripts"; String workDir = "webapps/teamengine/WEB-INF/work"; String usersDir = "webapps/teamengine/WEB-INF/users"; String resourcesDir = null; String defaultRevision = (new SimpleDateFormat("yyyy-MM-dd")) .format(new Date()); // Parse arguments from command-line for (int i = 0; i < args.length; i++) { if (args[i].startsWith("-home=")) { home = args[i].substring(6); } else if (args[i].startsWith("-scriptsdir=")) { scriptsDir = args[i].substring(12); } else if (args[i].startsWith("-resourcesdir=")) { scriptsDir = args[i].substring(14); } else if (args[i].startsWith("-usersdir=")) { usersDir = args[i].substring(10); } else if (args[i].startsWith("-workdir=")) { workDir = args[i].substring(9); } else if (args[i].startsWith("-defaultrev=")) { defaultRevision = args[i].substring(12); } } if (resourcesDir == null) { resourcesDir = scriptsDir; } SortedSet<ConfigEntry> configs = new TreeSet<ConfigEntry>( new ConfigComparator()); File[] scriptDirs = new File(".").listFiles(); for (File dir : scriptDirs) { File file = new File(dir, "config.xml"); if (file.canRead()) { ConfigEntry config = new ConfigEntry(file); File profilesDir = new File(dir, "profiles"); if (profilesDir.isDirectory()) { File[] profileDirs = profilesDir.listFiles(); for (File pdir : profileDirs) { File pfile = new File(pdir, "config.xml"); if (pfile.canRead()) { config.add(new ConfigEntry(pfile)); } } } configs.add(config); } } System.out.println("<config>"); System.out.println(" <home>" + home + "</home>"); System.out.println(" <scriptsdir>" + scriptsDir + "</scriptsdir>"); System.out.println(" <resourcesdir>" + resourcesDir + "</resourcesdir>"); System.out.println(" <usersdir>" + usersDir + "</usersdir>"); System.out.println(" <workdir>" + workDir + "</workdir>"); System.out.println(" <scripts>"); Iterator<ConfigEntry> it = configs.iterator(); ConfigEntry config = it.hasNext() ? it.next() : null; while (config != null) { String organization = config.organization; System.out.println(" <organization>"); System.out.println(" <name>" + organization + "</name>"); while (config != null && config.organization.equals(organization)) { String standard = config.standard; System.out.println(" <standard>"); System.out.println(" <name>" + standard + "</name>"); while (config != null && config.organization.equals(organization) && config.standard.equals(standard)) { String version = config.version; System.out.println(" <version>"); System.out .println(" <name>" + version + "</name>"); System.out.println(" <suite>"); System.out.println(" <namespace-uri>" + config.suite.getNamespaceURI() + "</namespace-uri>"); System.out.println(" <prefix>" + config.suite.getPrefix() + "</prefix>"); System.out.println(" <local-name>" + config.suite.getLocalPart() + "</local-name>"); String title = config.title; if (title == null) { title = organization + " " + standard + " " + version + " Test Suite"; } System.out.println(" <title>" + title + "</title>"); if (config.description != null) { System.out.println(" <description>" + config.description + "</description>"); } if (config.link != null) { System.out.println(" <link>" + config.link + "</link>"); } if (config.dataLink != null) { System.out.println(" <link type=\"data\">" + config.dataLink + "</link>"); } System.out.println(" </suite>"); while (config != null && config.organization.equals(organization) && config.standard.equals(standard) && config.version.equals(version)) { List<QName> profiles = new ArrayList<QName>(); List<String> profileTitles = new ArrayList<String>(); List<String> profileDescriptions = new ArrayList<String>(); List<File> sources = new ArrayList<File>(); while (config != null && config.suite == null) { profiles.addAll(config.profiles); profileTitles.addAll(config.profileTitles); profileDescriptions .addAll(config.profileDescriptions); sources.addAll(config.sources); config = it.hasNext() ? it.next() : null; } if (config != null) { profiles.addAll(config.profiles); profileTitles.addAll(config.profileTitles); profileDescriptions .addAll(config.profileDescriptions); sources.addAll(config.sources); String revision = config.revision; if (revision == null) { revision = defaultRevision; } System.out.println(" <revision>"); System.out.println(" <name>" + revision + "</name>"); System.out.println(" <sources>"); for (File source : sources) { String path = source.getPath().substring(2) .replace('\\', '/'); System.out.println(" <source>" + path + "</source>"); } System.out.println(" </sources>"); if (config.resources != null) { String path = config.resources.getPath() .substring(2).replace('\\', '/'); System.out.println(" <resources>" + path + "</resources>"); } if (config.webdir != null) { System.out.println(" <webdir>" + config.webdir + "</webdir>"); } for (int i = 0; i < profiles.size(); i++) { System.out.println(" <profile>"); System.out .println(" <namespace-uri>" + profiles.get(i) .getNamespaceURI() + "</namespace-uri>"); System.out.println(" <prefix>" + profiles.get(i).getPrefix() + "</prefix>"); System.out.println(" <local-name>" + profiles.get(i).getLocalPart() + "</local-name>"); String profileTitle = profileTitles.get(i); if (profileTitle == null) profileTitle = profiles.get(i) .getLocalPart(); System.out.println(" <title>" + profileTitle + "</title>"); String profileDescription = profileDescriptions .get(i); if (profileDescription != null) { System.out .println(" <description>" + profileDescription + "</description>"); } System.out.println(" </profile>"); } System.out.println(" </revision>"); config = it.hasNext() ? it.next() : null; } } System.out.println(" </version>"); } System.out.println(" </standard>"); } System.out.println(" </organization>"); } System.out.println(" </scripts>"); System.out.println("</config>"); } }