]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java
Packaging fixes
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jcr / src / main / java / org / argeo / jcr / JcrUtils.java
index 77309feea0ad8e88c507b81f279184ac3b750373..6edb854cb6d3f3df5a8458c54f057fbd86f6af53 100644 (file)
@@ -650,6 +650,24 @@ public class JcrUtils implements ArgeoJcrConstants {
                return getUserHome(session, userID);
        }
 
+       /**
+        * Returns user home has path, embedding exceptions. Contrary to
+        * {@link #getUserHome(Session)}, it never returns null but throws and
+        * exception if not found.
+        */
+       public static String getUserHomePath(Session session) {
+               String userID = session.getUserID();
+               try {
+                       Node userHome = getUserHome(session, userID);
+                       if (userHome != null)
+                               return userHome.getPath();
+                       else
+                               throw new ArgeoException("No home registered for " + userID);
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot find user home path", e);
+               }
+       }
+
        /** Get the profile of the user attached to this session. */
        public static Node getUserProfile(Session session) {
                String userID = session.getUserID();
@@ -663,10 +681,10 @@ public class JcrUtils implements ArgeoJcrConstants {
         *            the session to use in order to perform the search, this can be
         *            a session with a different user ID than the one searched,
         *            typically when a system or admin session is used.
-        * @param userID
-        *            the id of the user
+        * @param username
+        *            the username of the user
         */
-       public static Node getUserHome(Session session, String userID) {
+       public static Node getUserHome(Session session, String username) {
                try {
                        QueryObjectModelFactory qomf = session.getWorkspace()
                                        .getQueryManager().getQOMFactory();
@@ -677,18 +695,18 @@ public class JcrUtils implements ArgeoJcrConstants {
                        DynamicOperand userIdDop = qomf.propertyValue("userHome",
                                        ArgeoNames.ARGEO_USER_ID);
                        StaticOperand userIdSop = qomf.literal(session.getValueFactory()
-                                       .createValue(userID));
+                                       .createValue(username));
                        Constraint constraint = qomf.comparison(userIdDop,
                                        QueryObjectModelFactory.JCR_OPERATOR_EQUAL_TO, userIdSop);
                        Query query = qomf.createQuery(userHomeSel, constraint, null, null);
                        Node userHome = JcrUtils.querySingleNode(query);
                        return userHome;
                } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot find home for user " + userID, e);
+                       throw new ArgeoException("Cannot find home for user " + username, e);
                }
        }
 
-       public static Node getUserProfile(Session session, String userID) {
+       public static Node getUserProfile(Session session, String username) {
                try {
                        QueryObjectModelFactory qomf = session.getWorkspace()
                                        .getQueryManager().getQOMFactory();
@@ -697,21 +715,23 @@ public class JcrUtils implements ArgeoJcrConstants {
                        DynamicOperand userIdDop = qomf.propertyValue("userProfile",
                                        ArgeoNames.ARGEO_USER_ID);
                        StaticOperand userIdSop = qomf.literal(session.getValueFactory()
-                                       .createValue(userID));
+                                       .createValue(username));
                        Constraint constraint = qomf.comparison(userIdDop,
                                        QueryObjectModelFactory.JCR_OPERATOR_EQUAL_TO, userIdSop);
                        Query query = qomf.createQuery(sel, constraint, null, null);
                        Node userHome = JcrUtils.querySingleNode(query);
                        return userHome;
                } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot find profile for user " + userID,
-                                       e);
+                       throw new ArgeoException(
+                                       "Cannot find profile for user " + username, e);
                }
        }
 
        public static Node createUserHome(Session session, String homeBasePath,
                        String username) {
                try {
+                       if (session == null)
+                               throw new ArgeoException("Session is null");
                        if (session.hasPendingChanges())
                                throw new ArgeoException(
                                                "Session has pending changes, save them first");
@@ -724,11 +744,6 @@ public class JcrUtils implements ArgeoJcrConstants {
                        userProfile.setProperty(ArgeoNames.ARGEO_USER_ID, username);
                        session.save();
                        // we need to save the profile before adding the user home type
-                       PropertyIterator pit = userHome.getProperties();
-                       while (pit.hasNext()) {
-                               Property p = pit.nextProperty();
-                               log.debug(p.getName() + "=" + p.getValue().getString());
-                       }
                        userHome.addMixin(ArgeoTypes.ARGEO_USER_HOME);
                        // see
                        // http://jackrabbit.510166.n4.nabble.com/Jackrabbit-2-0-beta-6-Problem-adding-a-Mixin-type-with-mandatory-properties-after-setting-propertiesn-td1290332.html