From: Mathieu Baudier Date: Wed, 6 Jun 2018 16:45:22 +0000 (+0200) Subject: Improve exception handling X-Git-Tag: argeo-commons-2.1.74~19 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=d4a5631f933282d791fb8edddc59a6f6751311e0;p=lgpl%2Fargeo-commons.git Improve exception handling --- diff --git a/org.argeo.jcr/ext/test/org/argeo/jcr/fs/JcrFileSystemTest.java b/org.argeo.jcr/ext/test/org/argeo/jcr/fs/JcrFileSystemTest.java index de2e8e828..e24a7de9f 100644 --- a/org.argeo.jcr/ext/test/org/argeo/jcr/fs/JcrFileSystemTest.java +++ b/org.argeo.jcr/ext/test/org/argeo/jcr/fs/JcrFileSystemTest.java @@ -66,6 +66,9 @@ public class JcrFileSystemTest extends TestCase { log.debug("Created sub directories " + subsubdir); Path copiedFile = testDir.resolve("copiedFile.txt"); log.debug("Resolved " + copiedFile); + Path relativeCopiedFile = testDir.relativize(copiedFile); + assertEquals(copiedFile.getFileName().toString(), relativeCopiedFile.toString()); + log.debug("Relative copied file " + relativeCopiedFile); try (OutputStream out = Files.newOutputStream(copiedFile); InputStream in = Files.newInputStream(testPath)) { IOUtils.copy(in, out); } diff --git a/org.argeo.jcr/src/org/argeo/jackrabbit/fs/DavexFsProvider.java b/org.argeo.jcr/src/org/argeo/jackrabbit/fs/DavexFsProvider.java index d9e106b56..764eed035 100644 --- a/org.argeo.jcr/src/org/argeo/jackrabbit/fs/DavexFsProvider.java +++ b/org.argeo.jcr/src/org/argeo/jackrabbit/fs/DavexFsProvider.java @@ -47,7 +47,8 @@ public class DavexFsProvider extends AbstractJackrabbitFsProvider { } } - private JcrFileSystem tryGetRepo(RepositoryFactory repositoryFactory, URI repoUri, String workspace) { + private JcrFileSystem tryGetRepo(RepositoryFactory repositoryFactory, URI repoUri, String workspace) + throws IOException { Map params = new HashMap(); params.put(JACKRABBIT_REPOSITORY_URI, repoUri.toString()); params.put(JACKRABBIT_REMOTE_DEFAULT_WORKSPACE, "main"); diff --git a/org.argeo.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java b/org.argeo.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java index 0ed826894..47cf33d14 100644 --- a/org.argeo.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java +++ b/org.argeo.jcr/src/org/argeo/jackrabbit/fs/JackrabbitMemoryFsProvider.java @@ -2,6 +2,7 @@ package org.argeo.jackrabbit.fs; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.FileSystem; import java.nio.file.Files; @@ -9,6 +10,7 @@ import java.nio.file.Path; import java.util.HashMap; import java.util.Map; +import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.SimpleCredentials; @@ -37,8 +39,8 @@ public class JackrabbitMemoryFsProvider extends AbstractJackrabbitFsProvider { Session session = repository.login(new SimpleCredentials(username, username.toCharArray())); fileSystem = new JcrFileSystem(this, session); return fileSystem; - } catch (Exception e) { - throw new JcrFsException("Cannot login to repository", e); + } catch (RepositoryException | URISyntaxException e) { + throw new IOException("Cannot login to repository", e); } } @@ -50,11 +52,11 @@ public class JackrabbitMemoryFsProvider extends AbstractJackrabbitFsProvider { @Override public Path getPath(URI uri) { String path = uri.getPath(); - if(fileSystem==null) + if (fileSystem == null) try { newFileSystem(uri, new HashMap()); } catch (IOException e) { - throw new JcrFsException("Could not autocreate file system",e); + throw new JcrFsException("Could not autocreate file system", e); } return fileSystem.getPath(path); } diff --git a/org.argeo.jcr/src/org/argeo/jcr/fs/BinaryChannel.java b/org.argeo.jcr/src/org/argeo/jcr/fs/BinaryChannel.java index 2039f778a..9213b729d 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/fs/BinaryChannel.java +++ b/org.argeo.jcr/src/org/argeo/jcr/fs/BinaryChannel.java @@ -74,7 +74,7 @@ public class BinaryChannel implements SeekableByteChannel { session.save(); open = false; } catch (RepositoryException e) { - throw new JcrFsException("Cannot close " + file, e); + throw new IOException("Cannot close " + file, e); } finally { JcrUtils.closeQuietly(newBinary); // IOUtils.closeQuietly(fc); @@ -114,7 +114,7 @@ public class BinaryChannel implements SeekableByteChannel { position = position + read; return read; } catch (RepositoryException e) { - throw new JcrFsException("Cannot read into buffer", e); + throw new IOException("Cannot read into buffer", e); } } } @@ -160,7 +160,7 @@ public class BinaryChannel implements SeekableByteChannel { try { return binary.getSize(); } catch (RepositoryException e) { - throw new JcrFsException("Cannot get size", e); + throw new IOException("Cannot get size", e); } } } @@ -186,7 +186,7 @@ public class BinaryChannel implements SeekableByteChannel { } return fc; } catch (RepositoryException e) { - throw new JcrFsException("Cannot get temp file channel", e); + throw new IOException("Cannot get temp file channel", e); } } diff --git a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystem.java b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystem.java index 88fdb207e..d11f0c51d 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystem.java +++ b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystem.java @@ -22,7 +22,7 @@ public class JcrFileSystem extends FileSystem { private final Session session; private String userHomePath = null; - public JcrFileSystem(JcrFileSystemProvider provider, Session session) { + public JcrFileSystem(JcrFileSystemProvider provider, Session session) throws IOException { super(); this.provider = provider; this.session = session; @@ -31,7 +31,7 @@ public class JcrFileSystem extends FileSystem { try { userHomePath = userHome.getPath(); } catch (RepositoryException e) { - throw new JcrFsException("Cannot retrieve user home path", e); + throw new IOException("Cannot retrieve user home path", e); } } diff --git a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java index 1e2864d24..5e3e8ca21 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java +++ b/org.argeo.jcr/src/org/argeo/jcr/fs/JcrFileSystemProvider.java @@ -42,10 +42,10 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { if (node == null) { Node parent = toNode(path.getParent()); if (parent == null) - throw new JcrFsException("No parent directory for " + path); + throw new IOException("No parent directory for " + path); if (parent.getPrimaryNodeType().isNodeType(NodeType.NT_FILE) || parent.getPrimaryNodeType().isNodeType(NodeType.NT_LINKED_FILE)) - throw new JcrFsException(path + " parent is a file"); + throw new IOException(path + " parent is a file"); String fileName = path.getFileName().toString(); fileName = Text.escapeIllegalJcrChars(fileName); @@ -57,7 +57,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { throw new UnsupportedOperationException(node + " must be a file"); return new BinaryChannel(node); } catch (RepositoryException e) { - throw new JcrFsException("Cannot read file", e); + throw new IOException("Cannot read file", e); } } @@ -67,7 +67,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { Node base = toNode(dir); return new NodeDirectoryStream((JcrFileSystem) dir.getFileSystem(), base.getNodes(), filter); } catch (RepositoryException e) { - throw new JcrFsException("Cannot list directory", e); + throw new IOException("Cannot list directory", e); } } @@ -81,7 +81,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { throw new IOException("Parent of " + dir + " does not exist"); if (parent.getPrimaryNodeType().isNodeType(NodeType.NT_FILE) || parent.getPrimaryNodeType().isNodeType(NodeType.NT_LINKED_FILE)) - throw new JcrFsException(dir + " parent is a file"); + throw new IOException(dir + " parent is a file"); String fileName = dir.getFileName().toString(); fileName = Text.escapeIllegalJcrChars(fileName); node = parent.addNode(fileName, NodeType.NT_FOLDER); @@ -93,7 +93,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { throw new FileExistsException(dir + " exists and is not a directory"); } } catch (RepositoryException e) { - throw new JcrFsException("Cannot create directory " + dir, e); + throw new IOException("Cannot create directory " + dir, e); } } @@ -114,7 +114,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { } session.save(); } catch (RepositoryException e) { - throw new JcrFsException("Cannot delete " + path, e); + throw new IOException("Cannot delete " + path, e); } } @@ -127,7 +127,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { JcrUtils.copy(sourceNode, targetNode); sourceNode.getSession().save(); } catch (RepositoryException e) { - throw new JcrFsException("Cannot copy from " + source + " to " + target, e); + throw new IOException("Cannot copy from " + source + " to " + target, e); } } @@ -139,7 +139,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { session.move(sourceNode.getPath(), target.toString()); session.save(); } catch (RepositoryException e) { - throw new JcrFsException("Cannot move from " + source + " to " + target, e); + throw new IOException("Cannot move from " + source + " to " + target, e); } } @@ -156,7 +156,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { Node node2 = toNode(path2); return node.isSame(node2); } catch (RepositoryException e) { - throw new JcrFsException("Cannot check whether " + path + " and " + path2 + " are same", e); + throw new IOException("Cannot check whether " + path + " and " + path2 + " are same", e); } } @@ -181,7 +181,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { throw new NoSuchFileException(path + " does not exist"); // TODO check access via JCR api } catch (RepositoryException e) { - throw new JcrFsException("Cannot delete " + path, e); + throw new IOException("Cannot delete " + path, e); } } @@ -197,12 +197,12 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { try { // TODO check if assignable Node node = toNode(path); - if(node==null) { - throw new JcrFsException("JCR node not found for "+path); + if (node == null) { + throw new IOException("JCR node not found for " + path); } return (A) new JcrBasicfileAttributes(node); } catch (RepositoryException e) { - throw new JcrFsException("Cannot read basic attributes of " + path, e); + throw new IOException("Cannot read basic attributes of " + path, e); } } @@ -242,7 +242,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { } return res; } catch (RepositoryException e) { - throw new JcrFsException("Cannot read attributes of " + path, e); + throw new IOException("Cannot read attributes of " + path, e); } } @@ -259,7 +259,7 @@ public abstract class JcrFileSystemProvider extends FileSystemProvider { } node.getSession().save(); } catch (RepositoryException e) { - throw new JcrFsException("Cannot set attribute " + attribute + " on " + path, e); + throw new IOException("Cannot set attribute " + attribute + " on " + path, e); } }