Index: src/main/java/info/magnolia/module/admininterface/pages/JCRUtilsPage.java =================================================================== --- src/main/java/info/magnolia/module/admininterface/pages/JCRUtilsPage.java (revision 30182) +++ src/main/java/info/magnolia/module/admininterface/pages/JCRUtilsPage.java (working copy) @@ -35,11 +35,13 @@ import info.magnolia.cms.beans.config.ContentRepository; import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.HierarchyManager; import info.magnolia.cms.core.search.Query; import info.magnolia.cms.util.ContentUtil; import info.magnolia.cms.util.DumperUtil; import info.magnolia.cms.util.QueryUtil; import info.magnolia.context.MgnlContext; +import info.magnolia.importexport.PropertiesImportExport; import info.magnolia.module.admininterface.TemplatedMVCHandler; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -48,27 +50,43 @@ import javax.jcr.RepositoryException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.Collection; -import java.util.Iterator; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.*; public class JCRUtilsPage extends TemplatedMVCHandler { private static final Logger log = LoggerFactory.getLogger(JCRUtilsPage.class); + private Map contentUtilFilterNames; public JCRUtilsPage(String name, HttpServletRequest request, HttpServletResponse response) { super(name, request, response); + // TODO - this functionality can be moved to ContentUtil + initFilterNames(); } + private void initFilterNames() { + contentUtilFilterNames = new HashMap(); + contentUtilFilterNames.put("allNodes", "Allow All Nodes"); + contentUtilFilterNames.put("allButJCR", "Exclude JCR Nodes"); + contentUtilFilterNames.put("excludeMetadata", "Exclude Metadata & JCR Nodes"); + contentUtilFilterNames.put("onlyMgnlNodes", "Only mgnl: nodes"); + } + private String repository = ""; private int level = 1; private String path = "/"; + private String dumpRoot = "/"; + private String result = ""; private String statement = ""; + private String contentFilter = ""; + private static String[] languages = new String[]{Query.SQL, Query.XPATH}; private String language = Query.SQL; @@ -86,6 +104,40 @@ return VIEW_SHOW; } + public String dumpToProperties() { + Content.ContentFilter filter = null; + if (StringUtils.isNotEmpty(contentFilter)) { + if (contentFilter.equals("allButJCR")) { + filter = ContentUtil.ALL_NODES_EXCEPT_JCR_CONTENT_FILTER; + } + if (contentFilter.equals("excludeMetadata")) { + filter = ContentUtil.EXCLUDE_META_DATA_CONTENT_FILTER; + } + if (contentFilter.equals("allNodes")) { + filter = ContentUtil.ALL_NODES_CONTENT_FILTER; + } + if (contentFilter.equals("onlyMgnlNodes")) { + filter = ContentUtil.MAGNOLIA_FILTER; + } + } + else { + filter = ContentUtil.ALL_NODES_CONTENT_FILTER; + } + if (StringUtils.isNotEmpty(repository) && StringUtils.isNotEmpty(dumpRoot)) { + HierarchyManager hm = MgnlContext.getWebContext().getHierarchyManager(repository); + try { + Content rootNode = hm.getContent(dumpRoot); + if (rootNode == null) { + return "path not found: " + this.dumpRoot; + } + result = PropertiesImportExport.dumpPropertiesToString(rootNode, filter); + }catch (Exception e) { + return "Unable to dump path: " + this.dumpRoot + "\n" + e.toString(); + } + } + return VIEW_SHOW; + } + public String query() { final long start = System.currentTimeMillis(); final Collection nodes; @@ -126,6 +178,10 @@ return ContentRepository.getAllRepositoryNames(); } + public Iterator getContentFilters() { + return contentUtilFilterNames.keySet().iterator(); + } + public String[] getLanguages() { return languages; } @@ -194,4 +250,27 @@ this.itemType = itemType; } + public void setDumpRoot(String dumpRoot) { + this.dumpRoot = dumpRoot; + } + + public String getDumpRoot() { + return this.dumpRoot; + } + + public String getContentFilter() { + return contentFilter; + } + + public void setContentFilter(String contentFilter) { + this.contentFilter = contentFilter; + } + + public Map getContentUtilFilterNames() { + return contentUtilFilterNames; + } + + public void setContentUtilFilterNames(Map contentUtilFilterNames) { + this.contentUtilFilterNames = contentUtilFilterNames; + } } Index: src/main/resources/info/magnolia/module/admininterface/pages/JCRUtilsPage.html =================================================================== --- src/main/resources/info/magnolia/module/admininterface/pages/JCRUtilsPage.html (revision 30182) +++ src/main/resources/info/magnolia/module/admininterface/pages/JCRUtilsPage.html (working copy) @@ -32,6 +32,33 @@
+

Dump to properties format

+
+ +
+ + +
+
+ + +
+
+ + +
+ +
+
+

Query