]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrResultUtils.java
+ Fix some bugs on ResultTree Observer
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / SlcJcrResultUtils.java
index ca9dabfe77f1c8a7fa86a3276319c11e196f06ca..e82bd4a3f4659a85ccc3cd3450b015a0b539684a 100644 (file)
@@ -20,8 +20,6 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 
-import org.apache.jackrabbit.spi.commons.conversion.MalformedPathException;
-import org.argeo.ArgeoException;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.jcr.UserJcrUtils;
 import org.argeo.slc.SlcException;
@@ -37,33 +35,72 @@ public class SlcJcrResultUtils {
         */
        public static String getSlcResultsBasePath(Session session) {
                try {
-
-                       return UserJcrUtils.getUserHome(session).getPath() + "/"
+                       Node userHome = UserJcrUtils.getUserHome(session);
+                       if (userHome == null)
+                               throw new SlcException("No user home available for "
+                                               + session.getUserID());
+                       return userHome.getPath() + '/' + SlcNames.SLC_SYSTEM + '/'
                                        + SlcNames.SLC_RESULTS;
                } catch (RepositoryException re) {
-                       throw new ArgeoException(
+                       throw new SlcException(
                                        "Unexpected error while getting Slc Results Base Path.", re);
                }
        }
 
+       /**
+        * Returns the base node to store SlcResults. If it does not exists, it is
+        * created. If a node already exists at the given path with the wrong type,
+        * it throws an exception.
+        * 
+        * @param session
+        * @return
+        */
+       public static Node getSlcResultsParentNode(Session session) {
+               try {
+                       String absPath = getSlcResultsBasePath(session);
+                       if (session.nodeExists(absPath)) {
+                               Node currNode = session.getNode(absPath);
+                               if (currNode.isNodeType(NodeType.NT_UNSTRUCTURED))
+                                       return currNode;
+                               else
+                                       throw new SlcException(
+                                                       "A node already exists at this path : " + absPath
+                                                                       + " that has the wrong type. ");
+                       } else {
+                               Node slcResParNode = JcrUtils.mkdirs(session, absPath);
+                               slcResParNode.setPrimaryType(NodeType.NT_UNSTRUCTURED);
+                               session.save();
+                               return slcResParNode;
+                       }
+               } catch (RepositoryException re) {
+                       throw new SlcException(
+                                       "Unexpected error while creating slcResult root parent node.",
+                                       re);
+               }
+       }
+
        /**
         * Returns the path to the current Result UI specific node, depending the
         * current user
         */
        public static String getMyResultsBasePath(Session session) {
                try {
-                       return UserJcrUtils.getUserHome(session).getPath() + "/"
-                                       + SlcJcrConstants.SLC_MYRESULT_BASEPATH;
+                       Node userHome = UserJcrUtils.getUserHome(session);
+                       if (userHome == null)
+                               throw new SlcException("No user home available for "
+                                               + session.getUserID());
+                       return userHome.getPath() + '/' + SlcNames.SLC_SYSTEM + '/'
+                                       + SlcNames.SLC_MY_RESULTS;
                } catch (RepositoryException re) {
-                       throw new ArgeoException(
+                       throw new SlcException(
                                        "Unexpected error while getting Slc Results Base Path.", re);
                }
        }
 
        /**
-        * Creates a new node with type NodeType.NT_UNSTRUCTURED at the given
-        * absolute path. If a node already exists at the given path, returns that
-        * node if it has the correct type and throws an exception otherwise.
+        * Creates a new node with type SlcTypes.SLC_MY_RESULT_ROOT_FOLDER at the
+        * given absolute path. If a node already exists at the given path, returns
+        * that node if it has the correct type and throws an exception otherwise.
         * 
         * @param session
         * @return
@@ -73,7 +110,7 @@ public class SlcJcrResultUtils {
                        String absPath = getMyResultsBasePath(session);
                        if (session.nodeExists(absPath)) {
                                Node currNode = session.getNode(absPath);
-                               if (currNode.isNodeType(NodeType.NT_UNSTRUCTURED))
+                               if (currNode.isNodeType(SlcTypes.SLC_MY_RESULT_ROOT_FOLDER))
                                        return currNode;
                                else
                                        throw new SlcException(
@@ -81,12 +118,12 @@ public class SlcJcrResultUtils {
                                                                        + " that has the wrong type. ");
                        } else {
                                Node myResParNode = JcrUtils.mkdirs(session, absPath);
-                               myResParNode.setPrimaryType(NodeType.NT_UNSTRUCTURED);
+                               myResParNode.setPrimaryType(SlcTypes.SLC_MY_RESULT_ROOT_FOLDER);
                                session.save();
                                return myResParNode;
                        }
                } catch (RepositoryException re) {
-                       throw new ArgeoException(
+                       throw new SlcException(
                                        "Unexpected error while creating user MyResult base node.",
                                        re);
                }
@@ -122,7 +159,7 @@ public class SlcJcrResultUtils {
                        session.save();
                        return rfNode;
                } catch (RepositoryException re) {
-                       throw new ArgeoException(
+                       throw new SlcException(
                                        "Unexpected error while creating Result Folder node.", re);
                }
        }