From: Mathieu Baudier Date: Sat, 27 Oct 2007 21:48:19 +0000 (+0000) Subject: Introduce directory based structure X-Git-Tag: argeo-slc-2.1.7~3197 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=3e4a95895773f311edfbced66ef368b373265f1f;p=gpl%2Fargeo-slc.git Introduce directory based structure git-svn-id: https://svn.argeo.org/slc/trunk@665 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- 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 index 7fedff747..04e8e163b 100644 --- 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 @@ -24,6 +24,9 @@ public class SlcAntConfig { /** Path to the root Spring application context */ public static String APPLICATION_CONTEXT_PROPERTY = "org.argeo.slc.ant.applicationContext"; + // SLC LOCAL PROPERTIES + public static String DIR_DESCRIPTION_PROPERTY = "org.argeo.slc.ant.dirDescription"; + /** Retrieve all properties and set them as project user properties */ public static void initProject(Project project, File slcRootFile) { Properties p = loadFile(slcRootFile.getAbsolutePath()); @@ -83,7 +86,7 @@ public class SlcAntConfig { } } - private static Properties loadFile(String path) { + public static Properties loadFile(String path) { Properties p = new Properties(); try { FileInputStream in = new FileInputStream(path); 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 index 34373437d..6bdb5bf16 100644 --- 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 @@ -3,7 +3,9 @@ package org.argeo.slc.ant; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.List; import java.util.Properties; +import java.util.Vector; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; @@ -15,6 +17,7 @@ import org.apache.tools.ant.Project; import org.apache.tools.ant.helper.ProjectHelperImpl; import org.argeo.slc.core.structure.DefaultSRegistry; +import org.argeo.slc.core.structure.StructureRegistry; import org.argeo.slc.core.structure.tree.TreeSElement; import org.argeo.slc.core.structure.tree.TreeSPath; @@ -27,8 +30,10 @@ public class SlcProjectHelper extends ProjectHelperImpl { public static String REF_ROOT_CONTEXT = "slcApplicationContext"; public static String REF_STRUCTURE_REGISTRY = "slcStructureRegistry"; + public static String REF_PROJECT_PATH = "slcProjectPath"; private String slcRootFileName = "slcRoot.properties"; + private String slcLocalFileName = "slcLocal.properties"; @Override public void parse(Project project, Object source) throws BuildException { @@ -58,15 +63,59 @@ public class SlcProjectHelper extends ProjectHelperImpl { addSlcTasks(project); // create structure root - TreeSElement element = new TreeSElement(project.getDescription(), - "Root"); - registry.register(getProjectPath(project), element); + registerProjectAndParents(project); + // TreeSElement element = new TreeSElement(project.getDescription(), + // "Root"); + // registry.register(getProjectPath(project), element); + + } + + private void registerProjectAndParents(Project project) { + 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(); + log.trace("List " + currentDir); + } while (!currentDir.equals(rootDir.getParentFile())); + + TreeSPath currPath = null; + for (int i = dirs.size() - 1; i >= 0; i--) { + File dir = dirs.get(i); + + String description = dir.getName(); + File slcLocal = new File(dir.getPath() + File.separator + + slcLocalFileName); + if (slcLocal.exists()) { + Properties properties = SlcAntConfig.loadFile(slcLocal + .getAbsolutePath()); + description = properties + .getProperty(SlcAntConfig.DIR_DESCRIPTION_PROPERTY); + } + TreeSElement element = new TreeSElement(description); + + if (dir.equals(rootDir)) { + currPath = TreeSPath.createRootPath(rootDir.getName()); + } else { + currPath = currPath.createChild(dir.getName()); + } + registry.register(currPath, element); + } + project.addReference(REF_PROJECT_PATH, currPath); } /** Get the path of a project (root). */ public static TreeSPath getProjectPath(Project project) { - return TreeSPath.createRootPath(getProjectPathName(project)); + // return TreeSPath.createRootPath(getProjectPathName(project)); + return (TreeSPath) project.getReference(REF_PROJECT_PATH); } private static String getProjectPathName(Project project) { diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java index 1cca17be4..b9d84effe 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/structure/DefaultSRegistry.java @@ -28,8 +28,8 @@ public class DefaultSRegistry implements StructureRegistry { StructureElement treeSElement = element; elements.add(treeSElement); paths.add( path); - log.debug("Registered " + path + " (desc: " - + treeSElement.getDescription() + " position: " + log.debug("Registered " + path + " (desc: '" + + treeSElement.getDescription() + "', position: " + elements.size() + ")"); } diff --git a/org.argeo.slc/src/test/slc/conf/log4j.properties b/org.argeo.slc/src/test/slc/conf/log4j.properties index 4b1d97429..8a70a33f4 100644 --- a/org.argeo.slc/src/test/slc/conf/log4j.properties +++ b/org.argeo.slc/src/test/slc/conf/log4j.properties @@ -1,5 +1,5 @@ # Set root logger level to DEBUG and its only appender to A1. -log4j.rootLogger=DEBUG, console +log4j.rootLogger=TRACE, console ## Levels # Spring diff --git a/org.argeo.slc/src/test/slc/root/Category1/SubCategory2/slcLocal.properties b/org.argeo.slc/src/test/slc/root/Category1/SubCategory2/slcLocal.properties new file mode 100644 index 000000000..eef40866e --- /dev/null +++ b/org.argeo.slc/src/test/slc/root/Category1/SubCategory2/slcLocal.properties @@ -0,0 +1 @@ +org.argeo.slc.ant.dirDescription=Second sub Category \ No newline at end of file diff --git a/org.argeo.slc/src/test/slc/root/Category1/slcLocal.properties b/org.argeo.slc/src/test/slc/root/Category1/slcLocal.properties new file mode 100644 index 000000000..c7cdb348b --- /dev/null +++ b/org.argeo.slc/src/test/slc/root/Category1/slcLocal.properties @@ -0,0 +1 @@ +org.argeo.slc.ant.dirDescription=First Category \ No newline at end of file