package org.onehippo.forge.konakart.gogreen.hippo; import org.onehippo.forge.konakart.cms.replication.utils.Codecs; import org.onehippo.forge.konakart.common.engine.KKStoreConfig; import org.onehippo.forge.konakart.common.jcr.HippoModuleConfig; import org.onehippo.forge.konakart.gogreen.hippo.visitor.CreateProductsVisitor; import org.onehippo.forge.konakart.gogreen.hippo.visitor.CreateReviewVisitor; import org.onehippo.forge.konakart.gogreen.hippo.visitor.Visitor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; import javax.jcr.Session; /** * Helper class used to retrieve a connection to the repository */ public class HippoHelper { public static final Logger log = LoggerFactory.getLogger(HippoHelper.class); public static final String DEFAULT_STORE = "store1"; public static final String CONTENT_DOCUMENTS_HIPPOGOGREEN_PRODUCTS = "/content/documents/hippogogreen/products"; public static final String CONTENT_DOCUMENTS_HIPPOGOGREEN_REVIEWS = "/content/documents/hippogogreen/reviews"; private Session jcrSession; public HippoHelper(Session jcrSession) { this.jcrSession = jcrSession; } /** * Synchronize produts * * @throws Exception . */ public Node startProductSynchro() throws Exception { KKStoreConfig kkStoreConfig = HippoModuleConfig.getConfig().getStoresConfig().get(DEFAULT_STORE); if (jcrSession.nodeExists(CONTENT_DOCUMENTS_HIPPOGOGREEN_PRODUCTS)) { // Get the product's root node Node root = jcrSession.getNode(CONTENT_DOCUMENTS_HIPPOGOGREEN_PRODUCTS); String imagesRoot = kkStoreConfig.getGalleryRoot() + "/" + Codecs.encodeNode(kkStoreConfig.getProductFolder()); // Visit all nodes. CreateProductsVisitor visitor = new CreateProductsVisitor(imagesRoot); visitor.visit(root); visitAllNodes("hippogogreen:product", root, visitor); return root; } return null; } public Node startReviewSynchro() throws RepositoryException { if (jcrSession.nodeExists(CONTENT_DOCUMENTS_HIPPOGOGREEN_REVIEWS)) { Node root = jcrSession.getNode(CONTENT_DOCUMENTS_HIPPOGOGREEN_REVIEWS); // Visit all nodes CreateReviewVisitor visitor = new CreateReviewVisitor(); visitor.visit(root); visitAllNodes("hippogogreen:review", root, visitor); return root; } return null; } private void visitAllNodes(String nodeType, Node seed, Visitor visitor) throws RepositoryException { try { if (seed.isNodeType("hippo:handle")) { seed = seed.getNode(seed.getName()); } if (seed.isNodeType(nodeType)) { visitor.visit(seed); } else if (seed.isNodeType("hippostd:folder")) { for (NodeIterator nodeIt = seed.getNodes(); nodeIt.hasNext(); ) { Node child = nodeIt.nextNode(); if (child != null) { visitAllNodes(nodeType, child, visitor); } } } } catch (Exception e) { log.error("Failed to retrieve the list of products"); } } }