You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2006/04/09 21:26:34 UTC

svn commit: r392809 - in /cocoon/trunk/core/cocoon-core: COB-INF/ COB-INF/sitemap.xmap COB-INF/test.xml META-INF/MANIFEST.MF META-INF/components.xml src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java

Author: reinhard
Date: Sun Apr  9 12:26:32 2006
New Revision: 392809

URL: http://svn.apache.org/viewcvs?rev=392809&view=rev
Log:
Initial version of a sitemap servlet that uses the OSGiSpringECMFactory

Added:
    cocoon/trunk/core/cocoon-core/COB-INF/
    cocoon/trunk/core/cocoon-core/COB-INF/sitemap.xmap   (with props)
    cocoon/trunk/core/cocoon-core/COB-INF/test.xml   (with props)
    cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java   (with props)
Modified:
    cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF
    cocoon/trunk/core/cocoon-core/META-INF/components.xml

Added: cocoon/trunk/core/cocoon-core/COB-INF/sitemap.xmap
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-core/COB-INF/sitemap.xmap?rev=392809&view=auto
==============================================================================
--- cocoon/trunk/core/cocoon-core/COB-INF/sitemap.xmap (added)
+++ cocoon/trunk/core/cocoon-core/COB-INF/sitemap.xmap Sun Apr  9 12:26:32 2006
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2006 The Apache Software Foundation
+
+  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.
+-->
+<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
+
+  <map:pipelines>
+    <map:pipeline>
+      <map:match pattern="test">
+        <map:generate src="test.xml"/>
+        <map:serialize type="xml"/>
+      </map:match>
+      <map:match pattern="test1">
+        <map:generate src="test.xml"/>
+        <map:serialize type="xml"/>
+      </map:match>      
+    </map:pipeline>
+  </map:pipelines>
+
+</map:sitemap>
+

Propchange: cocoon/trunk/core/cocoon-core/COB-INF/sitemap.xmap
------------------------------------------------------------------------------
    svn:executable = *

Added: cocoon/trunk/core/cocoon-core/COB-INF/test.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-core/COB-INF/test.xml?rev=392809&view=auto
==============================================================================
--- cocoon/trunk/core/cocoon-core/COB-INF/test.xml (added)
+++ cocoon/trunk/core/cocoon-core/COB-INF/test.xml Sun Apr  9 12:26:32 2006
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2006 The Apache Software Foundation
+
+  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.
+-->
+<test>OSGi</test>
\ No newline at end of file

Propchange: cocoon/trunk/core/cocoon-core/COB-INF/test.xml
------------------------------------------------------------------------------
    svn:executable = *

Modified: cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF?rev=392809&r1=392808&r2=392809&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF (original)
+++ cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF Sun Apr  9 12:26:32 2006
@@ -116,7 +116,6 @@
  org.apache.cocoon.transformation.helpers,
  org.apache.cocoon.transformation.pagination,
  org.apache.cocoon.util,
- org.apache.cocoon.util.jmx,
  org.apache.cocoon.util.jxpath,
  org.apache.cocoon.util.location,
  org.apache.cocoon.util.test,

Modified: cocoon/trunk/core/cocoon-core/META-INF/components.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-core/META-INF/components.xml?rev=392809&r1=392808&r2=392809&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/META-INF/components.xml (original)
+++ cocoon/trunk/core/cocoon-core/META-INF/components.xml Sun Apr  9 12:26:32 2006
@@ -36,4 +36,16 @@
       bind="setSettings"/>      
   </scr:component>  
   
+  <scr:component name="org.apache.cocoon.core.sitemap.SitemapServlet">
+    <scr:implementation class="org.apache.cocoon.sitemap.SitemapServlet"/>  
+    <scr:service>
+      <scr:provide interface="javax.servlet.Servlet"/>
+    </scr:service>    
+    <scr:property name="path" value="/sitemap-test"/>
+    <scr:property name="sitemapPath" value="/COB-INF/sitemap.xmap"/>            
+    <scr:reference name="beanFactory"
+      interface="org.apache.cocoon.core.osgi.CocoonSpringBeanRegistry"
+      bind="setBeanFactory"/>         
+  </scr:component>  
+  
 </components>

Added: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java?rev=392809&view=auto
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java (added)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java Sun Apr  9 12:26:32 2006
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ * 
+ * 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.apache.cocoon.sitemap;
+
+import java.io.IOException;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.DefaultConfiguration;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.cocoon.ProcessingUtil;
+import org.apache.cocoon.Processor;
+import org.apache.cocoon.components.LifecycleHelper;
+import org.apache.cocoon.components.treeprocessor.TreeProcessor;
+import org.apache.cocoon.core.Settings;
+import org.apache.cocoon.core.osgi.CocoonSpringBeanRegistry;
+import org.apache.cocoon.environment.Context;
+import org.apache.cocoon.environment.Environment;
+import org.apache.cocoon.environment.http.HttpContext;
+import org.apache.cocoon.environment.http.HttpEnvironment;
+import org.apache.cocoon.environment.internal.EnvironmentHelper;
+import org.osgi.service.component.ComponentContext;
+
+/**
+ * @version $Id$
+ */
+public class SitemapServlet extends HttpServlet {
+
+	private static final String DEFAULT_CONTAINER_ENCODING = "ISO-8859-1";
+	private static final String DEFAULT_SITEMAP_PATH = "/COB-INF/sitemap.xmap";	
+	private static final String SITEMAP_PATH_PROPERTY = "sitemapPath";
+
+	private CocoonSpringBeanRegistry beanFactory;
+	private Logger logger;
+	private String sitemapPath = DEFAULT_SITEMAP_PATH;
+    protected Context cocoonContext;
+	private Processor processor;	
+	private Settings settings;
+
+    public void init(ServletConfig config) throws ServletException {
+    	super.init(config);
+    	
+    	// get components from the beanFactory
+    	this.logger = (Logger) this.beanFactory.getBean("org.apache.avalon.framework.logger.Logger");
+    	this.settings = (Settings) this.beanFactory.getBean(Settings.ROLE);
+        ServiceManager serviceManager = (ServiceManager) 
+    		this.beanFactory.getBean("org.apache.avalon.framework.service.ServiceManager");    	
+    	
+    	// create the Cocoon context out of the Servlet context
+        this.cocoonContext = new HttpContext(config.getServletContext());  
+        
+        // get the Avalon context
+        org.apache.avalon.framework.context.Context avalonContext = (org.apache.avalon.framework.context.Context) 
+        	this.beanFactory.getBean(ProcessingUtil.CONTEXT_ROLE);
+        
+        // create the processor
+        try {
+			TreeProcessor treeProcessor = (TreeProcessor) 
+				this.getClass().getClassLoader().loadClass(TreeProcessor.class.getName()).newInstance();
+            treeProcessor.setBeanFactory(this.beanFactory);			
+            this.processor = (Processor) LifecycleHelper.setupComponent(treeProcessor,
+                    this.logger,
+                    avalonContext,
+                    serviceManager,
+                    createTreeProcessorConfiguration());
+		} catch (Exception e) {
+            throw new ServletException(e);
+		}
+		
+    }
+
+	private Configuration createTreeProcessorConfiguration() {
+		DefaultConfiguration treeProcessorConf = new DefaultConfiguration("treeProcessorConfiguration");
+        treeProcessorConf.setAttribute("check-reload", true);
+        treeProcessorConf.setAttribute("file", this.sitemapPath);
+        
+//        DefaultConfiguration sitemapFileConf = new DefaultConfiguration("file");
+//        sitemapFileConf.setValue(this.sitemapPath);
+//        treeProcessorConf.addChild(sitemapFileConf);
+		return treeProcessorConf;
+	}	
+    
+	protected void service(HttpServletRequest request, HttpServletResponse response) 
+		throws ServletException, IOException {
+		
+		Environment environment = createCocoonEnvironment(request, response);
+		try {
+	        EnvironmentHelper.enterProcessor(this.processor, environment);			
+			this.processor.process(environment);
+		} catch (Exception e) {
+			throw new ServletException(e);
+		} finally { 
+            EnvironmentHelper.leaveProcessor();	
+	    } 
+	}    
+	
+    protected Environment createCocoonEnvironment(HttpServletRequest req, 
+    		HttpServletResponse res) throws IOException  {
+    	
+		String uri = req.getPathInfo();
+
+		String formEncoding = req.getParameter("cocoon-form-encoding");
+		if (formEncoding == null) {
+			formEncoding = this.settings.getFormEncoding();
+		}
+		HttpEnvironment env = new HttpEnvironment(uri, req, res, this.getServletContext(),
+				this.cocoonContext, DEFAULT_CONTAINER_ENCODING, formEncoding);
+		
+		env.enableLogging(this.logger);
+		return env;
+	}
+
+	protected void setBeanFactory(CocoonSpringBeanRegistry beanFactory) {
+		this.beanFactory = beanFactory;
+	}
+	
+	public void setSitemapPath(String sitemapPath) {
+		this.sitemapPath = sitemapPath;
+	}	
+
+	protected void activate(ComponentContext componentContext) throws Exception {
+		this.setSitemapPath((String) componentContext.getProperties().get(SITEMAP_PATH_PROPERTY));			
+	}
+	
+}

Propchange: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java
------------------------------------------------------------------------------
    svn:executable = *