You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2008/01/24 06:38:30 UTC

svn commit: r614798 [2/2] - in /incubator/abdera/java/branches/server_refactor_all: ./ .settings/ examples/src/main/java/org/apache/abdera/examples/appserver/ server/src/main/java/org/apache/abdera/protocol/server/ server/src/main/java/org/apache/abder...

Modified: incubator/abdera/java/branches/server_refactor_all/server/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java?rev=614798&r1=614797&r2=614798&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java (original)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java Wed Jan 23 21:38:20 2008
@@ -32,6 +32,7 @@
 
 import org.apache.abdera.Abdera;
 import org.apache.abdera.protocol.error.Error;
+import org.apache.abdera.protocol.server.FilterChain;
 import org.apache.abdera.protocol.server.Provider;
 import org.apache.abdera.protocol.server.RequestContext;
 import org.apache.abdera.protocol.server.ResponseContext;
@@ -84,11 +85,12 @@
       throws ServletException, IOException {
     RequestContext reqcontext = 
       new ServletRequestContext(provider, request);
+    FilterChain chain = new FilterChain(provider,reqcontext);
     try {
       output(
         request,
         response,
-        provider.process(
+        chain.next(
           reqcontext));
     } catch (Throwable t) {
       error("Error servicing request", t, response);

Modified: incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/basic/BasicTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/basic/BasicTest.java?rev=614798&r1=614797&r2=614798&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/basic/BasicTest.java (original)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/basic/BasicTest.java Wed Jan 23 21:38:20 2008
@@ -21,7 +21,6 @@
 import java.util.Date;
 
 import junit.framework.Assert;
-import junit.framework.TestCase;
 
 import org.apache.abdera.Abdera;
 import org.apache.abdera.model.Collection;

Copied: incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/CustomProvider.java (from r614767, incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java)
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/CustomProvider.java?p2=incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/CustomProvider.java&p1=incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java&r1=614767&r2=614798&rev=614798&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java (original)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/CustomProvider.java Wed Jan 23 21:38:20 2008
@@ -15,34 +15,82 @@
  * copyright in this work, please see the NOTICE file in the top level
  * directory of this distribution.
  */
-package org.apache.abdera.protocol.server.test.simple;
+package org.apache.abdera.protocol.server.test.custom;
 
-import java.io.IOException;
-
-import org.apache.abdera.protocol.Resolver;
 import org.apache.abdera.protocol.server.CollectionAdapter;
+import org.apache.abdera.protocol.server.Filter;
+import org.apache.abdera.protocol.server.FilterChain;
 import org.apache.abdera.protocol.server.RequestContext;
 import org.apache.abdera.protocol.server.ResponseContext;
-import org.apache.abdera.protocol.server.Target;
 import org.apache.abdera.protocol.server.TargetType;
-import org.apache.abdera.protocol.server.context.StreamWriterResponseContext;
-import org.apache.abdera.protocol.server.impl.DefaultProvider;
-import org.apache.abdera.protocol.server.impl.DefaultWorkspaceManager;
+import org.apache.abdera.protocol.server.context.RequestContextWrapper;
+import org.apache.abdera.protocol.server.impl.AbstractWorkspaceProvider;
 import org.apache.abdera.protocol.server.impl.RegexTargetResolver;
+import org.apache.abdera.protocol.server.impl.SimpleCollectionInfo;
 import org.apache.abdera.protocol.server.impl.SimpleWorkspaceInfo;
-import org.apache.abdera.util.Constants;
-import org.apache.abdera.writer.StreamWriter;
 
-public class SimpleProvider extends DefaultProvider {
+public class CustomProvider 
+  extends AbstractWorkspaceProvider {
 
-  public SimpleProvider() {
-    super("/atom");
+  private final CollectionAdapter adapter;
+  
+  public CustomProvider() {
+    
+    this.adapter = new SimpleAdapter();
+    
+    super.setTargetResolver(      
+      new RegexTargetResolver()
+        .setPattern("/atom(\\?[^#]*)?", TargetType.TYPE_SERVICE)
+        .setPattern("/atom/([^/#?]+);categories", TargetType.TYPE_CATEGORIES, "collection")
+        .setPattern("/atom/([^/#?;]+)(\\?[^#]*)?", TargetType.TYPE_COLLECTION, "collection")
+        .setPattern("/atom/([^/#?]+)/([^/#?]+)(\\?[^#]*)?", TargetType.TYPE_ENTRY, "collection","entry")
+        .setPattern("/search", OpenSearchFilter.TYPE_OPENSEARCH_DESCRIPTION)
+    );
     
-    SimpleWorkspaceInfo wkspc = new SimpleWorkspaceInfo();
-    wkspc.setTitle("A Simple Workspace");
-    wkspc.addCollection(new SimpleAdapter());
+    SimpleWorkspaceInfo workspace = new SimpleWorkspaceInfo();
+    workspace.setTitle("A Simple Workspace");
+    workspace.addCollection(
+      new SimpleCollectionInfo(
+        "feed",
+        "A simple feed",
+        "/atom/feed",
+        "application/atom+xml;type=entry"
+      ));
+    addWorkspace(workspace);
+    
+    addFilter(new SimpleFilter());
+    addFilter(
+      new OpenSearchFilter()
+        .setShortName("My OpenSearch")
+        .setDescription("My Description")
+        .setTags("test","example","opensearch")
+        .setContact("john.doe@example.org")
+        .setTemplate("http://localhost:8080/atom/feed?q={searchTerms}&c={count?}&s={startIndex?}&p={startPage?}&l={language?}&i={indexEncoding?}&o={outputEncoding?}")
+        .mapTargetParameter("q", "searchTerms")
+        .mapTargetParameter("c", "count")
+        .mapTargetParameter("s", "startIndex")
+        .mapTargetParameter("p", "startPage")
+        .mapTargetParameter("l", "language")
+        .mapTargetParameter("i", "inputEncoding")
+        .mapTargetParameter("o", "outputEncoding")
+      );
+  }
+
+  public CollectionAdapter getCollectionAdapter(
+    RequestContext request) {
+      return adapter;
+  }
 
-    addWorkspace(wkspc);
+  public class SimpleFilter 
+    implements Filter {
+      public ResponseContext filter(
+        RequestContext request, 
+        FilterChain chain) {
+          RequestContextWrapper rcw = new RequestContextWrapper(request);
+          rcw.setAttribute("offset", 10);
+          rcw.setAttribute("count", 10);
+          return chain.next(rcw);
+      }    
   }
 
 }

Copied: incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/CustomProviderTest.java (from r614767, incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java)
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/CustomProviderTest.java?p2=incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/CustomProviderTest.java&p1=incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java&r1=614767&r2=614798&rev=614798&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java (original)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/CustomProviderTest.java Wed Jan 23 21:38:20 2008
@@ -15,12 +15,14 @@
  * copyright in this work, please see the NOTICE file in the top level
  * directory of this distribution.
  */
-package org.apache.abdera.protocol.server.test.simple;
+package org.apache.abdera.protocol.server.test.custom;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.util.Date;
 
+import junit.framework.Assert;
+
 import org.apache.abdera.Abdera;
 import org.apache.abdera.model.Base;
 import org.apache.abdera.model.Categories;
@@ -39,16 +41,11 @@
 import org.apache.abdera.util.MimeTypeHelper;
 import org.apache.abdera.writer.Writer;
 import org.apache.abdera.writer.WriterFactory;
-import org.junit.After;
 import org.junit.AfterClass;
-import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-public class SimpleTest extends Assert {
+public class CustomProviderTest extends Assert {
 
   private static JettyServer server;
   private static Abdera abdera = Abdera.getInstance();
@@ -58,7 +55,7 @@
   public static void setUp() throws Exception {
     try {
       server = new JettyServer();
-      server.start(SimpleProvider.class);
+      server.start(CustomProvider.class);
     } catch (Exception e) {
       e.printStackTrace();
     }

Added: incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/OpenSearchFilter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/OpenSearchFilter.java?rev=614798&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/OpenSearchFilter.java (added)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/OpenSearchFilter.java Wed Jan 23 21:38:20 2008
@@ -0,0 +1,163 @@
+/*
+* 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.abdera.protocol.server.test.custom;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.abdera.protocol.server.Filter;
+import org.apache.abdera.protocol.server.FilterChain;
+import org.apache.abdera.protocol.server.RequestContext;
+import org.apache.abdera.protocol.server.ResponseContext;
+import org.apache.abdera.protocol.server.Target;
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.context.StreamWriterResponseContext;
+import org.apache.abdera.writer.StreamWriter;
+
+public class OpenSearchFilter 
+  implements Filter {
+  
+  public static final String OSDNS = "http://a9.com/-/spec/opensearch/1.1/";
+  public static final String OS_PREFIX = "OpenSearch_";
+  
+  public static final TargetType TYPE_OPENSEARCH_DESCRIPTION = 
+    TargetType.get("OPENSEARCH_DESCRIPTION",true);
+  
+  private String shortName;
+  private String description;
+  private String[] tags;
+  private String contact;
+  private String template;
+  private Map<String,String> map = new HashMap<String,String>();
+  
+  public OpenSearchFilter() {}
+  
+  public String getShortName() {
+    return shortName;
+  }
+
+  public OpenSearchFilter setShortName(String shortName) {
+    this.shortName = shortName;
+    return this;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public OpenSearchFilter setDescription(String description) {
+    this.description = description;
+    return this;
+  }
+
+  public String[] getTags() {
+    return tags;
+  }
+
+  public OpenSearchFilter setTags(String... tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public String getContact() {
+    return contact;
+  }
+  
+  public OpenSearchFilter setContact(String contact) {
+    this.contact = contact;
+    return this;
+  }
+
+  public String getTemplate() {
+    return template;
+  }
+
+  public OpenSearchFilter setTemplate(String template) {
+    this.template = template;
+    return this;
+  }
+
+  public OpenSearchFilter mapTargetParameter(
+    String targetParam, 
+    String openSearchParam) {
+      map.put(targetParam, openSearchParam);
+      return this;
+  }
+  
+  public ResponseContext filter(
+    RequestContext request, 
+    FilterChain chain) {
+    
+      Target target = request.getTarget();
+      TargetType type = target.getType();
+      if (type == TYPE_OPENSEARCH_DESCRIPTION) {
+        return getOpenSearchDescription(request);
+      } else {
+        for (Entry<String,String> entry : map.entrySet()) {
+          String value = target.getParameter(entry.getKey());
+          if (value != null) 
+            request.setAttribute(
+              OS_PREFIX + "_" + entry.getValue(), value);
+        }
+        return chain.next(request);
+      }
+  }
+  
+  private String combineTags() {
+    if (tags == null) return "";
+    StringBuilder buf = new StringBuilder();
+    for (String tag : tags) {
+      if (buf.length() > 0) buf.append(" ");
+      buf.append(tag);
+    }
+    return buf.toString();
+  }
+  
+  private ResponseContext getOpenSearchDescription(
+    RequestContext request) {
+      return new StreamWriterResponseContext(request.getAbdera()) {
+        protected void writeTo(
+          StreamWriter sw) 
+            throws IOException {
+          sw.startDocument()
+            .startElement("OpenSearchDescription", OSDNS)
+              .startElement("ShortName", OSDNS)
+                .writeElementText(getShortName())
+              .endElement()
+              .startElement("Description", OSDNS)
+                .writeElementText(getDescription())
+              .endElement()
+              .startElement("Tags", OSDNS)
+                .writeElementText(combineTags())
+              .endElement()
+              .startElement("Contact", OSDNS)
+                .writeElementText(getContact())
+              .endElement()
+              .startElement("Url", OSDNS)
+                .writeAttribute("type", "application/atom+xml")
+                .writeAttribute("template",getTemplate())
+              .endElement()
+            .endElement()
+            .endDocument();
+        }
+      }.setStatus(200)
+       .setContentType("application/opensearchdescription+xml");
+  }
+}

Modified: incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/SimpleAdapter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/SimpleAdapter.java?rev=614798&r1=614767&r2=614798&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/SimpleAdapter.java (original)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/custom/SimpleAdapter.java Wed Jan 23 21:38:20 2008
@@ -15,21 +15,17 @@
 * copyright in this work, please see the NOTICE file in the top level
 * directory of this distribution.
 */
-package org.apache.abdera.protocol.server.test.simple;
+package org.apache.abdera.protocol.server.test.custom;
 
 import java.io.IOException;
 import java.util.Date;
 
-import javax.activation.MimeType;
-
 import org.apache.abdera.Abdera;
-import org.apache.abdera.factory.Factory;
 import org.apache.abdera.i18n.text.UrlEncoding;
 import org.apache.abdera.model.Document;
 import org.apache.abdera.model.Entry;
 import org.apache.abdera.model.Feed;
 import org.apache.abdera.parser.ParseException;
-import org.apache.abdera.protocol.server.CollectionAdapter;
 import org.apache.abdera.protocol.server.ProviderHelper;
 import org.apache.abdera.protocol.server.RequestContext;
 import org.apache.abdera.protocol.server.ResponseContext;
@@ -40,11 +36,11 @@
 import org.apache.abdera.protocol.server.context.StreamWriterResponseContext;
 import org.apache.abdera.protocol.server.impl.AbstractCollectionAdapter;
 import org.apache.abdera.util.Constants;
-import org.apache.abdera.util.MimeTypeHelper;
 import org.apache.abdera.writer.StreamWriter;
 
 @SuppressWarnings("unchecked")
-public class SimpleAdapter extends AbstractCollectionAdapter {
+public class SimpleAdapter 
+  extends AbstractCollectionAdapter {
   
   @Override
   public String getAuthor() throws ResponseContextException {

Modified: incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/Customer.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/Customer.java?rev=614798&r1=614767&r2=614798&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/Customer.java (original)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/Customer.java Wed Jan 23 21:38:20 2008
@@ -1,6 +1,4 @@
-package org.apache.abdera.protocol.server.customer;
-
-import java.util.Date;
+package org.apache.abdera.protocol.server.test.customer;
 
 public class Customer {
   private int id;

Modified: incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/CustomerAdapter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/CustomerAdapter.java?rev=614798&r1=614767&r2=614798&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/CustomerAdapter.java (original)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/CustomerAdapter.java Wed Jan 23 21:38:20 2008
@@ -1,6 +1,5 @@
-package org.apache.abdera.protocol.server.customer;
+package org.apache.abdera.protocol.server.test.customer;
 
-import java.io.IOException;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;

Modified: incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/CustomerAdapterTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/CustomerAdapterTest.java?rev=614798&r1=614767&r2=614798&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/CustomerAdapterTest.java (original)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/test/java/org/apache/abdera/protocol/server/test/customer/CustomerAdapterTest.java Wed Jan 23 21:38:20 2008
@@ -1,10 +1,12 @@
-package org.apache.abdera.protocol.server.customer;
+package org.apache.abdera.protocol.server.test.customer;
 
 import java.io.IOException;
 import java.util.Date;
 
 import javax.xml.namespace.QName;
 
+import junit.framework.TestCase;
+
 import org.apache.abdera.Abdera;
 import org.apache.abdera.factory.Factory;
 import org.apache.abdera.i18n.iri.IRI;
@@ -24,8 +26,6 @@
 import org.mortbay.jetty.servlet.Context;
 import org.mortbay.jetty.servlet.ServletHolder;
 
-import junit.framework.TestCase;
-
 public class CustomerAdapterTest extends TestCase {
 
   private Server server;
@@ -102,6 +102,7 @@
     System.out.println();
   }
 
+  @SuppressWarnings("serial") 
   private void initializeJetty() throws Exception {
 
     server = new Server(9002);

Modified: incubator/abdera/java/branches/server_refactor_all/server/src/test/resources/abdera/adapter/sample.properties
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor_all/server/src/test/resources/abdera/adapter/sample.properties?rev=614798&r1=614797&r2=614798&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor_all/server/src/test/resources/abdera/adapter/sample.properties (original)
+++ incubator/abdera/java/branches/server_refactor_all/server/src/test/resources/abdera/adapter/sample.properties Wed Jan 23 21:38:20 2008
@@ -1,4 +1,4 @@
-feedUri=http://localhost:8080/sample
+feedUri=http://localhost:9002/sample
 adapterClassName=org.apache.abdera.protocol.server.test.basic.SampleBasicAdapter
 title=title for any sample feed
 author=rayc