package net.sourceforge.fenixedu.presentationTier.gwt; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import net.sourceforge.fenixedu._development.PropertiesManager; public class FenixGWTAntTasksCreator { public String gwtModulesPath; public String buildFilePath; public String gwtDestDir; public String gwtSdk; public String gwtArgs; public PrintWriter out; public File file; public List targetsList; public FenixGWTAntTasksCreator(String... args) { gwtModulesPath = args[0] + "/src/net/sourceforge/fenixedu/presentationTier/gwt"; buildFilePath = args[0] + "/build_gwtautogentasks.xml"; gwtDestDir = args[1]; gwtSdk = args[2]; gwtArgs = args[3]; targetsList = new ArrayList(); } /** * args[0] - ${basedir} * args[1] - ${build.gwtdestdir} * args[2] - ${gwt.sdk} * args[3] - ${gwt.args} */ public static void main(String[] args) { FenixGWTAntTasksCreator tasksCreator = new FenixGWTAntTasksCreator(args); tasksCreator.createAnt(); } public void createAnt() { try { file = new File(buildFilePath); file.createNewFile(); out = new PrintWriter(new BufferedWriter(new FileWriter(file))); writeHeader(); writeTasks(); writeTargetCalls(); writeTail(); } catch (IOException ioe) { System.err.println("Unable to write to file"); System.exit(-1); } } private void writeHeader() { out.println(""); out.println(""); out.println(""); //Source path out.println(""); out.println(""); //GWT args out.println(""); out.println(""); //GWT-SDK path out.println(""); out.println(""); //GWT classpath out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); //Compiled JS destination dir out.println(""); out.println(""); out.flush(); } private void writeTasks() { List modules = lookupForModules(gwtModulesPath); for (String module : modules) { targetsList.add(extractModuleName(module)); writeRequirementCheck(module); writeTask(module); } out.flush(); } private void writeTail() { out.println(""); out.println(""); out.flush(); } private void writeTask(String module) { out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); } private List lookupForModules(String gwtModulesPath) { List result = new ArrayList(); String path = gwtModulesPath; File baseDir = new File(gwtModulesPath); DFS(result, path, baseDir); return result; } private void DFS(List resultSet, String path, File baseDir) { String[] children = baseDir.list(); if (children != null) { for (int i = 0; i < children.length; i++) { //RaphaelGWT module serves only as a lib. Does not define an entrypoint, // donc it can't be gwtcompiled and must be ignored. if (!children[i].equals("RaphaelGWT.gwt.xml")) { if (children[i].matches(".*\\.gwt\\.xml")) { path += "/" + children[i]; resultSet.add(path); } } String newPath = path + "/" + children[i]; File newDir = new File(newPath); if (newDir.isDirectory()) { DFS(resultSet, newPath, newDir); } } } } private String digest(String rawString) { int padding = rawString.indexOf("net/sourceforge/fenixedu/presentationTier/gwt"); String inProcess = rawString.substring(padding); inProcess = inProcess.replace(".gwt.xml", ""); String processed = inProcess.replace('/', '.'); return processed; } private void writeRequirementCheck(String module) { out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); } private String extractModuleName(String module) { String digested = digest(module); String[] splinters = digested.split("\\."); String moduleName = splinters[splinters.length - 2]; return moduleName; } private void writeTargetCalls() { out.println(""); for (String target : targetsList) { out.println(""); } out.println(""); out.println(""); } private String extractModulePath(String module) { String digested = digest(module); String[] splinters = digested.split("\\."); String gwtXmlFileName = splinters[splinters.length - 1]; String result = module.replace(gwtXmlFileName + ".gwt.xml", ""); return result; } }