import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryFactory;
import javax.jcr.Session;
import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
import javax.jcr.Workspace;
import javax.jcr.nodetype.NodeType;
import javax.jcr.observation.EventListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
+import org.argeo.util.security.DigestUtils;
import org.argeo.util.security.SimplePrincipal;
/** Utility methods to simplify common JCR operations. */
* PROPERTIES
*/
- /** Concisely get the string value of a property */
+ /**
+ * Concisely get the string value of a property or null if this node doesn't
+ * have this property
+ */
public static String get(Node node, String propertyName) {
try {
+ if (!node.hasProperty(propertyName))
+ return null;
return node.getProperty(propertyName).getString();
} catch (RepositoryException e) {
throw new ArgeoException("Cannot get property " + propertyName
}
}
+ /** Computes the checksum of an nt:file */
+ public static String checksumFile(Node fileNode, String algorithm) {
+ Binary data = null;
+ InputStream in = null;
+ try {
+ data = fileNode.getNode(Node.JCR_CONTENT)
+ .getProperty(Property.JCR_DATA).getBinary();
+ in = data.getStream();
+ return DigestUtils.digest(algorithm, in);
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Cannot checksum file " + fileNode, e);
+ } finally {
+ IOUtils.closeQuietly(in);
+ closeQuietly(data);
+ }
+ }
+
/**
* Creates depth from a string (typically a username) by adding levels based
* on its first characters: "aBcD",2 => a/aB
/**
* Add privileges on a path to a {@link Principal}. The path must already
- * exist.
+ * exist. Session is saved.
*/
public static void addPrivileges(Session session, String path,
Principal principal, List<Privilege> privs)
throw new ArgeoException("Don't know how to apply privileges "
+ privs + " to " + principal + " on " + path);
}
+ session.save();
}
}