This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.jcr.contentloader-2.0.2-incubator in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-contentloader.git
commit 55e57718ba318c1172ec8776c9cefd24f7b860cb Author: Juan Vazquez <[email protected]> AuthorDate: Tue May 20 10:29:07 2008 +0000 SLING-453: Initial content loading to target location https://issues.apache.org/jira/browse/SLING-453 git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/jcr/contentloader@658192 13f79535-47bb-0310-9956-ffa450edef68 --- .../sling/jcr/contentloader/internal/Loader.java | 27 ++++++++++++++++--- .../jcr/contentloader/internal/PathEntry.java | 30 +++++++++++++++++----- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java b/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java index 0f287cf..6dd1cb0 100644 --- a/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java +++ b/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java @@ -208,7 +208,9 @@ public class Loader { while (pathIter.hasNext() ) { final PathEntry entry = pathIter.next(); if ( !contentAlreadyLoaded || entry.isOverwrite() ) { - this.installFromPath(bundle, entry.getPath(), entry.isOverwrite(), session.getRootNode()); + Node targetNode = this.getTargetNode(session, entry.getTarget()); + if (targetNode != null) + this.installFromPath(bundle, entry.getPath(), entry.isOverwrite(), targetNode); } } @@ -656,6 +658,23 @@ public class Loader { Item item = session.getItem(path); return (item.isNode()) ? (Node) item : null; } + + private Node getTargetNode(Session session, String path) + throws RepositoryException { + + // not specyfied path directive + if (path == null) + return session.getRootNode(); + + int firstSlash = path.indexOf("/"); + + // it´s a relative path + if (firstSlash != 0) + path = "/" + path; + + Item item = session.getItem(path); + return (item.isNode()) ? (Node) item : null; + } private void uninstallContent(final Session session, final Bundle bundle, final Iterator<PathEntry> pathIter) { try { @@ -664,9 +683,11 @@ public class Loader { while (pathIter.hasNext() ) { final PathEntry entry = pathIter.next(); if ( entry.isUninstall() ) { - this.uninstallFromPath(bundle, entry.getPath(), session.getRootNode()); + Node targetNode = this.getTargetNode(session, entry.getTarget()); + if (targetNode != null) + this.uninstallFromPath(bundle, entry.getPath(), targetNode); } else { - log.debug("Ignoring to uninstall content at {}, overwrite flag is not set.", entry.getPath()); + log.debug("Ignoring to uninstall content at {}, uninstall directive is not set.", entry.getPath()); } } diff --git a/src/main/java/org/apache/sling/jcr/contentloader/internal/PathEntry.java b/src/main/java/org/apache/sling/jcr/contentloader/internal/PathEntry.java index c85a0b2..6369bc4 100644 --- a/src/main/java/org/apache/sling/jcr/contentloader/internal/PathEntry.java +++ b/src/main/java/org/apache/sling/jcr/contentloader/internal/PathEntry.java @@ -33,11 +33,14 @@ public class PathEntry { /** The manifest header to specify initial content to be loaded. */ public static final String CONTENT_HEADER = "Sling-Initial-Content"; - /** The overwrite flag specifying if content should be overwritten or just initially added. */ - public static final String OVERWRITE_FLAG = "overwrite"; + /** The overwrite directive specifying if content should be overwritten or just initially added. */ + public static final String OVERWRITE_DIRECTIVE = "overwrite"; - /** The uninstall flag specifying if content should be uninstalled. */ - public static final String UNINSTALL_FLAG = "uninstall"; + /** The uninstall directive specifying if content should be uninstalled. */ + public static final String UNINSTALL_DIRECTIVE = "uninstall"; + + /** The path directive specifying the target node where initial content will be loaded. */ + public static final String PATH_DIRECTIVE = "path"; /** The path for the initial content. */ private final String path; @@ -47,6 +50,9 @@ public class PathEntry { /** Should existing content be uninstalled? */ private final boolean uninstall; + + /** Target path where initial content will be loaded. If it´s null then target node is the root node */ + private final String target; public static Iterator<PathEntry> getContentPaths(final Bundle bundle) { final List<PathEntry> entries = new ArrayList<PathEntry>(); @@ -66,9 +72,10 @@ public class PathEntry { } public PathEntry(ManifestHeader.Entry entry) { - // check for overwrite and uninstall flag - final String overwriteValue = entry.getDirectiveValue(OVERWRITE_FLAG); - final String uninstallValue = entry.getDirectiveValue(UNINSTALL_FLAG); + // check for directives + final String overwriteValue = entry.getDirectiveValue(OVERWRITE_DIRECTIVE); + final String uninstallValue = entry.getDirectiveValue(UNINSTALL_DIRECTIVE); + final String pathValue = entry.getDirectiveValue(PATH_DIRECTIVE); boolean overwriteFlag = false; if ( overwriteValue != null ) { overwriteFlag = Boolean.valueOf(overwriteValue).booleanValue(); @@ -80,6 +87,11 @@ public class PathEntry { } else { this.uninstall = this.overwrite; } + if ( pathValue != null ) { + this.target = pathValue; + } else { + this.target = null; + } } public String getPath() { @@ -93,4 +105,8 @@ public class PathEntry { public boolean isUninstall() { return this.uninstall; } + + public String getTarget() { + return target; + } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
