You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2007/12/21 14:27:25 UTC

svn commit: r606191 - /cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java

Author: vgritsenko
Date: Fri Dec 21 05:27:24 2007
New Revision: 606191

URL: http://svn.apache.org/viewvc?rev=606191&view=rev
Log:
sitemap path, reload check, and pass through parameters are configurable via servlet init parameters

Modified:
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java

Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java?rev=606191&r1=606190&r2=606191&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java Fri Dec 21 05:27:24 2007
@@ -28,22 +28,42 @@
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.commons.lang.BooleanUtils;
 import org.springframework.beans.factory.BeanCreationException;
 
 import org.apache.cocoon.Processor;
-import org.apache.cocoon.components.LifecycleHelper;
 import org.apache.cocoon.components.treeprocessor.TreeProcessor;
 import org.apache.cocoon.core.container.spring.avalon.AvalonUtils;
 import org.apache.cocoon.servlet.RequestUtil;
 
 /**
- * Use this servlet as entry point to Cocoon. It wraps the {@link TreeProcessor}
+ * Use this servlet as an entry point to Cocoon. It wraps the {@link TreeProcessor}
  * and delegates all requests to it.
  *
  * @version $Id$
  */
 public class SitemapServlet extends HttpServlet {
 
+    /**
+     * Name of the 'sitemap-path' servlet init parameter. Value should point
+     * to the location of sitemap file, defaults to '/sitemap.xmap'.
+     */
+    private static final String PARAM_SITEMAP_PATH = "sitemap-path";
+    private static final String DEFAULT_SITEMAP_PATH = "/sitemap.xmap";
+
+    /**
+     * Name of the 'check-reload' servlet init parameter. Value should be
+     * one of 'true', 'yes', 'false', 'no'.
+     */
+    private static final String PARAM_CHECK_RELOAD = "check-reload";
+
+    /**
+     * Name of the 'pass-through' servlet init parameter. Value should be
+     * one of 'true', 'yes', 'false', 'no'.
+     */
+    private static final String PARAM_PASS_THROUGH = "pass-through";
+
+
     protected RequestProcessor processor;
 
     /**
@@ -75,8 +95,6 @@
     }
 
     protected class RequestProcessor extends org.apache.cocoon.servlet.RequestProcessor {
-        private static final String DEFAULT_SITEMAP_PATH = "/sitemap.xmap";
-        private static final String SITEMAP_PATH_PROPERTY = "sitemapPath";
 
         public RequestProcessor(ServletContext servletContext) {
             super(servletContext);
@@ -88,25 +106,23 @@
 
         protected Processor getProcessor() {
             // read tree processor configuration
-            Configuration processorConfig;
-            ServiceManager serviceManager =
-                (ServiceManager) this.cocoonBeanFactory.getBean(AvalonUtils.SERVICE_MANAGER_ROLE);
+            Configuration config;
             try {
-                processorConfig = createTreeProcessorConfiguration(this.servletContext);
+                config = createTreeProcessorConfiguration(this.servletContext);
             } catch (IOException e) {
                 throw new BeanCreationException("Could not create configuration for TreeProcesoor", e);
             }
 
+            ServiceManager serviceManager =
+                (ServiceManager) this.cocoonBeanFactory.getBean(AvalonUtils.SERVICE_MANAGER_ROLE);
+
             // create the tree processor
             Processor processor;
             try {
-                TreeProcessor treeProcessor = new TreeProcessor();
-                // TODO (DF/RP) The treeProcessor doesn't need to be a managed component at all.
-                processor = (Processor) LifecycleHelper.setupComponent(treeProcessor,
-                                                                       getLogger(),
-                                                                       null,
-                                                                       serviceManager,
-                                                                       processorConfig);
+                processor = new TreeProcessor();
+                ContainerUtil.service(processor, serviceManager);
+                ContainerUtil.configure(processor, config);
+                ContainerUtil.initialize(processor);
             } catch (Exception e) {
                 throw new BeanCreationException("Could not create TreeProcessor", e);
             }
@@ -134,26 +150,41 @@
          */
         private Configuration createTreeProcessorConfiguration(ServletContext servletContext)
         throws IOException {
-            // get the uri to the sitemap location and resolve it in the curent servlet context,
-            // observere that it is very important that the Treeprocessor get a resolved uri,
-            // just providing a relative uri relative to the current context is not enough
+            // Get the uri to the sitemap location and resolve it in the curent servlet context.
+            // Please note that it is very important that the Treeprocessor receives a resolved
+            // uri, simply providing a uri relative to the current context is not enough
             // and doesn't work
-            String sitemapPath = servletContext.getInitParameter(SITEMAP_PATH_PROPERTY);
+            String sitemapPath = getInitParameter(PARAM_SITEMAP_PATH);
             if (sitemapPath == null) {
                 sitemapPath = DEFAULT_SITEMAP_PATH;
             }
 
-            String sitemapURI;
             URL uri = servletContext.getResource(sitemapPath);
             if (uri == null) {
                 throw new IOException("Couldn't find the sitemap " + sitemapPath);
             }
-            sitemapURI = uri.toExternalForm();
+            String sitemapURI = uri.toExternalForm();
+
+            // Create configuration
+            DefaultConfiguration config = new DefaultConfiguration("sitemap");
+            config.setAttribute("file", sitemapURI);
+
+            // Set check-reload attribute
+            String checkReloadStr = getInitParameter(PARAM_CHECK_RELOAD);
+            if (checkReloadStr != null) {
+                boolean checkReload = BooleanUtils.toBoolean(checkReloadStr);
+                config.setAttribute("check-reload", checkReload);
+            }
+
+            // Set pass-through attribute
+            String passThroughStr = getInitParameter(PARAM_PASS_THROUGH);
+            if (passThroughStr != null) {
+                boolean passThrough = BooleanUtils.toBoolean(passThroughStr);
+                config.setAttribute("pass-through", passThrough);
+            }
 
-            DefaultConfiguration treeProcessorConf = new DefaultConfiguration("treeProcessorConfiguration");
-            treeProcessorConf.setAttribute("check-reload", true);
-            treeProcessorConf.setAttribute("file", sitemapURI);
-            return treeProcessorConf;
+            // Done
+            return config;
         }
     }
 }