]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/ResourceProxyServlet.java
Add dep folder
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jcr.mvc / src / main / java / org / argeo / jcr / mvc / ResourceProxyServlet.java
index b92f776cd23bd2a83645281614ac1ac00d04d1dd..c821be05418f229f31cb6708f94be3ce8dd34daa 100644 (file)
@@ -1,3 +1,18 @@
+/*
+ * 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.mvc;
 
 import java.io.IOException;
@@ -7,7 +22,7 @@ import javax.jcr.Binary;
 import javax.jcr.Node;
 import javax.jcr.PathNotFoundException;
 import javax.jcr.Property;
-import javax.jcr.Session;
+import javax.jcr.RepositoryException;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -18,12 +33,11 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoNames;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.jcr.proxy.ResourceProxy;
 
 /** Wraps a proxy via HTTP */
-public class ResourceProxyServlet extends HttpServlet implements ArgeoNames {
+public class ResourceProxyServlet extends HttpServlet {
        private static final long serialVersionUID = -8886549549223155801L;
 
        private final static Log log = LogFactory
@@ -31,7 +45,6 @@ public class ResourceProxyServlet extends HttpServlet implements ArgeoNames {
 
        private ResourceProxy proxy;
 
-       private Session jcrSession;
        private String contentTypeCharset = "UTF-8";
 
        @Override
@@ -39,9 +52,8 @@ public class ResourceProxyServlet extends HttpServlet implements ArgeoNames {
                        HttpServletResponse response) throws ServletException, IOException {
                String path = request.getPathInfo();
 
-               String nodePath = proxy.getNodePath(path);
                if (log.isTraceEnabled()) {
-                       log.trace("path=" + path + ", nodePath=" + nodePath);
+                       log.trace("path=" + path);
                        log.trace("UserPrincipal = " + request.getUserPrincipal().getName());
                        log.trace("SessionID = " + request.getSession().getId());
                        log.trace("ContextPath = " + request.getContextPath());
@@ -51,16 +63,26 @@ public class ResourceProxyServlet extends HttpServlet implements ArgeoNames {
                        log.trace("User-Agent = " + request.getHeader("User-Agent"));
                }
 
-               Node node = proxy.proxy(jcrSession, path);
-               if (node == null)
-                       response.sendError(404);
-               else
-                       processResponse(nodePath, node, response);
+               Node node = null;
+               try {
+                       node = proxy.proxy(path);
+                       if (node == null)
+                               response.sendError(404);
+                       else
+                               processResponse(node, response);
+               } finally {
+                       if (node != null)
+                               try {
+                                       JcrUtils.logoutQuietly(node.getSession());
+                               } catch (RepositoryException e) {
+                                       // silent
+                               }
+               }
+
        }
 
        /** Retrieve the content of the node. */
-       protected void processResponse(String path, Node node,
-                       HttpServletResponse response) {
+       protected void processResponse(Node node, HttpServletResponse response) {
                Binary binary = null;
                InputStream in = null;
                try {
@@ -78,8 +100,12 @@ public class ResourceProxyServlet extends HttpServlet implements ArgeoNames {
                                contentType = "application/zip";
                        else if ("gz".equals(ext))
                                contentType = "application/x-gzip";
+                       else if ("bz2".equals(ext))
+                               contentType = "application/x-bzip2";
                        else if ("tar".equals(ext))
                                contentType = "application/x-tar";
+                       else if ("rpm".equals(ext))
+                               contentType = "application/x-redhat-package-manager";
                        else
                                contentType = "application/octet-stream";
                        contentType = contentType + ";name=\"" + fileName + "\"";
@@ -108,10 +134,6 @@ public class ResourceProxyServlet extends HttpServlet implements ArgeoNames {
                }
        }
 
-       public void setJcrSession(Session jcrSession) {
-               this.jcrSession = jcrSession;
-       }
-
        public void setProxy(ResourceProxy resourceProxy) {
                this.proxy = resourceProxy;
        }