Author: markt
Date: Tue Sep 18 18:58:26 2012
New Revision: 1387318

URL: http://svn.apache.org/viewvc?rev=1387318&view=rev
Log:
Make it possible to configure the WebResourceRoot in a context.xml file (tested 
with default and custom implementation)

Modified:
    tomcat/sandbox/trunk-resources/java/org/apache/catalina/WebResourceRoot.java
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/core/StandardContext.java
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/loader/WebappClassLoader.java
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/ContextRuleSet.java
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/LocalStrings.properties
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/StandardRoot.java
    
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TesterWebResourceRoot.java

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/WebResourceRoot.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/WebResourceRoot.java?rev=1387318&r1=1387317&r2=1387318&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/WebResourceRoot.java 
(original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/WebResourceRoot.java 
Tue Sep 18 18:58:26 2012
@@ -172,12 +172,6 @@ public interface WebResourceRoot extends
     boolean write(String path, InputStream is);
 
     /**
-     * Obtain the unique name for the Context with which these resources are
-     * associated (for logging etc).
-     */
-    String getContextName();
-
-    /**
      *
      * @param url   Identifies the root of the new {@link WebResourceSet}. It
      *              must point to a JAR, directory or file.
@@ -215,13 +209,29 @@ public interface WebResourceRoot extends
     void createWebResourceSet(ResourceSetType type, String base,
             String webAppMount, String internalPath);
 
+
     /**
-     *
-     * @return
+     * Obtain the web application this WebResourceRoot is associated with.
+     */
+    Context getContext();
+
+    /**
+     * Set the web application this WebResourceRoot is associated with.
      */
-    boolean getAddWebinfClassesResources();
+    void setContext(Context context);
 
+    /**
+     * Configure if this resources allow the use of symbolic links.
+     *
+     * @param allowLinking  <code>true</code> if symbolic links are allowed.
+     */
     void setAllowLinking(boolean allowLinking);
+
+    /**
+     * Determine if this resources allow the use of symbolic links.
+     *
+     * @return  <code>true</code> if symbolic links are allowed
+     */
     boolean getAllowLinking();
 
     public static enum ResourceSetType {

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/core/StandardContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/core/StandardContext.java?rev=1387318&r1=1387317&r2=1387318&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/core/StandardContext.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/core/StandardContext.java
 Tue Sep 18 18:58:26 2012
@@ -2455,6 +2455,12 @@ public class StandardContext extends Con
                 return;
 
             this.resources = resources;
+            if (oldResources != null) {
+                oldResources.setContext(null);
+            }
+            if (resources != null) {
+                resources.setContext(this);
+            }
 
             support.firePropertyChange("resources", oldResources,
                     resources);

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/loader/WebappClassLoader.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1387318&r1=1387317&r2=1387318&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/loader/WebappClassLoader.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/loader/WebappClassLoader.java
 Tue Sep 18 18:58:26 2012
@@ -489,7 +489,7 @@ public class WebappClassLoader
         if (resources == null) {
             return "Unknown";
         } else {
-            return resources.getContextName();
+            return resources.getContext().getName();
         }
     }
 

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/ContextRuleSet.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/ContextRuleSet.java?rev=1387318&r1=1387317&r2=1387318&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/ContextRuleSet.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/ContextRuleSet.java
 Tue Sep 18 18:58:26 2012
@@ -164,12 +164,12 @@ public class ContextRuleSet extends Rule
         digester.addRuleSet(new RealmRuleSet(prefix + "Context/"));
 
         digester.addObjectCreate(prefix + "Context/Resources",
-                                 "org.apache.naming.resources.FileDirContext",
+                                 
"org.apache.catalina.webresources.StandardRoot",
                                  "className");
         digester.addSetProperties(prefix + "Context/Resources");
         digester.addSetNext(prefix + "Context/Resources",
                             "setResources",
-                            "javax.naming.directory.DirContext");
+                            "org.apache.catalina.WebResourceRoot");
 
         digester.addObjectCreate(prefix + "Context/ResourceLink",
                 "org.apache.catalina.deploy.ContextResourceLink");

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java?rev=1387318&r1=1387317&r2=1387318&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java
 Tue Sep 18 18:58:26 2012
@@ -81,7 +81,7 @@ public class DirResourceSet extends Abst
 
         this.webAppMount = webAppMount;
 
-        if (root.getAddWebinfClassesResources()) {
+        if (root.getContext().getAddWebinfClassesResources()) {
             WebResource unpackedResourceJar =
                     getResource("/WEB-INF/classes/META-INF/resources");
             if (unpackedResourceJar.exists()) {

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/LocalStrings.properties?rev=1387318&r1=1387317&r2=1387318&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/LocalStrings.properties
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/LocalStrings.properties
 Tue Sep 18 18:58:26 2012
@@ -30,4 +30,5 @@ standardRoot.checkStateNotStarted=The re
 standardRoot.createInvalidFile=Unable to create WebResourceSet from [{0}]
 standardRoot.createNoFileResourceSet=The FileResourceSet feature has not yet 
been implemented
 standardRoot.createUnknownType=Unable to create WebResourceSet of unknown type 
[{0}]
+standardRoot.noContext=A Context has not been configured for this 
WebResourceRoot
 standardRoot.startInvalidMain=The main resource set specified [{0}] is not 
valid
\ No newline at end of file

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/StandardRoot.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/StandardRoot.java?rev=1387318&r1=1387317&r2=1387318&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/StandardRoot.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/StandardRoot.java
 Tue Sep 18 18:58:26 2012
@@ -54,7 +54,7 @@ public class StandardRoot extends Lifecy
     protected static final StringManager sm =
             StringManager.getManager(Constants.Package);
 
-    private final Context context;
+    private Context context;
     private boolean allowLinking = false;
     private ArrayList<WebResourceSet> preResources = new ArrayList<>();
     private WebResourceSet main;
@@ -73,6 +73,17 @@ public class StandardRoot extends Lifecy
     }
 
 
+    /**
+     * Creates a new standard implementation of {@link WebResourceRoot}. A no
+     * argument constructor is required for this to work with the digester.
+     * {@link #setContext(Context)} must be called before this component is
+     * initialized.
+     *
+     */
+    public StandardRoot() {
+        // NO-OP
+    }
+
     public StandardRoot(Context context) {
         this.context = context;
     }
@@ -262,13 +273,13 @@ public class StandardRoot extends Lifecy
     }
 
     @Override
-    public String getContextName() {
-        return context.getName();
+    public Context getContext() {
+        return context;
     }
 
     @Override
-    public boolean getAddWebinfClassesResources() {
-        return context.getAddWebinfClassesResources();
+    public void setContext(Context context) {
+        this.context = context;
     }
 
     private void checkState() {
@@ -316,6 +327,16 @@ public class StandardRoot extends Lifecy
     // --------------------------------------------------------------- 
Lifecycle
 
     @Override
+    protected void initInternal() throws LifecycleException {
+        if (context == null) {
+            throw new IllegalStateException(
+                    sm.getString("standardRoot.noContext"));
+        }
+
+        super.initInternal();
+    }
+
+    @Override
     protected void startInternal() throws LifecycleException {
         String docBase = context.getDocBase();
 

Modified: 
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TesterWebResourceRoot.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TesterWebResourceRoot.java?rev=1387318&r1=1387317&r2=1387318&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TesterWebResourceRoot.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TesterWebResourceRoot.java
 Tue Sep 18 18:58:26 2012
@@ -20,6 +20,7 @@ import java.io.InputStream;
 import java.net.URL;
 import java.util.Set;
 
+import org.apache.catalina.Context;
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.LifecycleListener;
 import org.apache.catalina.LifecycleState;
@@ -112,11 +113,16 @@ public class TesterWebResourceRoot imple
     }
 
     @Override
-    public String getContextName() {
+    public Context getContext() {
         return null;
     }
 
     @Override
+    public void setContext(Context context) {
+        // NO-OP
+    }
+
+    @Override
     public void createWebResourceSet(ResourceSetType type, URL url,
             String webAppPath, String internalPath) {
         // NO-OP
@@ -129,11 +135,6 @@ public class TesterWebResourceRoot imple
     }
 
     @Override
-    public boolean getAddWebinfClassesResources() {
-        return false;
-    }
-
-    @Override
     public void setAllowLinking(boolean allowLinking) {
         // NO-OP
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to