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