You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2007/10/10 14:33:24 UTC

svn commit: r583452 - in /roller/branches/roller_4.1_dev/apps/weblogger: src/java/org/apache/roller/weblogger/business/ src/java/org/apache/roller/weblogger/ui/rendering/model/ src/java/org/apache/roller/weblogger/ui/rendering/servlets/ src/java/org/ap...

Author: snoopdave
Date: Wed Oct 10 05:33:23 2007
New Revision: 583452

URL: http://svn.apache.org/viewvc?rev=583452&view=rev
Log:
OpenSearch support for http://opensource.atlassian.com/projects/roller/browse/ROL-1545

Added:
    roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/webservices/opensearch/
    roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java
    roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/site-search-atom.vm
Modified:
    roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java
    roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java
    roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/model/URLModel.java
    roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java
    roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java
    roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/cache/WeblogFeedCache.java
    roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/weblog-search-atom.vm
    roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/web.xml

Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java?rev=583452&r1=583451&r2=583452&view=diff
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java (original)
+++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java Wed Oct 10 05:33:23 2007
@@ -23,7 +23,6 @@
 import java.util.Map;
 import org.apache.commons.lang.StringUtils;
 import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
-import org.apache.roller.weblogger.pojos.WeblogTheme;
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.util.URLUtilities;
 
@@ -360,6 +359,52 @@
         }
         
         return url.toString();
+    }
+
+    
+    public String getWeblogSearchFeedURLTemplate(Weblog weblog) {
+        if(weblog == null) {
+            return null;
+        }
+        
+        StringBuffer url = new StringBuffer();
+        
+        url.append(getWeblogURL(weblog, null, true));
+        url.append("feed/entries/atom");
+        
+        Map params = new HashMap();
+        params.put("q", "{searchTerms}");
+        params.put("page", "{startPage?}");
+        
+        return url.toString() + URLUtilities.getQueryString(params);
+    }
+
+    
+    public String getWeblogSearchPageURLTemplate(Weblog weblog) {
+        if(weblog == null) {
+            return null;
+        }
+        
+        StringBuffer url = new StringBuffer();
+        
+        url.append(getWeblogURL(weblog, null, true));
+        url.append("search");
+        
+        Map params = new HashMap();
+        params.put("q", "{searchTerms}");
+        params.put("page", "{startPage?}");
+        
+        return url.toString() + URLUtilities.getQueryString(params);
+    }
+
+
+    public String getOpenSearchSiteURL() {
+        return WebloggerRuntimeConfig.getAbsoluteContextURL() + "/roller-services/opensearch/";
+    }
+
+
+    public String getOpenSearchWeblogURL(String weblogHandle) {
+        return WebloggerRuntimeConfig.getAbsoluteContextURL() + "/roller-services/opensearch/" + weblogHandle;
     }
     
 }

Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java?rev=583452&r1=583451&r2=583452&view=diff
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java (original)
+++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java Wed Oct 10 05:33:23 2007
@@ -82,9 +82,36 @@
     public String getWeblogConfigURL(String weblogHandle,
                                                   boolean absolute);
     
+    
+    /**
+     * URL for OpenSearch descriptor file for site.
+     */
+    public String getOpenSearchSiteURL();
+    
+
+    /**
+     * URL for OpenSearch descriptor file for weblog.
+     */
+    public String getOpenSearchWeblogURL(String weblogHandle);
+
+    
+    /**
+     * Get OpenSearch compatible search URL template for weblog search feed.
+     */
+    public String getWeblogSearchFeedURLTemplate(Weblog weblog);
+
+    
+    /**
+     * Get OpenSearch compatible search URL template for weblog search page.
+     */
+    public String getWeblogSearchPageURLTemplate(Weblog weblog);
+
+    
     public String getXmlrpcURL(boolean absolute);
     
+    
     public String getAtomProtocolURL(boolean absolute);
+    
     
     /**
      * Get root url for a given weblog.  Optionally for a certain locale.

Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/model/URLModel.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/model/URLModel.java?rev=583452&r1=583451&r2=583452&view=diff
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/model/URLModel.java (original)
+++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/model/URLModel.java Wed Oct 10 05:33:23 2007
@@ -229,7 +229,6 @@
         return urlStrategy.getWeblogSearchURL(weblog, locale, null, null, -1, false);
     }
     
-    
     public String search(String query, int pageNum) {
         return urlStrategy.getWeblogSearchURL(weblog, locale, query, null, pageNum, false);
     }
@@ -243,6 +242,14 @@
         return urlStrategy.getWeblogSearchURL(weblog, locale, query, catPath, pageNum, true);
     }        
     
+    public String getOpenSearchSite() {
+        return urlStrategy.getOpenSearchSiteURL();
+    }
+        
+    public String getOpenSearchWeblog() {
+        return urlStrategy.getOpenSearchWeblogURL(weblog.getHandle());
+    }
+        
     public String page(String pageLink) {
         return urlStrategy.getWeblogPageURL(weblog, locale, pageLink, null, null, null, null, -1, true);
     }

Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java?rev=583452&r1=583451&r2=583452&view=diff
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java (original)
+++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/FeedServlet.java Wed Oct 10 05:33:23 2007
@@ -216,8 +216,16 @@
         String pageId = null;
         try {
             // determine what template to render with
-            if (WebloggerRuntimeConfig.isSiteWideWeblog(weblog.getHandle())) {
+            boolean siteWide = WebloggerRuntimeConfig.isSiteWideWeblog(weblog.getHandle());
+            if ("entries".equals(feedRequest.getType()) && feedRequest.getTerm() != null) {
+                pageId = "templates/feeds/site-search-atom.vm";                
+
+            } else if (siteWide && "entries".equals(feedRequest.getType()) && feedRequest.getTerm() != null) {
+                pageId = "templates/feeds/weblog-search-atom.vm";                
+                
+            } else if (siteWide) {
                 pageId = "templates/feeds/site-"+feedRequest.getType()+"-"+feedRequest.getFormat()+".vm";
+                
             } else {
                 pageId = "templates/feeds/weblog-"+feedRequest.getType()+"-"+feedRequest.getFormat()+".vm";
             }
@@ -235,7 +243,7 @@
 
             // Load special models for site-wide blog
 
-            if(WebloggerRuntimeConfig.isSiteWideWeblog(weblog.getHandle())) {
+            if (siteWide) {
                 String siteModels = WebloggerConfig.getProperty("rendering.siteModels");
                 ModelLoader.loadModels(siteModels, model, initData, true);
             }
@@ -243,8 +251,8 @@
             // Load weblog custom models
             ModelLoader.loadCustomModels(weblog, model, initData);
             
-            if("entries".equals(feedRequest.getType()) && feedRequest.getTerm() != null) {
-                pageId = "templates/feeds/weblog-search-atom.vm";                
+            // Load search models if search feed
+            if ("entries".equals(feedRequest.getType()) && feedRequest.getTerm() != null) {               
                 ModelLoader.loadModels(SearchResultsFeedModel.class.getName(), model, initData, true);
             }                        
 

Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java?rev=583452&r1=583451&r2=583452&view=diff
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java (original)
+++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/SearchServlet.java Wed Oct 10 05:33:23 2007
@@ -34,7 +34,6 @@
 import org.apache.roller.weblogger.config.WebloggerConfig;
 import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
 import org.apache.roller.weblogger.business.WebloggerFactory;
-import org.apache.roller.weblogger.business.UserManager;
 import org.apache.roller.weblogger.pojos.ThemeTemplate;
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.ui.rendering.Renderer;

Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/cache/WeblogFeedCache.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/cache/WeblogFeedCache.java?rev=583452&r1=583451&r2=583452&view=diff
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/cache/WeblogFeedCache.java (original)
+++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/cache/WeblogFeedCache.java Wed Oct 10 05:33:23 2007
@@ -147,7 +147,7 @@
      * Generate a cache key from a parsed weblog feed request.
      * This generates a key of the form ...
      *
-     * <handle>/<type>/<format>/[/category][/language][/excerpts]
+     * <handle>/<type>/<format>/<term>[/category][/language][/excerpts]
      *
      * examples ...
      *
@@ -165,6 +165,7 @@
         
         key.append("/").append(feedRequest.getType());
         key.append("/").append(feedRequest.getFormat());
+        key.append("/").append(feedRequest.getTerm());
         
         if(feedRequest.getWeblogCategoryName() != null) {
             String cat = feedRequest.getWeblogCategoryName();

Added: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java?rev=583452&view=auto
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java (added)
+++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/webservices/opensearch/OpenSearchServlet.java Wed Oct 10 05:33:23 2007
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * 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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.roller.weblogger.webservices.opensearch;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.URLStrategy;
+import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
+import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.util.Utilities;
+
+
+/**
+ * Return OpenSearch descriptor that describes Roller's search facilities.
+ * @author Dave Johnson (<a href="mailto:davidm.johnson@sun.com">davidm.johnson@sun.com</a>)
+ */
+public class OpenSearchServlet extends HttpServlet {
+    
+    public void doGet(
+            HttpServletRequest request, HttpServletResponse response) 
+            throws ServletException, IOException {
+        
+        String[] pathInfo = new String[0];
+        String handle = null;
+        
+        // Will return descriptor for searching specified blog
+        if (request.getPathInfo() != null) {
+            pathInfo = Utilities.stringToStringArray(request.getPathInfo(), "/");
+        }
+
+        if (pathInfo.length == 0) {
+            // URL format: [context]/roller-services/opensearch
+            handle = WebloggerRuntimeConfig.getProperty("site.frontpage.weblog.handle");
+
+        } else if (pathInfo.length == 1) {
+            // URL format: [context]/roller-services/opensearch/[weblog-handle]
+            handle = pathInfo[0];
+
+        } else {
+            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Malformed URL");
+            return;
+        }
+
+        String shortName = null;
+        String description = null;
+        String contact = null;
+        String searchFeed = null;
+        String searchPage = null;
+        
+        URLStrategy strat = WebloggerFactory.getWeblogger().getUrlStrategy();
+        Weblog weblog = null;
+        try {
+            weblog = WebloggerFactory.getWeblogger().getWeblogManager().getWeblogByHandle(handle);
+        } catch (WebloggerException ex) {
+            throw new ServletException("ERROR: fetching specified weblog");
+        }
+        searchPage = StringEscapeUtils.escapeXml(
+                strat.getWeblogSearchPageURLTemplate(weblog));
+        searchFeed = StringEscapeUtils.escapeXml(
+                strat.getWeblogSearchFeedURLTemplate(weblog));
+
+        boolean siteWide = WebloggerRuntimeConfig.isSiteWideWeblog(handle);
+        if (siteWide) {
+            shortName = "[Search Descriptor] " + StringEscapeUtils.escapeXml(
+                    WebloggerRuntimeConfig.getProperty("site.shortName"));
+            description = StringEscapeUtils.escapeXml(
+                    WebloggerRuntimeConfig.getProperty("site.description"));
+            contact = StringEscapeUtils.escapeXml(
+                    WebloggerRuntimeConfig.getProperty("site.adminemail"));
+                    
+        } else {
+            shortName = StringEscapeUtils.escapeXml(weblog.getName());
+            description = StringEscapeUtils.escapeXml(weblog.getDescription());
+            contact = StringEscapeUtils.escapeXml(weblog.getEmailAddress());
+        }
+
+        response.setContentType("application/opensearchdescription+xml");
+        
+        PrintWriter pw = new PrintWriter(response.getWriter());
+        pw.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+        pw.println("<OpenSearchDescription xmlns=\"http://a9.com/-/spec/opensearch/1.1/\">");
+        pw.println("   <ShortName>" + shortName + "</ShortName>");
+        pw.println("   <Description>" + description + "</Description>");
+        pw.println("   <Contact>" + contact + "</Contact>");
+        pw.println("   <Url type=\"application/atom+xml\" ");
+        pw.println("      template=\"" + searchFeed + "\"/>");
+        pw.println("   <Url type=\"application/rss+xml\" ");
+        pw.println("      template=\"" + searchPage + "\"/>");
+        pw.println("</OpenSearchDescription>");
+        pw.flush();            
+        pw.close();
+    }
+}
+

Added: roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/site-search-atom.vm
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/site-search-atom.vm?rev=583452&view=auto
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/site-search-atom.vm (added)
+++ roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/site-search-atom.vm Wed Oct 10 05:33:23 2007
@@ -0,0 +1,41 @@
+#**
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  The ASF licenses this file to You
+  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+
+*#<?xml version="1.0" encoding='utf-8'?>
+#if($config.feedStyle)<?xml-stylesheet type="text/xsl" href="$url.absoluteSite/roller-ui/styles/atom.xsl" media="screen"?>#end
+#set($pager = $model.searchResultsPager)
+<feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app">
+
+    <title type="html">$utils.escapeXML($config.siteName)</title>
+    <subtitle type="html">$utils.escapeXML($config.siteDescription)</subtitle>
+    <id>$utils.escapeXML($url.feed.entries.search($model.term, $model.categoryPath))</id>
+
+    <link rel="self" type="application/atom+xml" 
+        href="$utils.escapeXML($url.feed.entries.search($model.term, $model.categoryPath))" />
+    
+    <link rel="alternate" type="text/html" 
+        href="$utils.escapeXML($url.absoluteSearch($model.term, $model.categoryPath, $model.page))" />
+    
+    <link rel="search" type="application/opensearchdescription+xml" 
+        href="$utils.escapeXML($url.openSearchSite())" />
+    <opensearch:Query role="request" searchTerms="$model.term" startPage="1" />
+
+    #showFeedHistory($pager)
+    <updated>$utils.formatIso8601Date($model.weblog.lastModified)</updated>
+    <generator uri="http://roller.apache.org" version="$config.rollerVersion ($config.rollerBuildTimestamp:$config.rollerBuildUser)">Apache Roller</generator>
+    #showEntriesAtom10($pager.items)
+</feed>

Modified: roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/weblog-search-atom.vm
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/weblog-search-atom.vm?rev=583452&r1=583451&r2=583452&view=diff
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/weblog-search-atom.vm (original)
+++ roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/velocity/templates/feeds/weblog-search-atom.vm Wed Oct 10 05:33:23 2007
@@ -18,15 +18,28 @@
 *#<?xml version="1.0" encoding='utf-8'?>
 #if($config.feedStyle)<?xml-stylesheet type="text/xsl" href="$url.absoluteSite/roller-ui/styles/atom.xsl" media="screen"?>#end
 #set($pager = $model.searchResultsPager)
-<feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://purl.org/atom/app#">
+<feed xmlns="http://www.w3.org/2005/Atom" 
+      xmlns:app="http://www.w3.org/2007/app"
+      xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
+
     <title type="html">$utils.escapeXML($model.weblog.name)</title>
     <subtitle type="html">$utils.escapeXML($model.weblog.description)</subtitle>
     <id>$utils.escapeXML($url.feed.entries.search($model.term, $model.categoryPath))</id>
-    <link rel="self" type="application/atom+xml" href="$utils.escapeXML($url.feed.entries.search($model.term, $model.categoryPath))" />
-    <link rel="alternate" type="text/html" href="$utils.escapeXML($url.absoluteSearch($model.term, $model.categoryPath, $model.page))" />
+
+    <link rel="self" type="application/atom+xml" 
+        href="$utils.escapeXML($url.feed.entries.search($model.term, $model.categoryPath))" />
+
+    <link rel="alternate" type="text/html" 
+        href="$utils.escapeXML($url.absoluteSearch($model.term, $model.categoryPath, $model.page))" />
+
+    <link rel="search" type="application/opensearchdescription+xml" 
+        href="$utils.escapeXML($url.openSearchWeblog())" />
+    <opensearch:Query role="request" searchTerms="$model.term" startPage="1" />
+
     #showFeedHistory($pager)
     <updated>$utils.formatIso8601Date($model.weblog.lastModified)</updated>
-    <generator uri="http://rollerweblogger.org" version="$config.rollerVersion ($config.rollerBuildTimestamp:$config.rollerBuildUser)">Apache Roller (incubating)</generator>
+    <generator uri="http://roller.apache.org" version="$config.rollerVersion ($config.rollerBuildTimestamp:$config.rollerBuildUser)">Apache Roller</generator>
+
     #showEntriesAtom10($pager.items)
 </feed>
 

Modified: roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/web.xml?rev=583452&r1=583451&r2=583452&view=diff
==============================================================================
--- roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/web.xml (original)
+++ roller/branches/roller_4.1_dev/apps/weblogger/web/WEB-INF/web.xml Wed Oct 10 05:33:23 2007
@@ -231,6 +231,12 @@
     </servlet>
     
     <servlet>
+        <servlet-name>OpenSearchServlet</servlet-name>
+        <servlet-class>org.apache.roller.weblogger.webservices.opensearch.OpenSearchServlet</servlet-class>
+        <load-on-startup>10</load-on-startup>
+    </servlet>
+    
+    <servlet>
         <servlet-name>CommentServlet</servlet-name>
         <servlet-class>org.apache.roller.weblogger.ui.rendering.servlets.CommentServlet</servlet-class>
         <load-on-startup>7</load-on-startup>
@@ -426,6 +432,12 @@
         <url-pattern>/roller-services/tagdata/*</url-pattern>
     </servlet-mapping>
     
+    <servlet-mapping>
+        <servlet-name>OpenSearchServlet</servlet-name>
+        <url-pattern>/roller-services/opensearch/*</url-pattern>
+    </servlet-mapping>
+    
+
     <!-- Redirect Support for pre-3.0 urls -->
     <servlet-mapping>
         <servlet-name>RedirectServlet</servlet-name>