This library can be used in any environment where JCR and Hippo Repository API are available. However, just for simiplicty, the following examples are assumed to run in Hippo Updater Editor (a.k.a Groovy Updater).
WARNING: If you run the following demo scripts in production or in system having too many content, then it might cause a critical system overhead or problems. So, run the following demo scripts in a local test environment or change the XPath query to narrow the search result to a resonably small amount.
The following example groovy script iterates all the hippostd:publishable
documents,
maps each document to ContentNode
, and finally marshal ContentNode
object
to JSON string to log in the logging pane.
Name: | Export All Published Documents to JSON |
---|---|
Description: |
For demonstration purpose, this example groovy script (a) maps each live document variant node
to ContentNode , (b) replace UUIDs of compound mirror link nodes by paths as an
advanced example, and (c) logs a serialized string from the ContentNode .
|
XPath query: |
/jcr:root/content/documents//element(*,hippostd:publishable)[@hippostd:state='published']
|
Parameters: | |
Script >>> |
package org.hippoecm.frontend.plugins.cms.admin.updater import org.onehippo.repository.update.BaseNodeUpdateVisitor import java.util.* import javax.jcr.query.* import org.apache.commons.lang.* import org.onehippo.forge.content.pojo.common.jcr.* import org.onehippo.forge.content.pojo.common.util.* import org.onehippo.forge.content.pojo.mapper.* import org.onehippo.forge.content.pojo.mapper.jcr.* import org.onehippo.forge.content.pojo.mapper.jcr.hippo.* import org.onehippo.forge.content.pojo.model.* import com.fasterxml.jackson.databind.* class UpdaterTemplate extends BaseNodeUpdateVisitor { def jcrSession def contentNodeMapper def mappingFilter def objectMapper void initialize(Session jcrSession) { this.jcrSession = jcrSession contentNodeMapper = new DefaultJcrContentNodeMapper(); mappingFilter = new DefaultHippoJcrItemMappingFilter() mappingFilter.addPropertyPathExclude("hippostdpubwf:*") mappingFilter.addPropertyPathExclude("hippo:availability") mappingFilter.addPropertyPathExclude("hippo:paths") mappingFilter.addPropertyPathExclude("hippo:related") mappingFilter.addPropertyPathExclude("hippostd:holder") mappingFilter.addPropertyPathExclude("hippostd:state") mappingFilter.addPropertyPathExclude("hippostd:stateSummary") objectMapper = new ObjectMapper(); } boolean doUpdate(Node node) { log.debug "Visiting node ${node.path}" def handleNode = node.getParent() // Mapping the document node to ContentNode def contentNode = contentNodeMapper.map(node, mappingFilter) def docbase // Just as an advanced example, let's find all the mirror link node and replace the UUIDs by paths. List<ContentNode> mirrors = contentNode.queryNodesByXPath("//nodes[properties[@itemName='hippo:docbase']]") for (ContentNode mirror : mirrors) { docbase = mirror.getProperty("hippo:docbase").getValue(); try { mirror.setProperty("hippo:docbase", jcrSession.getNodeByIdentifier(docbase).getPath()) } catch (e) { } } // Let's print out (serialize) the content node by simply using Jackson ObjectMapper for debugging purpose. StringWriter writer = new StringWriter(2048) objectMapper.writerWithDefaultPrettyPrinter().writeValue(writer, contentNode) log.debug "\n" + writer.toString() + "\n" return false } boolean undoUpdate(Node node) { throw new UnsupportedOperationException('Updater does not implement undoUpdate method') } } |
The script shown above will log JSON for each document like the following example (in case of Hippo Resource Bundle document):
{ "name" : "examplemessages", "primaryType" : "resourcebundle:resourcebundle", "mixinTypes" : [ "mix:referenceable" ], "properties" : [ { "name" : "resourcebundle:descriptions", "type" : "STRING", "multiple" : true, "values" : [ "Example resource bundle document" ] }, { "name" : "resourcebundle:id", "type" : "STRING", "multiple" : false, "values" : [ "org.example.messages" ] }, { "name" : "hippotranslation:locale", "type" : "STRING", "multiple" : false, "values" : [ "document-type-locale" ] }, { "name" : "resourcebundle:messages", "type" : "STRING", "multiple" : true, "values" : [ "Example Header Message", "Example Footer Message" ] }, { "name" : "resourcebundle:keys", "type" : "STRING", "multiple" : true, "values" : [ "header.text", "footer.text" ] }, { "name" : "hippotranslation:id", "type" : "STRING", "multiple" : false, "values" : [ "e9703ff4-d522-4238-bf3b-6016f959e88c" ] } ], "nodes" : [ ] }
The following example groovy script iterates all the hippogallery:imageset
documents,
maps each document to ContentNode
, and finally marshal ContentNode
object
to JSON string to log in the logging pane.
Name: | Export All Live Images to JSON |
---|---|
Description: |
For demonstration purpose, this example groovy script (a) maps each live gallery imageset node
to ContentNode , and (b) logs a serialized string from the ContentNode .
|
XPath query: |
/jcr:root/content/gallery//element(*,hippogallery:imageset)[@hippo:availability='live']
|
Parameters: | |
Script >>> |
package org.hippoecm.frontend.plugins.cms.admin.updater import org.onehippo.repository.update.BaseNodeUpdateVisitor import java.util.* import javax.jcr.query.* import org.apache.commons.lang.* import org.onehippo.forge.content.pojo.common.jcr.* import org.onehippo.forge.content.pojo.common.util.* import org.onehippo.forge.content.pojo.mapper.* import org.onehippo.forge.content.pojo.mapper.jcr.* import org.onehippo.forge.content.pojo.mapper.jcr.hippo.* import org.onehippo.forge.content.pojo.model.* import com.fasterxml.jackson.databind.* class UpdaterTemplate extends BaseNodeUpdateVisitor { def jcrSession def contentNodeMapper def mappingFilter def objectMapper void initialize(Session jcrSession) { this.jcrSession = jcrSession contentNodeMapper = new DefaultJcrContentNodeMapper(); mappingFilter = new DefaultHippoJcrItemMappingFilter(); mappingFilter.addPropertyPathExclude("hippo:availability"); mappingFilter.addPropertyPathExclude("hippo:paths"); mappingFilter.addPropertyPathExclude("hippo:text"); objectMapper = new ObjectMapper(); } boolean doUpdate(Node node) { log.debug "Visiting node ${node.path}" def handleNode = node.getParent() // Mapping the gallery imageset node to ContentNode def contentNode = contentNodeMapper.map(node, mappingFilter) // Let's print out (serialize) the content node by simply using Jackson ObjectMapper for debugging purpose. StringWriter writer = new StringWriter(2048) objectMapper.writerWithDefaultPrettyPrinter().writeValue(writer, contentNode) log.debug "\n" + writer.toString() + "\n" return false } boolean undoUpdate(Node node) { throw new UnsupportedOperationException('Updater does not implement undoUpdate method') } } |
The script shown above will log JSON for each Image Set node like the following example:
{ "name" : "viognier-grapes-188185_640.jpg", "primaryType" : "hippogallery:imageset", "mixinTypes" : [ "mix:referenceable" ], "properties" : [ { "name" : "hippogallery:description", "type" : "STRING", "multiple" : false, "values" : [ "Description for viognier-grapes-188185_640.jpg" ] }, { "name" : "hippogallery:filename", "type" : "STRING", "multiple" : false, "values" : [ "viognier-grapes-188185_640.jpg" ] } ], "nodes" : [ { "name" : "hippogallery:thumbnail", "primaryType" : "hippogallery:image", "mixinTypes" : [ ], "properties" : [ { "name" : "jcr:data", "type" : "BINARY", "multiple" : false, "values" : [ "data:;base64,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" ] }, { "name" : "jcr:lastModified", "type" : "DATE", "multiple" : false, "values" : [ "2013-11-12T12:15:00.000+01:00" ] }, { "name" : "hippogallery:height", "type" : "LONG", "multiple" : false, "values" : [ "60" ] }, { "name" : "jcr:mimeType", "type" : "STRING", "multiple" : false, "values" : [ "image/jpeg" ] }, { "name" : "hippogallery:width", "type" : "LONG", "multiple" : false, "values" : [ "58" ] } ], "nodes" : [ ] }, { "name" : "hippogallery:original", "primaryType" : "hippogallery:image", "mixinTypes" : [ ], "properties" : [ { "name" : "jcr:data", "type" : "BINARY", "multiple" : false, "values" : [ "file:///Users/john.doe/myhippoproject/target/tomcat8x/temp/DefaultJcrContentValueConverter_4982037632181885063" ] }, { "name" : "jcr:lastModified", "type" : "DATE", "multiple" : false, "values" : [ "2013-11-12T12:15:00.000+01:00" ] }, { "name" : "hippogallery:height", "type" : "LONG", "multiple" : false, "values" : [ "640" ] }, { "name" : "jcr:mimeType", "type" : "STRING", "multiple" : false, "values" : [ "image/jpeg" ] }, { "name" : "hippogallery:width", "type" : "LONG", "multiple" : false, "values" : [ "625" ] } ], "nodes" : [ ] } ] }