X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.api%2Fsrc%2Forg%2Fargeo%2Fapi%2FNodeUtils.java;h=0370511384317a3f6d4dc200171b79c67ca2c7ca;hb=a1737b585272b50d9a54a67315e1180e9ed42267;hp=f64cbe6f71ed14e2e9520e86675b9f1af9b8d204;hpb=5b3108fe285bca50565b58b63fa4feddc96c0765;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api/src/org/argeo/api/NodeUtils.java b/org.argeo.api/src/org/argeo/api/NodeUtils.java index f64cbe6f7..037051138 100644 --- a/org.argeo.api/src/org/argeo/api/NodeUtils.java +++ b/org.argeo.api/src/org/argeo/api/NodeUtils.java @@ -1,18 +1,3 @@ -/* - * 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package org.argeo.api; import java.security.PrivilegedAction; @@ -21,13 +6,11 @@ import java.util.Map; import javax.jcr.NoSuchWorkspaceException; import javax.jcr.Node; -import javax.jcr.NodeIterator; +import javax.jcr.Property; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.RepositoryFactory; import javax.jcr.Session; -import javax.jcr.query.Query; -import javax.jcr.query.QueryResult; import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; import javax.security.auth.AuthPermission; @@ -128,7 +111,7 @@ public class NodeUtils { private static void checkUserWorkspace(Session session, String username) { String workspaceName = session.getWorkspace().getName(); - if (!NodeConstants.HOME.equals(workspaceName)) + if (!NodeConstants.HOME_WORKSPACE.equals(workspaceName)) throw new IllegalArgumentException(workspaceName + " is not the home workspace for user " + username); } @@ -182,7 +165,7 @@ public class NodeUtils { private static void checkGroupWorkspace(Session session, String groupname) { String workspaceName = session.getWorkspace().getName(); - if (!NodeConstants.SRV.equals(workspaceName)) + if (!NodeConstants.SRV_WORKSPACE.equals(workspaceName)) throw new IllegalArgumentException(workspaceName + " is not the group workspace for group " + groupname); } @@ -192,24 +175,24 @@ public class NodeUtils { * @return one single node or null if none was found * @throws ArgeoJcrException if more than one node was found */ - private static Node querySingleNode(Query query) { - NodeIterator nodeIterator; - try { - QueryResult queryResult = query.execute(); - nodeIterator = queryResult.getNodes(); - } catch (RepositoryException e) { - throw new RuntimeException("Cannot execute query " + query, e); - } - Node node; - if (nodeIterator.hasNext()) - node = nodeIterator.nextNode(); - else - return null; - - if (nodeIterator.hasNext()) - throw new RuntimeException("Query returned more than one node."); - return node; - } +// private static Node querySingleNode(Query query) { +// NodeIterator nodeIterator; +// try { +// QueryResult queryResult = query.execute(); +// nodeIterator = queryResult.getNodes(); +// } catch (RepositoryException e) { +// throw new RuntimeException("Cannot execute query " + query, e); +// } +// Node node; +// if (nodeIterator.hasNext()) +// node = nodeIterator.nextNode(); +// else +// return null; +// +// if (nodeIterator.hasNext()) +// throw new RuntimeException("Query returned more than one node."); +// return node; +// } /** Returns the home node of the session user or null if none was found. */ public static Node getUserHome(Session session) { @@ -217,15 +200,37 @@ public class NodeUtils { return getUserHome(session, userID); } + /** Whether this node is the home of the user of the underlying session. */ + public static boolean isUserHome(Node node) { + try { + String userID = node.getSession().getUserID(); + return node.hasProperty(Property.JCR_ID) && node.getProperty(Property.JCR_ID).getString().equals(userID); + } catch (RepositoryException e) { + throw new IllegalStateException(e); + } + } + /** * Translate the path to this node into a path containing the name of the * repository and the name of the workspace. */ - public static String getDataPath(String cn, Node node) throws RepositoryException { + public static String getDataPath(String cn, Node node) { assert node != null; StringBuilder buf = new StringBuilder(NodeConstants.PATH_DATA); - return buf.append('/').append(cn).append('/').append(node.getSession().getWorkspace().getName()) - .append(node.getPath()).toString(); + try { + return buf.append('/').append(cn).append('/').append(node.getSession().getWorkspace().getName()) + .append(node.getPath()).toString(); + } catch (RepositoryException e) { + throw new IllegalStateException("Cannot get data path for " + node + " in repository " + cn, e); + } + } + + /** + * Translate the path to this node into a path containing the name of the + * repository and the name of the workspace. + */ + public static String getDataPath(Node node) { + return getDataPath(NodeConstants.NODE, node); } /**