]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcAntConfig.java
Make project helper more generic
[gpl/argeo-slc.git] / org.argeo.slc / src / main / java / org / argeo / slc / ant / SlcAntConfig.java
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcAntConfig.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcAntConfig.java
new file mode 100644 (file)
index 0000000..61c7452
--- /dev/null
@@ -0,0 +1,112 @@
+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