Refactor JCR exceptions.
[lgpl/argeo-commons.git] / org.argeo.jcr / src / org / argeo / jcr / proxy / AbstractUrlProxy.java
index 30369ce7d1873ef462f84fd384ce600657d665b1..f0e8605c403a0472cba81d889e55efbccdf7463e 100644 (file)
@@ -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.jcr.proxy;
 
 import java.io.IOException;
@@ -27,10 +12,9 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.jcr.ArgeoJcrException;
+import org.argeo.jcr.JcrException;
 import org.argeo.jcr.JcrUtils;
 
 /** Base class for URL based proxys. */
@@ -45,23 +29,21 @@ public abstract class AbstractUrlProxy implements ResourceProxy {
 
        void init() {
                try {
-                       jcrAdminSession = JcrUtils.loginOrCreateWorkspace(jcrRepository,
-                                       proxyWorkspace);
+                       jcrAdminSession = JcrUtils.loginOrCreateWorkspace(jcrRepository, proxyWorkspace);
                        beforeInitSessionSave(jcrAdminSession);
                        if (jcrAdminSession.hasPendingChanges())
                                jcrAdminSession.save();
-               } catch (Exception e) {
+               } catch (RepositoryException e) {
                        JcrUtils.discardQuietly(jcrAdminSession);
-                       throw new ArgeoJcrException("Cannot initialize Maven proxy", e);
+                       throw new JcrException("Cannot initialize URL proxy", e);
                }
        }
 
        /**
-        * Called before the (admin) session is saved at the end of the
-        * initialization. Does nothing by default, to be overridden.
+        * Called before the (admin) session is saved at the end of the initialization.
+        * Does nothing by default, to be overridden.
         */
-       protected void beforeInitSessionSave(Session session)
-                       throws RepositoryException {
+       protected void beforeInitSessionSave(Session session) throws RepositoryException {
        }
 
        void destroy() {
@@ -69,8 +51,8 @@ public abstract class AbstractUrlProxy implements ResourceProxy {
        }
 
        /**
-        * Called before the (admin) session is logged out when resources are
-        * released. Does nothing by default, to be overridden.
+        * Called before the (admin) session is logged out when resources are released.
+        * Does nothing by default, to be overridden.
         */
        protected void beforeDestroySessionLogout() throws RepositoryException {
        }
@@ -83,8 +65,7 @@ public abstract class AbstractUrlProxy implements ResourceProxy {
                Session clientSession = null;
                try {
                        clientSession = jcrRepository.login(proxyWorkspace);
-                       if (!clientSession.itemExists(path)
-                                       || shouldUpdate(clientSession, path)) {
+                       if (!clientSession.itemExists(path) || shouldUpdate(clientSession, path)) {
                                nodeAdmin = retrieveAndSave(path);
                                if (nodeAdmin != null)
                                        nodeClient = clientSession.getNode(path);
@@ -92,7 +73,7 @@ public abstract class AbstractUrlProxy implements ResourceProxy {
                                nodeClient = clientSession.getNode(path);
                        return nodeClient;
                } catch (RepositoryException e) {
-                       throw new ArgeoJcrException("Cannot proxy " + path, e);
+                       throw new JcrException("Cannot proxy " + path, e);
                } finally {
                        if (nodeClient == null)
                                JcrUtils.logoutQuietly(clientSession);
@@ -108,47 +89,42 @@ public abstract class AbstractUrlProxy implements ResourceProxy {
                        return node;
                } catch (RepositoryException e) {
                        JcrUtils.discardQuietly(jcrAdminSession);
-                       throw new ArgeoJcrException("Cannot retrieve and save " + path, e);
+                       throw new JcrException("Cannot retrieve and save " + path, e);
                } finally {
                        notifyAll();
                }
        }
 
        /** Session is not saved */
-       protected synchronized Node proxyUrl(Session session, String remoteUrl,
-                       String path) throws RepositoryException {
+       protected synchronized Node proxyUrl(Session session, String remoteUrl, String path) throws RepositoryException {
                Node node = null;
                if (session.itemExists(path)) {
                        // throw new ArgeoJcrException("Node " + path + " already exists");
                }
-               InputStream in = null;
-               try {
-                       URL u = new URL(remoteUrl);
-                       in = u.openStream();
+               try (InputStream in = new URL(remoteUrl).openStream()) {
+                       // URL u = new URL(remoteUrl);
+                       // in = u.openStream();
                        node = importFile(session, path, in);
                } catch (IOException e) {
                        if (log.isDebugEnabled()) {
-                               log.debug("Cannot read " + remoteUrl + ", skipping... "
-                                               + e.getMessage());
+                               log.debug("Cannot read " + remoteUrl + ", skipping... " + e.getMessage());
                                // log.trace("Cannot read because of ", e);
                        }
                        JcrUtils.discardQuietly(session);
-               } finally {
-                       IOUtils.closeQuietly(in);
+                       // } finally {
+                       // IOUtils.closeQuietly(in);
                }
                return node;
        }
 
-       protected synchronized Node importFile(Session session, String path,
-                       InputStream in) throws RepositoryException {
+       protected synchronized Node importFile(Session session, String path, InputStream in) throws RepositoryException {
                Binary binary = null;
                try {
                        Node content = null;
                        Node node = null;
                        if (!session.itemExists(path)) {
-                               node = JcrUtils.mkdirs(session, path, NodeType.NT_FILE,
-                                               NodeType.NT_FOLDER, false);
-                               content = node.addNode(Node.JCR_CONTENT, NodeType.NT_RESOURCE);
+                               node = JcrUtils.mkdirs(session, path, NodeType.NT_FILE, NodeType.NT_FOLDER, false);
+                               content = node.addNode(Node.JCR_CONTENT, NodeType.NT_UNSTRUCTURED);
                        } else {
                                node = session.getNode(path);
                                content = node.getNode(Node.JCR_CONTENT);