--- /dev/null
+package org.argeo.slc.ant;\r
+\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.Properties;\r
+import java.util.StringTokenizer;\r
+\r
+import org.apache.tools.ant.Project;\r
+\r
+/** Load reference to directories from an slcRoot.properties file */\r
+public class SlcAntConfig {\r
+ // SLC ROOT PROPERTIES\r
+ public final static String ROOT_DIR_PROPERTY = "org.argeo.slc.ant.rootDir";\r
+ public final static String CONF_DIR_PROPERTY = "org.argeo.slc.ant.confDir";\r
+ public final static String WORK_DIR_PROPERTY = "org.argeo.slc.ant.workDir";\r
+ /**\r
+ * Comma-separated list of property file names to load from the conf dir and\r
+ * add to project user properties\r
+ */\r
+ public final static String PROPERTY_FILE_NAMES_PROPERTY = "org.argeo.slc.ant.propertyFileNames";\r
+ \r
+ // SLC CONF PROPERTIES\r
+ /** Path to the root Spring application context */\r
+ public static String APPLICATION_CONTEXT_PROPERTY = "org.argeo.slc.ant.applicationContext";\r
+\r
+ private final File confDir;\r
+ private final File rootDir;\r
+ private final File workDir;\r
+\r
+ /** Retrieve all properties and set them as project user properties */\r
+ public SlcAntConfig(Project project, File slcRootFile) {\r
+ Properties p = loadFile(slcRootFile.getAbsolutePath());\r
+\r
+ // Root dir\r
+ rootDir = slcRootFile.getParentFile();\r
+ project.setUserProperty(ROOT_DIR_PROPERTY, rootDir.getAbsolutePath());\r
+\r
+ // Conf dir\r
+ if (project.getUserProperty(CONF_DIR_PROPERTY) == null) {\r
+ confDir = new File(p.getProperty(CONF_DIR_PROPERTY, rootDir\r
+ .getAbsolutePath()\r
+ + "/../conf")).getAbsoluteFile();\r
+ project.setUserProperty(CONF_DIR_PROPERTY, confDir\r
+ .getAbsolutePath());\r
+ } else {\r
+ confDir = new File(project.getUserProperty(CONF_DIR_PROPERTY))\r
+ .getAbsoluteFile();\r
+ }\r
+\r
+ // Work dir\r
+ if (project.getUserProperty(WORK_DIR_PROPERTY) == null) {\r
+ workDir = new File(p.getProperty(WORK_DIR_PROPERTY, rootDir\r
+ .getAbsolutePath()\r
+ + "/../work")).getAbsoluteFile();\r
+ project.setUserProperty(WORK_DIR_PROPERTY, workDir\r
+ .getAbsolutePath());\r
+ } else {\r
+ workDir = new File(project.getUserProperty(WORK_DIR_PROPERTY))\r
+ .getAbsoluteFile();\r
+ }\r
+\r
+ // Properties from the conf dir files\r
+ Properties properties = new Properties();\r
+ StringTokenizer st = new StringTokenizer(p.getProperty(\r
+ PROPERTY_FILE_NAMES_PROPERTY, "slc.properties"), ",");\r
+ while (st.hasMoreTokens()) {\r
+ String fileName = st.nextToken();\r
+ properties.putAll(loadFile(confDir.getAbsolutePath() + "/"\r
+ + fileName));\r
+ }\r
+\r
+ for (Object o : properties.keySet()) {\r
+ String key = o.toString();\r
+ if (project.getUserProperty(key) == null) {// not already set\r
+ project.setUserProperty(key, properties.getProperty(key));\r
+ }\r
+ }\r
+\r
+ // Default application context\r
+ if (project.getUserProperty(APPLICATION_CONTEXT_PROPERTY) == null) {\r
+ project.setUserProperty(APPLICATION_CONTEXT_PROPERTY, confDir\r
+ .getAbsolutePath()\r
+ + "/applicationContext.xml");\r
+ }\r
+ }\r
+\r
+ private Properties loadFile(String path) {\r
+ Properties p = new Properties();\r
+ try {\r
+ FileInputStream in = new FileInputStream(path);\r
+ p.load(in);\r
+ in.close();\r
+ } catch (IOException e) {\r
+ throw new SlcAntException("Cannot read SLC root file", e);\r
+ }\r
+ return p;\r
+ }\r
+\r
+ public File getConfDir() {\r
+ return confDir;\r
+ }\r
+\r
+ public File getRootDir() {\r
+ return rootDir;\r
+ }\r
+\r
+ public File getWorkDir() {\r
+ return workDir;\r
+ }\r
+\r
+}\r