X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.akb%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fakb%2Futils%2FAkbJcrUtils.java;h=b7d0ba7df6ebf49729538e32e165ab70837c8045;hb=44b4c78e6a082d51d0410c3995b5edf353d417b9;hp=844c3a1cd857c2e963151c78a052bd91cf8b7ff8;hpb=da17a59fb316462126c56099d3670a7cd38a8906;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/utils/AkbJcrUtils.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/utils/AkbJcrUtils.java index 844c3a1cd..b7d0ba7df 100644 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/utils/AkbJcrUtils.java +++ b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/utils/AkbJcrUtils.java @@ -13,19 +13,13 @@ import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.Value; -import javax.jcr.query.QueryManager; -import javax.jcr.query.QueryResult; import javax.jcr.query.Row; import javax.jcr.query.RowIterator; -import javax.jcr.query.qom.Constraint; -import javax.jcr.query.qom.Ordering; -import javax.jcr.query.qom.QueryObjectModel; -import javax.jcr.query.qom.QueryObjectModelFactory; -import javax.jcr.query.qom.Selector; import org.argeo.jcr.JcrUtils; import org.argeo.jcr.PropertyDiff; import org.argeo.slc.akb.AkbException; +import org.argeo.slc.akb.AkbNames; import org.argeo.slc.akb.AkbTypes; /** Some static utils methods that might be factorized in a near future */ @@ -33,6 +27,51 @@ public class AkbJcrUtils { // ///////////////////////// // SPECIFIC METHOS + /** + * Returns the list of environment templates that are visible for the + * current user. + */ + public static List getDefinedTemplate(Session session) { + try { + if (session.nodeExists(AkbNames.AKB_TEMPLATES_BASE_PATH)) { + NodeIterator ni = session.getNode( + AkbNames.AKB_TEMPLATES_BASE_PATH).getNodes(); + List templates = new ArrayList(); + while (ni.hasNext()) { + Node currN = ni.nextNode(); + if (currN.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) + templates.add(currN); + } + return templates; + } + return null; + } catch (RepositoryException re) { + throw new AkbException("Unable to list templates", re); + } + } + + /** + * Returns a template given it's name + */ + public static Node getTemplateByName(Session session, String name) { + try { + if (name == null) + return null; + if (session.nodeExists(AkbNames.AKB_TEMPLATES_BASE_PATH)) { + NodeIterator ni = session.getNode( + AkbNames.AKB_TEMPLATES_BASE_PATH).getNodes(); + while (ni.hasNext()) { + Node currN = ni.nextNode(); + if (name.equals(AkbJcrUtils.get(currN, Property.JCR_TITLE))) + return currN; + } + } + return null; + } catch (RepositoryException re) { + throw new AkbException("Unable to list templates", re); + } + } + /** * Return the type of alias that must be used given current item type */ @@ -52,38 +91,29 @@ public class AkbJcrUtils { } /** - * Return defined alias in the current environment given current item type + * Return current template depending on the passed node */ - public static List getDefinedAliasForNode(Node itemTemplate) { + public static Node getCurrentTemplate(Node akbNode) { try { - Session session = itemTemplate.getSession(); - QueryManager queryManager = session.getWorkspace() - .getQueryManager(); - QueryObjectModelFactory factory = queryManager.getQOMFactory(); - String nodeType = getAliasTypeForNode(itemTemplate); - - Selector source = factory.selector(nodeType, nodeType); - String basePath = getCurrentEnvBasePath(itemTemplate); - Constraint defaultC = factory.descendantNode( - source.getSelectorName(), basePath); - - // Order by default by JCR TITLE - // TODO check if node definition has MIX_TITLE mixin - // TODO Apparently case insensitive ordering is not implemented in - // current used JCR implementation - Ordering order = factory - .ascending(factory.upperCase(factory.propertyValue( - source.getSelectorName(), Property.JCR_TITLE))); - QueryObjectModel query; - query = factory.createQuery(source, defaultC, - new Ordering[] { order }, null); - QueryResult result = query.execute(); - - NodeIterator ni = result.getNodes(); - - return JcrUtils.nodeIteratorToList(ni); - } catch (RepositoryException e) { - throw new AkbException("Unable to list connector", e); + if (akbNode.getDepth() == 0) + // no base path for root node + return null; + Node parNode = akbNode.getParent(); + + while (parNode != null) + if (akbNode.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) + return akbNode; + else if (parNode.getDepth() == 0) + // we found not fitting node + return null; + else { + akbNode = parNode; + parNode = parNode.getParent(); + } + return null; + } catch (RepositoryException re) { + throw new AkbException("Unable to find template for node " + + akbNode, re); } }