Movatterモバイル変換


[0]ホーム

URL:


BloomreachBloomreach
Hippo CMS

Bloomreach Documentation version

Bloomreach.com

Groovy Updater Script Examples

Examples

  1. Add a property
  2. Update HST configuration to replace deprecated hst:content node

Example 1 : Add a property

The following updater script example adds a propertygettingstarted:copyright to all documents of typegettingstarted:newsdocument. The script would be useful in the following situation:

  1. Create a new project from the archetype.
  2. Create some news documents.
  3. Modify thegettingstarted:newsdocument type and add a String field called 'copyright' with default value "(c) BloomReach".
  4. Commit the type.
  5. Create some more news documents.

All newly created news document will now get the 'copyright' field with the default value "(c) BloomReach". However, existing news documents still have an empty 'copyright' field, and need to be updated. The following updater script will add the default copyright statement if it does not exist. It will also undo the operation.

After the updater script is executed, all existing news documents will have the default copyright value too. When the script is undone, the default copyright value will be removed again from only those news documents that were changed by the updater. The other news documents will not be touched.

XPath query

/jcr:root/content/documents//element(*, gettingstarted:newsdocument) 

Groovy script

package org.hippoecm.frontend.plugins.cms.dev.updaterimport org.onehippo.repository.update.BaseNodeUpdateVisitorimport javax.jcr.Nodeclass CopyrightUpdater extends BaseNodeUpdateVisitor {  private static final PROPERTY_COPYRIGHT = 'gettingstarted:copyright'  private static final DEFAULT_COPYRIGHT = '(c) BloomReach'  boolean doUpdate(Node node) {    if (!node.hasProperty(PROPERTY_COPYRIGHT)) {        log.debug "Adding copyright to node ${node.path}"        node.setProperty(PROPERTY_COPYRIGHT, DEFAULT_COPYRIGHT);        return true;    }    return false;  }  boolean undoUpdate(Node node) {    if (node.hasProperty(PROPERTY_COPYRIGHT)) {      node.getProperty(PROPERTY_COPYRIGHT).remove();      return true;    }    return false;  }}

Example 2: Update HST configuration to replace deprecated hst:content node

In Bloomreach Experience Manager 7.8.x, the HST deprecated thehst:content node belowhst:site nodes. Instead of ahst:content node of typehippo:facetselect with ahippo:docbase containing UUID of root site content, the HST now supports instead a propertyhst:content on thehst:site node containing the absolute jcr path. To replace allhst:content nodes by thishst:content property, the following example Groovy script can be run:

Groovy query

//element(*,hst:site) 

Groovy script 

package org.hippoecm.frontend.plugins.cms.dev.updaterimport org.onehippo.repository.update.BaseNodeUpdateVisitorimport javax.jcr.Nodeclass UpdaterTemplate extends BaseNodeUpdateVisitor {  /*   * Code to replace hst:content facetselects below hst:site node. Instead of   * facetselect below hst:site node, we now support an absolute jcr path as   * hst:content property on hst:site node.   */  boolean doUpdate(Node node) {    if (!node.isNodeType("hst:site")) {      log.warn "This script should run with query '//element(*, hst:site)'"      return false    }    if (node.hasNode("hst:content")) {      Node redundantContentNode = node.getNode("hst:content")      String docbase =        redundantContentNode.getProperty("hippo:docbase").getString();      try {        // test valid UUID format        java.util.UUID.fromString(docbase);        String contentPath =           node.getSession().getNodeByIdentifier(docbase).getPath();        node.setProperty("hst:content",contentPath);        log.debug "Replaced hst:content node '${redundantContentNode.path}'          by hst:content property '${contentPath}' for hst:site '${node.path}'"        redundantContentNode.remove()        return true;      } catch (javax.jcr.ItemNotFoundException e) {          log.warn "No node found for docbase '${docbase}'.                                 Cannot replace hst:content node";      } catch (java.lang.IllegalArgumentException e) {          log.warn "invalid docbase '${docbase}' found";      }    } else if (node.hasProperty("hst:content")){      log.info "hst:site node '${node.path}' already uses hst:content as                                   property and does not need to be converted"    }    return false  }  boolean undoUpdate(Node node) {    throw new UnsupportedOperationException(                'Updater does not implement undoUpdate method')  }}
Did you find this page helpful?
How could this documentation serve you better?
Cheers!
On this page
    Did you find this page helpful?
    How could this documentation serve you better?
    Cheers!

    [8]ページ先頭

    ©2009-2025 Movatter.jp