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;
*/
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
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(
+ " 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);
}
session.save();
return rfNode;
} catch (RepositoryException re) {
- throw new ArgeoException(
+ throw new SlcException(
"Unexpected error while creating Result Folder node.", re);
}
}