X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.jcr%2Fsrc%2Forg%2Fargeo%2Fjcr%2FJcrUtils.java;h=857bd60b01044ac802584dd0697315a266b5e05c;hb=215480a865603e0090c43114541441ac1586b379;hp=eb6be528bf25fb4bc610359782802e03bb5f5cfe;hpb=afd31256550ee8fe257a43558cfd07dfcf2e5c04;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.jcr/src/org/argeo/jcr/JcrUtils.java b/org.argeo.jcr/src/org/argeo/jcr/JcrUtils.java index eb6be528b..857bd60b0 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/JcrUtils.java +++ b/org.argeo.jcr/src/org/argeo/jcr/JcrUtils.java @@ -9,6 +9,7 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.security.Principal; import java.text.DateFormat; import java.text.ParseException; @@ -72,7 +73,7 @@ public class JcrUtils { * Queries one single node. * * @return one single node or null if none was found - * @throws ArgeoJcrException if more than one node was found + * @throws JcrException if more than one node was found */ public static Node querySingleNode(Query query) { NodeIterator nodeIterator; @@ -80,7 +81,7 @@ public class JcrUtils { QueryResult queryResult = query.execute(); nodeIterator = queryResult.getNodes(); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot execute query " + query, e); + throw new JcrException("Cannot execute query " + query, e); } Node node; if (nodeIterator.hasNext()) @@ -89,7 +90,7 @@ public class JcrUtils { return null; if (nodeIterator.hasNext()) - throw new ArgeoJcrException("Query returned more than one node."); + throw new IllegalArgumentException("Query returned more than one node."); return node; } @@ -98,7 +99,7 @@ public class JcrUtils { if (path.equals("/")) return ""; if (path.charAt(0) != '/') - throw new ArgeoJcrException("Path " + path + " must start with a '/'"); + throw new IllegalArgumentException("Path " + path + " must start with a '/'"); String pathT = path; if (pathT.charAt(pathT.length() - 1) == '/') pathT = pathT.substring(0, pathT.length() - 2); @@ -110,9 +111,9 @@ public class JcrUtils { /** Retrieves the parent path of the provided path */ public static String parentPath(String path) { if (path.equals("/")) - throw new ArgeoJcrException("Root path '/' has no parent path"); + throw new IllegalArgumentException("Root path '/' has no parent path"); if (path.charAt(0) != '/') - throw new ArgeoJcrException("Path " + path + " must start with a '/'"); + throw new IllegalArgumentException("Path " + path + " must start with a '/'"); String pathT = path; if (pathT.charAt(pathT.length() - 1) == '/') pathT = pathT.substring(0, pathT.length() - 2); @@ -141,7 +142,7 @@ public class JcrUtils { path.append(u.getPath()); return path.toString(); } catch (MalformedURLException e) { - throw new ArgeoJcrException("Cannot generate URL path for " + url, e); + throw new IllegalArgumentException("Cannot generate URL path for " + url, e); } } @@ -153,8 +154,10 @@ public class JcrUtils { node.setProperty(Property.JCR_HOST, u.getHost()); node.setProperty(Property.JCR_PORT, Integer.toString(u.getPort())); node.setProperty(Property.JCR_PATH, normalizePath(u.getPath())); - } catch (Exception e) { - throw new ArgeoJcrException("Cannot set URL " + url + " as nt:address properties", e); + } catch (RepositoryException e) { + throw new JcrException("Cannot set URL " + url + " as nt:address properties", e); + } catch (MalformedURLException e) { + throw new IllegalArgumentException("Cannot set URL " + url + " as nt:address properties", e); } } @@ -166,8 +169,10 @@ public class JcrUtils { (int) node.getProperty(Property.JCR_PORT).getLong(), node.getProperty(Property.JCR_PATH).getString()); return u.toString(); - } catch (Exception e) { - throw new ArgeoJcrException("Cannot get URL from nt:address properties of " + node, e); + } catch (RepositoryException e) { + throw new JcrException("Cannot get URL from nt:address properties of " + node, e); + } catch (MalformedURLException e) { + throw new IllegalArgumentException("Cannot get URL from nt:address properties of " + node, e); } } @@ -264,7 +269,7 @@ public class JcrUtils { calendar.setTime(date); return calendar; } catch (ParseException e) { - throw new ArgeoJcrException("Cannot parse " + value + " with date format " + dateFormat, e); + throw new IllegalArgumentException("Cannot parse " + value + " with date format " + dateFormat, e); } } @@ -272,7 +277,7 @@ public class JcrUtils { /** The last element of a path. */ public static String lastPathElement(String path) { if (path.charAt(path.length() - 1) == '/') - throw new ArgeoJcrException("Path " + path + " cannot end with '/'"); + throw new IllegalArgumentException("Path " + path + " cannot end with '/'"); int index = path.lastIndexOf('/'); if (index < 0) return path; @@ -287,7 +292,7 @@ public class JcrUtils { try { return node.getName(); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot get name from " + node, e); + throw new JcrException("Cannot get name from " + node, e); } } @@ -299,7 +304,7 @@ public class JcrUtils { try { return node.getProperty(propertyName).getString(); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot get name from " + node, e); + throw new JcrException("Cannot get name from " + node, e); } } @@ -342,7 +347,7 @@ public class JcrUtils { return null; return node.getProperty(propertyName).getString(); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot get property " + propertyName + " of " + node, e); + throw new JcrException("Cannot get property " + propertyName + " of " + node, e); } } @@ -351,7 +356,7 @@ public class JcrUtils { try { return node.getPath(); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot get path of " + node, e); + throw new JcrException("Cannot get path of " + node, e); } } @@ -360,7 +365,7 @@ public class JcrUtils { try { return node.getProperty(propertyName).getBoolean(); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot get property " + propertyName + " of " + node, e); + throw new JcrException("Cannot get property " + propertyName + " of " + node, e); } } @@ -369,7 +374,7 @@ public class JcrUtils { try { return getBinaryAsBytes(node.getProperty(propertyName)); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot get property " + propertyName + " of " + node, e); + throw new JcrException("Cannot get property " + propertyName + " of " + node, e); } } @@ -416,7 +421,7 @@ public class JcrUtils { } return currParent; } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot mkdirs relative path " + relativePath + " from " + parentNode, e); + throw new JcrException("Cannot mkdirs relative path " + relativePath + " from " + parentNode, e); } } @@ -427,13 +432,13 @@ public class JcrUtils { public synchronized static Node mkdirsSafe(Session session, String path, String type) { try { if (session.hasPendingChanges()) - throw new ArgeoJcrException("Session has pending changes, save them first."); + throw new IllegalStateException("Session has pending changes, save them first."); Node node = mkdirs(session, path, type); session.save(); return node; } catch (RepositoryException e) { discardQuietly(session); - throw new ArgeoJcrException("Cannot safely make directories", e); + throw new JcrException("Cannot safely make directories", e); } } @@ -468,7 +473,7 @@ public class JcrUtils { Node node = session.getNode(path); // check type if (type != null && !node.isNodeType(type) && !node.getPath().equals("/")) - throw new ArgeoJcrException("Node " + node + " exists but is of type " + throw new IllegalArgumentException("Node " + node + " exists but is of type " + node.getPrimaryNodeType().getName() + " not of type " + type); // TODO: check versioning return node; @@ -504,7 +509,7 @@ public class JcrUtils { return currentNode; } catch (RepositoryException e) { discardQuietly(session); - throw new ArgeoJcrException("Cannot mkdirs " + path, e); + throw new JcrException("Cannot mkdirs " + path, e); } finally { } } @@ -571,7 +576,7 @@ public class JcrUtils { try { registerNamespaceSafely(session.getWorkspace().getNamespaceRegistry(), prefix, uri); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot find namespace registry", e); + throw new JcrException("Cannot find namespace registry", e); } } @@ -585,14 +590,14 @@ public class JcrUtils { if (pref.equals(prefix)) { String registeredUri = nr.getURI(pref); if (!registeredUri.equals(uri)) - throw new ArgeoJcrException("Prefix " + pref + " already registered for URI " + registeredUri - + " which is different from provided URI " + uri); + throw new IllegalArgumentException("Prefix " + pref + " already registered for URI " + + registeredUri + " which is different from provided URI " + uri); else return;// skip } nr.registerNamespace(prefix, uri); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot register namespace " + uri + " under prefix " + prefix, e); + throw new JcrException("Cannot register namespace " + uri + " under prefix " + prefix, e); } } @@ -685,7 +690,7 @@ public class JcrUtils { } return buf.toString(); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot write summary of " + acl, e); + throw new JcrException("Cannot write summary of " + acl, e); } } @@ -747,7 +752,7 @@ public class JcrUtils { copy(fromChild, toChild); } } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot copy " + fromNode + " to " + toNode, e); + throw new JcrException("Cannot copy " + fromNode + " to " + toNode, e); } } @@ -775,7 +780,7 @@ public class JcrUtils { } return true; } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot check all properties equals of " + reference + " and " + observed, e); + throw new JcrException("Cannot check all properties equals of " + reference + " and " + observed, e); } } @@ -837,7 +842,7 @@ public class JcrUtils { } } } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot diff " + reference + " and " + observed, e); + throw new JcrException("Cannot diff " + reference + " and " + observed, e); } } @@ -879,7 +884,7 @@ public class JcrUtils { } } } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot diff " + reference + " and " + observed, e); + throw new JcrException("Cannot diff " + reference + " and " + observed, e); } return diffs; } @@ -956,22 +961,15 @@ public class JcrUtils { /** Retrieve a {@link Binary} as a byte array */ public static byte[] getBinaryAsBytes(Property property) { - // ByteArrayOutputStream out = new ByteArrayOutputStream(); - // InputStream in = null; - // Binary binary = null; try (ByteArrayOutputStream out = new ByteArrayOutputStream(); Bin binary = new Bin(property); InputStream in = binary.getStream()) { - // binary = property.getBinary(); - // in = binary.getStream(); IOUtils.copy(in, out); return out.toByteArray(); - } catch (Exception e) { - throw new ArgeoJcrException("Cannot read binary " + property + " as bytes", e); - } finally { - // IOUtils.closeQuietly(out); - // IOUtils.closeQuietly(in); - // closeQuietly(binary); + } catch (RepositoryException e) { + throw new JcrException("Cannot read binary " + property + " as bytes", e); + } catch (IOException e) { + throw new RuntimeException("Cannot read binary " + property + " as bytes", e); } } @@ -981,8 +979,10 @@ public class JcrUtils { try (InputStream in = new ByteArrayInputStream(bytes)) { binary = node.getSession().getValueFactory().createBinary(in); node.setProperty(property, binary); - } catch (Exception e) { - throw new ArgeoJcrException("Cannot set binary " + property + " as bytes", e); + } catch (RepositoryException e) { + throw new JcrException("Cannot set binary " + property + " as bytes", e); + } catch (IOException e) { + throw new RuntimeException("Cannot set binary " + property + " as bytes", e); } finally { closeQuietly(binary); } @@ -994,8 +994,10 @@ public class JcrUtils { try (InputStream in = new ByteArrayInputStream(bytes)) { binary = prop.getSession().getValueFactory().createBinary(in); prop.setValue(binary); - } catch (RepositoryException | IOException e) { - throw new ArgeoJcrException("Cannot set binary " + prop + " as bytes", e); + } catch (RepositoryException e) { + throw new JcrException("Cannot set binary " + prop + " as bytes", e); + } catch (IOException e) { + throw new RuntimeException("Cannot set binary " + prop + " as bytes", e); } finally { closeQuietly(binary); } @@ -1007,7 +1009,7 @@ public class JcrUtils { */ public static String firstCharsToPath(String str, Integer nbrOfChars) { if (str.length() < nbrOfChars) - throw new ArgeoJcrException("String " + str + " length must be greater or equal than " + nbrOfChars); + throw new IllegalArgumentException("String " + str + " length must be greater or equal than " + nbrOfChars); StringBuffer path = new StringBuffer(""); StringBuffer curr = new StringBuffer(""); for (int i = 0; i < nbrOfChars; i++) { @@ -1104,7 +1106,7 @@ public class JcrUtils { session.getWorkspace().getObservationManager().addEventListener(listener, eventTypes, basePath, true, null, nodeType == null ? null : new String[] { nodeType }, true); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot add JCR listener " + listener + " to session " + session, e); + throw new JcrException("Cannot add JCR listener " + listener + " to session " + session, e); } } @@ -1162,7 +1164,7 @@ public class JcrUtils { node.setProperty(Property.JCR_LAST_MODIFIED, new GregorianCalendar()); node.setProperty(Property.JCR_LAST_MODIFIED_BY, node.getSession().getUserID()); } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot update last modified on " + node, e); + throw new JcrException("Cannot update last modified on " + node, e); } } @@ -1175,7 +1177,7 @@ public class JcrUtils { public static void updateLastModifiedAndParents(Node node, String untilPath) { try { if (untilPath != null && !node.getPath().startsWith(untilPath)) - throw new ArgeoJcrException(node + " is not under " + untilPath); + throw new IllegalArgumentException(node + " is not under " + untilPath); updateLastModified(node); if (untilPath == null) { if (!node.getPath().equals("/")) @@ -1185,7 +1187,7 @@ public class JcrUtils { updateLastModifiedAndParents(node.getParent(), untilPath); } } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot update lastModified from " + node + " until " + untilPath, e); + throw new JcrException("Cannot update lastModified from " + node + " until " + untilPath, e); } } @@ -1209,7 +1211,7 @@ public class JcrUtils { if (prop.getDefinition().isMultiple()) sbuf.append("*"); } catch (RepositoryException re) { - throw new ArgeoJcrException("unexpected error while getting property definition as String", re); + throw new JcrException("unexpected error while getting property definition as String", re); } return sbuf.toString(); } @@ -1240,7 +1242,7 @@ public class JcrUtils { curNodeSize += getNodeApproxSize(ni.nextNode()); return curNodeSize; } catch (RepositoryException re) { - throw new ArgeoJcrException("Unexpected error while recursively determining node size.", re); + throw new JcrException("Unexpected error while recursively determining node size.", re); } } @@ -1332,7 +1334,7 @@ public class JcrUtils { if (acl != null) return acl; else - throw new ArgeoJcrException("ACL not found at " + path); + throw new IllegalArgumentException("ACL not found at " + path); } /** Clear authorizations for a user at this path */ @@ -1377,7 +1379,7 @@ public class JcrUtils { NodeIterator fromChildren = fromNode.getNodes(); children: while (fromChildren.hasNext()) { if (monitor != null && monitor.isCanceled()) - throw new ArgeoJcrException("Copy cancelled before it was completed"); + throw new IllegalStateException("Copy cancelled before it was completed"); Node fromChild = fromChildren.nextNode(); String fileName = fromChild.getName(); @@ -1392,9 +1394,9 @@ public class JcrUtils { try (Bin binary = new Bin(fromChild.getNode(Node.JCR_CONTENT).getProperty(Property.JCR_DATA)); InputStream in = binary.getStream();) { copyStreamAsFile(toNode, fileName, in); + } catch (IOException e) { + throw new RuntimeException("Cannot copy " + fileName + " to " + toNode, e); } - // IOUtils.closeQuietly(in); - // closeQuietly(binary); // save session toNode.getSession().save(); @@ -1409,7 +1411,7 @@ public class JcrUtils { if (toNode.hasNode(fileName)) { toChildFolder = toNode.getNode(fileName); if (!toChildFolder.isNodeType(NodeType.NT_FOLDER)) - throw new ArgeoJcrException(toChildFolder + " is not of type nt:folder"); + throw new IllegalArgumentException(toChildFolder + " is not of type nt:folder"); } else { toChildFolder = toNode.addNode(fileName, NodeType.NT_FOLDER); @@ -1420,8 +1422,8 @@ public class JcrUtils { } } return count; - } catch (RepositoryException | IOException e) { - throw new ArgeoJcrException("Cannot copy files between " + fromNode + " and " + toNode); + } catch (RepositoryException e) { + throw new JcrException("Cannot copy files between " + fromNode + " and " + toNode, e); } finally { // in case there was an exception // IOUtils.closeQuietly(in); @@ -1444,7 +1446,7 @@ public class JcrUtils { localCount = localCount + 1; } } catch (RepositoryException e) { - throw new ArgeoJcrException("Cannot count all children of " + node); + throw new JcrException("Cannot count all children of " + node, e); } return localCount; } @@ -1456,14 +1458,10 @@ public class JcrUtils { * @return the created file node */ public static Node copyFile(Node folderNode, File file) { - // InputStream in = null; try (InputStream in = new FileInputStream(file)) { - // in = new FileInputStream(file); return copyStreamAsFile(folderNode, file.getName(), in); } catch (IOException e) { - throw new ArgeoJcrException("Cannot copy file " + file + " under " + folderNode, e); - // } finally { - // IOUtils.closeQuietly(in); + throw new RuntimeException("Cannot copy file " + file + " under " + folderNode, e); } } @@ -1473,8 +1471,8 @@ public class JcrUtils { try (InputStream in = new ByteArrayInputStream(bytes)) { // in = new ByteArrayInputStream(bytes); return copyStreamAsFile(folderNode, fileName, in); - } catch (Exception e) { - throw new ArgeoJcrException("Cannot copy file " + fileName + " under " + folderNode, e); + } catch (IOException e) { + throw new RuntimeException("Cannot copy file " + fileName + " under " + folderNode, e); // } finally { // IOUtils.closeQuietly(in); } @@ -1494,7 +1492,7 @@ public class JcrUtils { if (folderNode.hasNode(fileName)) { fileNode = folderNode.getNode(fileName); if (!fileNode.isNodeType(NodeType.NT_FILE)) - throw new ArgeoJcrException(fileNode + " is not of type nt:file"); + throw new IllegalArgumentException(fileNode + " is not of type nt:file"); // we assume that the content node is already there contentNode = fileNode.getNode(Node.JCR_CONTENT); } else { @@ -1504,8 +1502,8 @@ public class JcrUtils { binary = contentNode.getSession().getValueFactory().createBinary(in); contentNode.setProperty(Property.JCR_DATA, binary); return fileNode; - } catch (Exception e) { - throw new ArgeoJcrException("Cannot create file node " + fileName + " under " + folderNode, e); + } catch (RepositoryException e) { + throw new JcrException("Cannot create file node " + fileName + " under " + folderNode, e); } finally { closeQuietly(binary); } @@ -1526,8 +1524,10 @@ public class JcrUtils { try (InputStream in = fileNode.getNode(Node.JCR_CONTENT).getProperty(Property.JCR_DATA).getBinary() .getStream()) { return digest(algorithm, in); - } catch (RepositoryException | IOException e) { - throw new ArgeoJcrException("Cannot checksum file " + fileNode, e); + } catch (IOException e) { + throw new RuntimeException("Cannot checksum file " + fileNode + " with algorithm " + algorithm, e); + } catch (RepositoryException e) { + throw new JcrException("Cannot checksum file " + fileNode + " with algorithm " + algorithm, e); } } @@ -1545,8 +1545,10 @@ public class JcrUtils { byte[] checksum = digest.digest(); String res = encodeHexString(checksum); return res; - } catch (Exception e) { - throw new ArgeoJcrException("Cannot digest with algorithm " + algorithm, e); + } catch (IOException e) { + throw new RuntimeException("Cannot digest with algorithm " + algorithm, e); + } catch (NoSuchAlgorithmException e) { + throw new IllegalArgumentException("Cannot digest with algorithm " + algorithm, e); } }