]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java
Rename into Core
[gpl/argeo-slc.git] / org.argeo.slc / src / main / java / org / argeo / slc / ant / SlcProjectHelper.java
diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java b/org.argeo.slc/src/main/java/org/argeo/slc/ant/SlcProjectHelper.java
deleted file mode 100644 (file)
index 4cc2d9d..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-package org.argeo.slc.ant;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Properties;\r
-import java.util.Vector;\r
-\r
-import org.springframework.context.support.AbstractApplicationContext;\r
-import org.springframework.context.support.FileSystemXmlApplicationContext;\r
-\r
-import org.apache.commons.logging.Log;\r
-import org.apache.commons.logging.LogFactory;\r
-import org.apache.tools.ant.BuildException;\r
-import org.apache.tools.ant.Project;\r
-import org.apache.tools.ant.helper.ProjectHelperImpl;\r
-\r
-import org.argeo.slc.core.UnsupportedException;\r
-import org.argeo.slc.core.structure.DefaultSRegistry;\r
-import org.argeo.slc.core.structure.SimpleSElement;\r
-import org.argeo.slc.core.structure.StructureRegistry;\r
-import org.argeo.slc.core.structure.tree.TreeSPath;\r
-\r
-/**\r
- * Custom implementation of an Ant <code>ProjectHelper</code> binding a Spring\r
- * application context and a structure registry with the Ant project.\r
- */\r
-public class SlcProjectHelper extends ProjectHelperImpl {\r
-       private static Log log;\r
-\r
-       /** The Ant reference to the Spring application context used. */\r
-       public static String REF_ROOT_CONTEXT = "slcApplicationContext";\r
-       /** The Ant reference to the SLC structure registry used. */\r
-       public static String REF_STRUCTURE_REGISTRY = "slcStructureRegistry";\r
-       /** The Ant reference to the <code>TreePath</code> of the current project */\r
-       private static String REF_PROJECT_PATH = "slcProjectPath";\r
-       /**\r
-        * Resource path to the property file listing the SLC specific Ant tasks:\r
-        * /org/argeo/slc/ant/taskdefs.properties\r
-        */\r
-       private static String SLC_TASKDEFS_RESOURCE_PATH = "/org/argeo/slc/ant/taskdefs.properties";\r
-\r
-       @Override\r
-       public void parse(Project project, Object source) throws BuildException {\r
-               if (!(source instanceof File)) {\r
-                       throw new UnsupportedException("Ant file", source);\r
-               }\r
-               File sourceFile = (File) source;\r
-\r
-               // initialize config\r
-               SlcAntConfig slcAntConfig = new SlcAntConfig();\r
-\r
-               // Reset basedir property, in order to avoid base dir override when\r
-               // running in Maven\r
-               project.setProperty("basedir", sourceFile.getParentFile()\r
-                               .getAbsolutePath());\r
-               if (!slcAntConfig.initProject(project)) {\r
-                       // not SLC compatible, do normal Ant\r
-                       super.parse(project, source);\r
-                       return;\r
-               }\r
-\r
-               if (log == null) {\r
-                       // log4j is initialized only now\r
-                       log = LogFactory.getLog(SlcProjectHelper.class);\r
-               }\r
-               log.debug("SLC properties are set, starting initialization..");\r
-\r
-               // init Spring application context\r
-               initSpringContext(project);\r
-\r
-               // init structure registry\r
-               DefaultSRegistry registry = new DefaultSRegistry();\r
-               project.addReference(REF_STRUCTURE_REGISTRY, registry);\r
-\r
-               // call the underlying implementation to do the actual work\r
-               super.parse(project, source);\r
-\r
-               // create structure root\r
-               registerProjectAndParents(project, slcAntConfig);\r
-\r
-               addSlcTasks(project);\r
-\r
-       }\r
-\r
-       /** Creates the tree-based structure for this project. */\r
-       private void registerProjectAndParents(Project project,\r
-                       SlcAntConfig slcAntConfig) {\r
-               StructureRegistry registry = (StructureRegistry) project\r
-                               .getReference(REF_STRUCTURE_REGISTRY);\r
-               File rootDir = new File(project\r
-                               .getUserProperty(SlcAntConfig.ROOT_DIR_PROPERTY))\r
-                               .getAbsoluteFile();\r
-               File baseDir = project.getBaseDir().getAbsoluteFile();\r
-               List<File> dirs = new Vector<File>();\r
-               File currentDir = baseDir;\r
-               do {\r
-                       dirs.add(currentDir);\r
-                       currentDir = currentDir.getParentFile();\r
-                       if (log.isTraceEnabled())\r
-                               log.trace("List " + currentDir);\r
-               } while (!currentDir.equals(rootDir.getParentFile()));\r
-\r
-               // first path is root dir (because of previous algorithm)\r
-               TreeSPath currPath = TreeSPath.createRootPath(rootDir.getName());\r
-               for (int i = dirs.size() - 1; i >= 0; i--) {\r
-                       File dir = dirs.get(i);\r
-\r
-                       // retrieves description for this path\r
-                       final String description;\r
-                       if (i == 0) {// project itself\r
-                               description = project.getDescription() != null ? project\r
-                                               .getDescription() : "[no desc]";\r
-                       } else {\r
-                               description = slcAntConfig.getDescriptionForDir(dir);\r
-                       }\r
-                       SimpleSElement element = new SimpleSElement(description);\r
-\r
-                       // creates and register path\r
-                       if (!dir.equals(rootDir)) {// already set\r
-                               currPath = currPath.createChild(dir.getName());\r
-                       }\r
-                       registry.register(currPath, element);\r
-               }\r
-               project.addReference(REF_PROJECT_PATH, currPath);\r
-       }\r
-\r
-       /** Gets the path of a project (root). */\r
-       public static TreeSPath getProjectPath(Project project) {\r
-               return (TreeSPath) project.getReference(REF_PROJECT_PATH);\r
-       }\r
-\r
-       /** Initializes the Spring application context. */\r
-       private void initSpringContext(Project project) {\r
-               System.getProperties().putAll((Map<?, ?>) project.getProperties());\r
-               String acPath = project\r
-                               .getUserProperty(SlcAntConfig.APPLICATION_CONTEXT_PROPERTY);\r
-               AbstractApplicationContext context = new FileSystemXmlApplicationContext(\r
-                               acPath);\r
-               context.registerShutdownHook();\r
-               project.addReference(REF_ROOT_CONTEXT, context);\r
-       }\r
-\r
-       /** Loads the SLC specific Ant tasks. */\r
-       private void addSlcTasks(Project project) {\r
-               Properties taskdefs = new Properties();\r
-               try {\r
-                       InputStream in = project.getClass().getResourceAsStream(\r
-                                       SLC_TASKDEFS_RESOURCE_PATH);\r
-                       taskdefs.load(in);\r
-                       in.close();\r
-               } catch (IOException e) {\r
-                       throw new SlcAntException("Cannot load task definitions", e);\r
-               }\r
-\r
-               for (Object o : taskdefs.keySet()) {\r
-                       String name = o.toString();\r
-                       try {\r
-                               project.addTaskDefinition(name, Class.forName(taskdefs\r
-                                               .getProperty(name)));\r
-                       } catch (ClassNotFoundException e) {\r
-                               log.error("Unknown class for task " + name, e);\r
-                       }\r
-               }\r
-       }\r
-}\r