Improve DocBook support.
[gpl/argeo-suite.git] / publishing / org.argeo.publishing.ui / src / org / argeo / docbook / ui / DbkUtils.java
index ee675d26e5aa77428f63ee774aafca7bab3d0530..35a7132f78fd87a62f4f711d5ae0941dd0fd2b22 100644 (file)
@@ -1,8 +1,11 @@
 package org.argeo.docbook.ui;
 
 import javax.jcr.Node;
+import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
 
+import org.argeo.entity.EntityType;
+import org.argeo.jcr.Jcr;
 import org.argeo.jcr.JcrException;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.jcr.JcrxApi;
@@ -22,6 +25,34 @@ public class DbkUtils {
                }
        }
 
+       public static Node getMetadata(Node infoContainer) {
+               try {
+                       if (!infoContainer.hasNode(DocBookTypes.INFO))
+                               return null;
+                       Node info = infoContainer.getNode(DocBookTypes.INFO);
+                       if (!info.hasNode(EntityType.local.get()))
+                               return null;
+                       return info.getNode(EntityType.local.get());
+               } catch (RepositoryException e) {
+                       throw new JcrException("Cannot retrieve metadata from " + infoContainer, e);
+               }
+       }
+
+       public static Node getChildByRole(Node parent, String role) {
+               try {
+                       NodeIterator baseSections = parent.getNodes();
+                       while (baseSections.hasNext()) {
+                               Node n = baseSections.nextNode();
+                               String r = Jcr.get(n, DocBookNames.DBK_ROLE);
+                               if (r != null && r.equals(role))
+                                       return n;
+                       }
+                       return null;
+               } catch (RepositoryException e) {
+                       throw new JcrException("Cannot get child from " + parent + " with role " + role, e);
+               }
+       }
+
        public static Node addParagraph(Node node, String txt) {
                try {
                        Node para = node.addNode(DocBookTypes.PARA, DocBookTypes.PARA);