Author: reto
Date: Tue May  4 16:15:04 2010
New Revision: 940931

URL: http://svn.apache.org/viewvc?rev=940931&view=rev
Log:
CLEREZZA-200 making it easier to serve static files from a jax-rs resource

Added:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/AbstractFileServer.java
Removed:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/util/StaticWebResource.java
Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/FileServer.java

Added: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/AbstractFileServer.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/AbstractFileServer.java?rev=940931&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/AbstractFileServer.java
 (added)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/AbstractFileServer.java
 Tue May  4 16:15:04 2010
@@ -0,0 +1,60 @@
+/*
+ *  Copyright 2010 reto.
+ * 
+ *  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.
+ *  under the License.
+ */
+
+package org.apache.clerezza.web.fileserver;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.WebApplicationException;
+import org.wymiwyg.commons.util.dirbrowser.PathNode;
+
+/**
+ * An abstract superclass of jax-rs resources serving files. Subclasses
+ * overwrite the <code>getPathNode</code>-method to return the root of their 
+ * hierachy.
+ *
+ * @author reto
+ */
+public abstract class AbstractFileServer {
+
+       /**
+        * This method return the root of the served hierarchy. For example
+        * if the instance is to server all Files in /var/www, this method would
+        * return an instance of 
org.wymiwyg.commons.util.dirbrowser.FilePathNode
+        * initialized with "/var/www".
+        *
+        * @return the root of the served hierarchy
+        */
+       protected abstract PathNode getRootNode();
+
+       @Path("{path:.*}")
+       @GET
+       public PathNode getNode(@PathParam("path") String path) {
+               String[] pathSections = path.split("/");
+               PathNode current = getRootNode();
+               for (String pathSection : pathSections) {
+                       current = current.getSubPath(pathSection);
+                       if (!current.exists()) {
+                               throw new WebApplicationException(404);
+                       }
+               }
+               return current;
+
+       }
+
+}

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/FileServer.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/FileServer.java?rev=940931&r1=940930&r2=940931&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/FileServer.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.web.fileserver/src/main/java/org/apache/clerezza/web/fileserver/FileServer.java
 Tue May  4 16:15:04 2010
@@ -18,35 +18,95 @@
  */
 package org.apache.clerezza.web.fileserver;
 
+import java.io.File;
+import java.net.URL;
 import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.WebApplicationException;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.wymiwyg.commons.util.dirbrowser.FilePathNode;
 import org.wymiwyg.commons.util.dirbrowser.PathNode;
 
 /**
+ * A utility class providing a FileServer that can be configured in different 
+ * ways. It provides an alternative to {...@link AbstractFileServer} for jax-rs
+ * resources serviceng static files to override.
  *
  * @author reto
  */
 @Path("/")
-public class FileServer {
-       private PathNode pathNode;
+public class FileServer extends AbstractFileServer {
+       private PathNode rootPathNode;
 
+       /**
+        * Construct a new instance that has to be configured using one of the 
+        * configure-methods.
+        */
+       public FileServer() {}
+
+       /**
+        * creates a new instance configured with specified pathnode as root
+        *
+        * @param pathNode the root of the PathNode hierarchy
+        */
        public FileServer(PathNode pathNode) {
-               this.pathNode = pathNode;
+               this.rootPathNode = pathNode;
        }
 
-       @Path("{path}")
-       public PathNode getNode(@PathParam("path") String path) {
-               String[] pathSections = path.split("/");
-               PathNode current = pathNode;
-               for (String pathSection : pathSections) {
-                       current = current.getSubPath(pathSection);
-                       if (!current.exists()) {
-                               throw new WebApplicationException(404);
-                       }
-               }
-               return current;
 
+       /**
+        * configures the instance with the specified PathNode
+        *
+        * @param pathNode the root of the PathNode hierarchy
+        */
+       public void configure(PathNode pathNode) {
+               this.rootPathNode = pathNode;
+       }
+
+       /**
+        * Configures the instance to use the 'staticweb' folder next to 
(sub-)class
+        * in the bundle associated to the specified context.
+        *
+        * @param context The scr component context of the bundle containing the
+        *              'staticweb' directory where the subclass is located.
+        */
+       public void configure(BundleContext context) {
+               configure(context, "staticweb");
+       }
+
+       /**
+        * Sets up a path in a bundle or file system to be exposed over a
+        * <code>org.apache.clerezza.web.fileserver.FileServer</code>. The path 
is
+        * relative to the locationof the class.
+        *
+        * @param context The bundle context of the bundle containing the path.
+        * @param path the path where the file are to be exposed
+        */
+       public void configure(BundleContext context, String path) {
+               PathNode pathNode;
+               Bundle bundle = context.getBundle();
+               URL resourceDir = getClass().getResource(path);
+               pathNode = new BundlePathNode(bundle, resourceDir.getPath());
+               configure(pathNode);
+       }
+       /**
+        * configures the instance to use the specified directory as root
+        *
+        * @param rootDir the root of the serverd hierarchy
+        */
+       public void configure(File rootDir) {
+               configure(new FilePathNode(rootDir));
+       }
+
+       /**
+        * resets the configuration
+        */
+       public void reset() {
+               rootPathNode = null;
+       }
+
+       @Override
+       protected PathNode getRootNode() {
+               return rootPathNode;
        }
 
 }


Reply via email to