]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrResultUtils.java
Provide SlcAgentFactory in the core agent
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / SlcJcrResultUtils.java
index 3eba046cacfd72542eba2276aa90314c9f8205ae..729c2d74b7c3dcd958dfce3959291586a8bea4ee 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2012 Mathieu Baudier
+ * Copyright (C) 2007-2012 Argeo GmbH
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,10 +18,10 @@ package org.argeo.slc.jcr;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
 
-import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoJcrUtils;
 import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
 import org.argeo.slc.SlcException;
 
 /**
@@ -35,43 +35,98 @@ public class SlcJcrResultUtils {
         */
        public static String getSlcResultsBasePath(Session session) {
                try {
-
-                       return ArgeoJcrUtils.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 ArgeoJcrUtils.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 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
+        */
        public static Node getMyResultParentNode(Session session) {
                try {
-                       if (session.nodeExists(SlcJcrResultUtils
-                                       .getMyResultsBasePath(session)))
-                               return session.getNode(getMyResultsBasePath(session));
-                       else
-                               return createResultFolderNode(session,
-                                               getMyResultsBasePath(session));
+                       String absPath = getMyResultsBasePath(session);
+                       if (session.nodeExists(absPath)) {
+                               Node currNode = session.getNode(absPath);
+                               if (currNode.isNodeType(SlcTypes.SLC_MY_RESULT_ROOT_FOLDER))
+                                       return currNode;
+                               else
+                                       throw new SlcException(
+                                                       "A node already exists at this path : " + absPath
+                                                                       + " that has the wrong type. ");
+                       } else {
+                               Node myResParNode = JcrUtils.mkdirs(session, absPath);
+                               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);
                }
-
        }
 
        /**
@@ -98,13 +153,13 @@ public class SlcJcrResultUtils {
                        }
                        Node rfNode = JcrUtils.mkdirs(session, absPath);
                        rfNode.setPrimaryType(SlcTypes.SLC_RESULT_FOLDER);
-                       Node statusNode = rfNode.addNode(SlcNames.SLC_STATUS,
+                       Node statusNode = rfNode.addNode(SlcNames.SLC_AGGREGATED_STATUS,
                                        SlcTypes.SLC_CHECK);
                        statusNode.setProperty(SlcNames.SLC_SUCCESS, true);
                        session.save();
                        return rfNode;
                } catch (RepositoryException re) {
-                       throw new ArgeoException(
+                       throw new SlcException(
                                        "Unexpected error while creating Result Folder node.", re);
                }
        }