/*
- * 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.
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;
/**
*/
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);
}
-
}
/**
}
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);
}
}