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/21 06:33:58 UTC

svn commit: r613765 [4/4] - in /incubator/abdera/java/branches/server_refactor/src: main/java/org/ main/java/org/apache/ main/java/org/apache/abdera/ main/java/org/apache/abdera/protocol/ main/java/org/apache/abdera/protocol/server/ main/java/org/apach...

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/ExtTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/ExtTest.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/ExtTest.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/ExtTest.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,166 @@
+/*
+* 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.ext;
+
+import java.io.ByteArrayInputStream;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.model.Collection;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+import org.apache.abdera.model.Service;
+import org.apache.abdera.model.Workspace;
+import org.apache.abdera.protocol.Response.ResponseType;
+import org.apache.abdera.protocol.client.AbderaClient;
+import org.apache.abdera.protocol.client.ClientResponse;
+import org.apache.abdera.protocol.client.RequestOptions;
+import org.apache.abdera.protocol.server.test.JettyServer;
+import org.apache.abdera.util.Constants;
+import org.apache.abdera.util.MimeTypeHelper;
+
+public class ExtTest 
+  extends TestCase {
+
+  private static JettyServer server;
+  private static Abdera abdera = Abdera.getInstance();
+  private static AbderaClient client = new AbderaClient();
+
+  public ExtTest() {
+    try {
+      if (server == null) {
+        server = new JettyServer();
+        server.start(TestServiceContext.class);
+      }
+    } catch (Exception e) {}
+  }
+  
+  private int count = 5;
+  
+  @Override protected void tearDown() throws Exception {
+    if (--count == 0) server.stop();
+  }
+  
+  public void testGetService() {
+    ClientResponse resp = client.get("http://localhost:8080/atom");
+    assertNotNull(resp);
+    assertEquals(resp.getType(),ResponseType.SUCCESS);
+    assertTrue(MimeTypeHelper.isMatch(resp.getContentType().toString(), Constants.APP_MEDIA_TYPE));
+    Document<Service> doc = resp.getDocument();
+    Service service = doc.getRoot();
+    assertEquals(service.getWorkspaces().size(),1);
+    Workspace workspace = service.getWorkspaces().get(0);
+    assertEquals(workspace.getCollections().size(),1);
+    Collection collection = workspace.getCollections().get(0);
+    assertEquals(collection.getResolvedHref().toString(), "http://localhost:8080/atom/feed");
+    assertEquals(collection.getTitle().toString(), "/atom/feed");
+    resp.release();
+  }
+  
+  public void testGetFeed() {
+    ClientResponse resp = client.get("http://localhost:8080/atom/feed");
+    assertNotNull(resp);
+    assertEquals(resp.getType(),ResponseType.SUCCESS);
+    assertTrue(MimeTypeHelper.isMatch(resp.getContentType().toString(), Constants.ATOM_MEDIA_TYPE));
+    Document<Feed> doc = resp.getDocument();
+    Feed feed = doc.getRoot();
+    assertEquals(feed.getId().toString(), "tag:example.org,2006:feed");
+    assertEquals(feed.getTitle(), "Simple");
+    assertEquals(feed.getAuthor().getName(), "Simple");
+    assertEquals(feed.getEntries().size(), 0);
+    resp.release();
+  }
+  
+  public void testPostEntry() {
+    Entry entry = abdera.newEntry();
+    entry.setId("http://localhost:8080/atom/feed/entries/1");
+    entry.setTitle("test entry");
+    entry.setContent("Test Content");
+    entry.addLink("http://example.org");
+    entry.setUpdated(new Date());
+    entry.addAuthor("James");
+    ClientResponse resp = client.post("http://localhost:8080/atom/feed", entry);
+    assertNotNull(resp);
+    assertEquals(resp.getType(),ResponseType.SUCCESS);
+    assertEquals(resp.getStatus(), 201);
+    assertNotNull(resp.getLocation());
+    resp.release();
+    resp = client.get("http://localhost:8080/atom/feed");
+    Document<Feed> feed_doc = resp.getDocument();
+    Feed feed = feed_doc.getRoot();
+    assertEquals(feed.getEntries().size(),1);
+  }
+  
+  public void testPostMedia() {
+    ByteArrayInputStream in = new ByteArrayInputStream(new byte[] {0x01,0x02,0x03,0x04});
+    RequestOptions options = client.getDefaultRequestOptions();
+    options.setContentType("application/octet-stream");
+    ClientResponse resp = client.post("http://localhost:8080/atom/feed", in, options);
+    assertEquals(resp.getType(),ResponseType.CLIENT_ERROR);
+    assertEquals(resp.getStatus(), 415);
+    resp.release();
+  }
+  
+  public void testPutEntry() {
+    ClientResponse resp = client.get("http://localhost:8080/atom/feed");
+    Document<Feed> feed_doc = resp.getDocument();
+    Feed feed = feed_doc.getRoot();
+    Entry entry = feed.getEntries().get(0);
+    String edit = entry.getEditLinkResolvedHref().toString();
+    resp.release();
+    resp = client.get(edit);
+    Document<Entry> doc = resp.getDocument();
+    entry = doc.getRoot();
+    entry.setTitle("This is the modified title");
+    resp.release();
+    resp = client.put(edit, entry);
+    assertEquals(resp.getType(), ResponseType.SUCCESS);
+    assertEquals(resp.getStatus(), 204);
+    resp.release();
+    resp = client.get(edit);
+    doc = resp.getDocument();
+    entry = doc.getRoot();
+    assertEquals(entry.getTitle(), "This is the modified title");
+    resp.release();
+    resp = client.get("http://localhost:8080/atom/feed");
+    feed_doc = resp.getDocument();
+    feed = feed_doc.getRoot();
+    assertEquals(feed.getEntries().size(),1);
+    resp.release();
+  }
+  
+  public void testDeleteEntry() {
+    ClientResponse resp = client.get("http://localhost:8080/atom/feed");
+    Document<Feed> feed_doc = resp.getDocument();
+    Feed feed = feed_doc.getRoot();
+    Entry entry = feed.getEntries().get(0);
+    String edit = entry.getEditLinkResolvedHref().toString();
+    resp.release();
+    resp = client.delete(edit);    
+    assertEquals(resp.getType(),ResponseType.SUCCESS);
+    resp.release();
+    resp = client.get("http://localhost:8080/atom/feed");
+    feed_doc = resp.getDocument();
+    feed = feed_doc.getRoot();
+    assertEquals(feed.getEntries().size(),0);
+    resp.release();
+  }
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestExtendedProvider.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestExtendedProvider.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestExtendedProvider.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestExtendedProvider.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,269 @@
+/*
+* 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.ext;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.activation.MimeType;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.factory.Factory;
+import org.apache.abdera.i18n.iri.IRI;
+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.parser.Parser;
+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;
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.RequestContext.Scope;
+import org.apache.abdera.protocol.server.impl.AbstractResponseContext;
+import org.apache.abdera.protocol.server.impl.BaseResponseContext;
+import org.apache.abdera.protocol.server.impl.EmptyResponseContext;
+import org.apache.abdera.protocol.server.provider.ext.AbstractNamedCollectionAdapter;
+import org.apache.abdera.protocol.server.provider.ext.ExtendedProvider;
+import org.apache.abdera.protocol.server.provider.ext.ExtendedWorkspaceManager;
+import org.apache.abdera.protocol.server.provider.ext.NamedCollectionAdapter;
+import org.apache.abdera.protocol.server.provider.ext.SimpleWorkspaceInfo;
+import org.apache.abdera.protocol.server.provider.ext.WorkspaceInfo;
+import org.apache.abdera.util.MimeTypeHelper;
+
+public class TestExtendedProvider 
+  extends ExtendedProvider {
+  
+  private static final String SERVICES_BASE = "/atom";
+  
+  protected ExtendedWorkspaceManager initWorkspaceManager() {
+    return new TestWorkspaceManager();
+  }
+ 
+  public static class TestWorkspaceManager 
+    extends ExtendedWorkspaceManager {
+  
+    TestWorkspaceManager() {
+      SimpleWorkspaceInfo wi = new SimpleWorkspaceInfo();
+      wi.setName("Test");
+      Map<String,NamedCollectionAdapter> map = 
+        new HashMap<String,NamedCollectionAdapter>();
+      TestCollectionAdapter tca = new TestCollectionAdapter();
+      map.put(tca.getName(), tca);
+      wi.setCollectionAdapters(map);
+      this.setWorkspaceInfo(wi);
+    }
+    
+    public CollectionAdapter getCollectionAdapter(
+      RequestContext request) {
+        for (WorkspaceInfo wi : this.getWorkspaceInfo()) {
+          CollectionAdapter ca = wi.getCollectionAdapter(request);
+          if (ca != null) return ca;
+        }
+        return null;
+    }
+  }
+
+  public static class TestCollectionAdapter 
+    extends AbstractNamedCollectionAdapter {
+
+    public String getAuthor() {
+      return "James";
+    }
+
+    public String getName() {
+      return SERVICES_BASE + "/feed";
+    }
+
+    public String[] getPatterns(TargetType type) {
+      if (type.equals(TargetType.TYPE_COLLECTION)) {
+        return new String[] {getName()};
+      } else if (type.equals(TargetType.TYPE_ENTRY)) {
+        return new String[] {getName() + "/([^/?#]+)"};
+      } else return null;
+    }
+    
+    public String getId(RequestContext request) {
+      return request.getAbdera().getFactory().newUuidUri();
+    }
+
+    public String getTitle(RequestContext request) {
+      return "Test";
+    }
+    
+    private Document<Feed> feed_doc;
+    
+    private Document<Feed> init_feed_doc(Abdera abdera, RequestContext context) {
+      Feed feed = (Feed) context.getAttribute(Scope.SESSION, "feed");
+      if (feed == null) {
+        Factory factory = abdera.getFactory();
+        feed = factory.newFeed();
+        try {
+          feed.setId("tag:example.org,2006:feed");
+          feed.setTitle("Simple");
+          feed.setUpdated(new Date());
+          feed.addLink("");
+          feed.addLink("","self");
+          feed.addAuthor("Simple");
+        } catch (Exception e) {}
+        context.setAttribute(Scope.SESSION, "feed", "feed");
+      } 
+      return feed.getDocument();
+    }
+    
+    private synchronized Document<Feed> get_feed_doc(Abdera abdera, RequestContext context) {
+      if (feed_doc == null) {
+        feed_doc = init_feed_doc(abdera, context);
+      }
+      return feed_doc;
+    }
+
+    public ResponseContext getFeed(
+      RequestContext request) {
+        Abdera abdera = request.getAbdera();
+        Document<Feed> feed = get_feed_doc(abdera, request);
+        AbstractResponseContext rc; 
+        rc = new BaseResponseContext<Document<Feed>>(feed);
+        rc.setEntityTag(calculateEntityTag(feed.getRoot()));
+        return rc;
+    }
+
+    public ResponseContext deleteEntry(
+      RequestContext request) {
+        Entry entry = getAbderaEntry(request);
+        if (entry != null)
+          entry.discard();
+        return new EmptyResponseContext(204);
+    }
+
+    public ResponseContext getEntry(
+      RequestContext request) {
+        Entry entry = (Entry) getAbderaEntry(request);
+        if (entry != null) {
+          Feed feed = entry.getParentElement();
+          entry = (Entry) entry.clone();
+          entry.setSource(feed.getAsSource());
+          Document<Entry> entry_doc = entry.getDocument();
+          AbstractResponseContext rc = new BaseResponseContext<Document<Entry>>(entry_doc);
+          rc.setEntityTag(calculateEntityTag(entry));
+          return rc;
+        } else {
+          return new EmptyResponseContext(404);
+        }
+    }
+
+    @SuppressWarnings("unchecked") 
+    public ResponseContext postEntry(
+      RequestContext request) {
+        Abdera abdera = request.getAbdera();
+        Factory factory = abdera.getFactory();
+        Parser parser = abdera.getParser();
+        try {
+          MimeType contentType = request.getContentType();
+          String ctype = (contentType != null) ? contentType.toString() : null;
+          if (ctype != null && !MimeTypeHelper.isAtom(ctype) && !MimeTypeHelper.isXml(ctype))
+            return new EmptyResponseContext(415);
+    
+          Document<Entry> entry_doc = 
+            (Document<Entry>) request.getDocument(parser).clone();
+          if (entry_doc != null) {
+            Entry entry = entry_doc.getRoot();
+            if (!ProviderHelper.isValidEntry(entry))
+              return new EmptyResponseContext(400);
+            entry.setUpdated(new Date());
+            entry.getIdElement().setValue(factory.newUuidUri());
+            entry.addLink("feed/" + entry.getId().toString(), "edit");
+            Feed feed = get_feed_doc(abdera, request).getRoot();
+            feed.insertEntry(entry);
+            feed.setUpdated(new Date());
+            BaseResponseContext<Entry> rc = new BaseResponseContext<Entry>(entry);
+            IRI baseUri = ProviderHelper.resolveBase(request);
+            rc.setLocation(baseUri.resolve(entry.getEditLinkResolvedHref()).toString());
+            rc.setContentLocation(rc.getLocation().toString());
+            rc.setEntityTag(calculateEntityTag(entry));
+            rc.setStatus(201);
+            return rc;
+          } else {
+            return new EmptyResponseContext(400);
+          }
+        } catch (ParseException pe) {
+          return new EmptyResponseContext(415);
+        } catch (ClassCastException cce) {
+          return new EmptyResponseContext(415);
+        } catch (Exception e) {
+          return new EmptyResponseContext(400);
+      }
+    }
+
+    @SuppressWarnings("unchecked") 
+    public ResponseContext putEntry(
+      RequestContext request) {
+        Abdera abdera = request.getAbdera();
+        Parser parser = abdera.getParser();
+        Entry orig_entry = getAbderaEntry(request);
+        if (orig_entry != null) {
+          try {
+            MimeType contentType = request.getContentType();
+            if (contentType != null && !MimeTypeHelper.isAtom(contentType.toString()))
+              return new EmptyResponseContext(415);
+            
+            Document<Entry> entry_doc = 
+              (Document<Entry>) request.getDocument(parser).clone();
+            if (entry_doc != null) {
+              Entry entry = entry_doc.getRoot();
+              if (!entry.getId().equals(orig_entry.getId()))
+                return new EmptyResponseContext(409);
+              if (!ProviderHelper.isValidEntry(entry))
+                return new EmptyResponseContext(400);
+              entry.setUpdated(new Date());
+              entry.getIdElement().setValue(orig_entry.getId().toString());
+              entry.addLink("atom/feed/" + entry.getId().toString(), "edit");
+              orig_entry.discard();
+              Feed feed = get_feed_doc(abdera, request).getRoot();
+              feed.insertEntry(entry);
+              feed.setUpdated(new Date());
+              return new EmptyResponseContext(204);
+            } else {
+              return new EmptyResponseContext(400);
+            }
+          } catch (ParseException pe) {
+            return new EmptyResponseContext(415);
+          } catch (ClassCastException cce) {
+            return new EmptyResponseContext(415);
+          } catch (Exception e) {
+            return new EmptyResponseContext(400);
+          }
+        } else {
+          return new EmptyResponseContext(404);
+        }
+    }
+    
+    private Entry getAbderaEntry(RequestContext request) {
+      Abdera abdera = request.getAbdera();
+      String entry_id = getEntryID(request);
+      Document<Feed> feed = get_feed_doc(abdera, request);
+      try { 
+        return feed.getRoot().getEntry(entry_id); 
+      } catch (Exception e) {}
+      return null;
+    }
+    
+  }
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestProviderManager.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestProviderManager.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestProviderManager.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestProviderManager.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,31 @@
+/*
+* 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.ext;
+
+import org.apache.abdera.protocol.server.Provider;
+import org.apache.abdera.protocol.server.impl.AbstractSingletonProviderManager;
+
+public class TestProviderManager 
+  extends AbstractSingletonProviderManager {
+
+  @Override
+  protected Provider initProvider() {
+    return new TestExtendedProvider();
+  }
+
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestServiceContext.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestServiceContext.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestServiceContext.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestServiceContext.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,30 @@
+/*
+* 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.ext;
+
+import org.apache.abdera.protocol.server.impl.DefaultServiceContext;
+
+public class TestServiceContext 
+  extends DefaultServiceContext {
+
+  public TestServiceContext() {
+    this.defaultprovidermanager = TestProviderManager.class.getName();
+    this.defaulttargetresolver = TestTargetResolver.class.getName();
+  }
+  
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestTargetResolver.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestTargetResolver.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestTargetResolver.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/ext/TestTargetResolver.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,32 @@
+/*
+* 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.ext;
+
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.impl.RegexTargetResolver;
+
+public class TestTargetResolver 
+  extends RegexTargetResolver {
+
+  public TestTargetResolver() {
+    setPattern("/atom(\\?[^#]*)?", TargetType.TYPE_SERVICE);
+    setPattern("/atom/feed(\\?[^#]*)?", TargetType.TYPE_COLLECTION);
+    setPattern("/atom/feed/([^/#?]+)(\\?[^#]*)?", TargetType.TYPE_ENTRY);
+  }
+  
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,275 @@
+/*
+* 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.simple;
+
+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.iri.IRI;
+import org.apache.abdera.i18n.text.UrlEncoding;
+import org.apache.abdera.model.Base;
+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.parser.Parser;
+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;
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.RequestContext.Scope;
+import org.apache.abdera.protocol.server.impl.AbstractResponseContext;
+import org.apache.abdera.protocol.server.impl.AbstractWorkspaceManagerProvider;
+import org.apache.abdera.protocol.server.impl.BaseResponseContext;
+import org.apache.abdera.protocol.server.impl.EmptyResponseContext;
+import org.apache.abdera.protocol.server.impl.StreamWriterResponseContext;
+import org.apache.abdera.util.Constants;
+import org.apache.abdera.util.EntityTag;
+import org.apache.abdera.util.MimeTypeHelper;
+import org.apache.abdera.writer.StreamWriter;
+
+@SuppressWarnings("unchecked")
+public class SimpleProvider 
+  extends AbstractWorkspaceManagerProvider
+  implements CollectionAdapter {
+    
+  public CollectionAdapter getCollectionAdapter(
+    RequestContext request) {
+      return this;
+  }
+
+  private EntityTag service_etag = new EntityTag("simple");
+  private Document<Feed> feed_doc;
+  
+  private Document<Feed> init_feed_doc(Abdera abdera, RequestContext context) {
+    Feed feed = (Feed) context.getAttribute(Scope.SESSION, "feed");
+    if (feed == null) {
+      Factory factory = abdera.getFactory();
+      feed = factory.newFeed();
+      try {
+        feed.setId("tag:example.org,2006:feed");
+        feed.setTitle("Simple");
+        feed.setUpdated(new Date());
+        feed.addLink("");
+        feed.addLink("","self");
+        feed.addAuthor("Simple");
+      } catch (Exception e) {}
+      context.setAttribute(Scope.SESSION, "feed", "feed");
+    } 
+    return feed.getDocument();
+  }
+  
+  private synchronized Document<Feed> get_feed_doc(Abdera abdera, RequestContext context) {
+    if (feed_doc == null) {
+      feed_doc = init_feed_doc(abdera, context);
+    }
+    return feed_doc;
+  }
+
+  
+  protected ResponseContext getServiceDocument(
+    RequestContext request) {
+      Abdera abdera = request.getAbdera();
+      AbstractResponseContext rc = 
+        new StreamWriterResponseContext(abdera) {
+          protected void writeTo(
+            StreamWriter sw) 
+              throws IOException {
+            sw.startDocument()
+              .startService()
+              .startWorkspace()
+              .writeTitle("Simple")
+              .startCollection("atom/feed")
+              .writeTitle("Simple")
+              .writeAcceptsEntry()
+              .startCategories(false)
+              .endCategories()
+              .endCollection()
+              .endWorkspace()
+              .endService()
+              .endDocument();
+          }
+        }; 
+      rc.setStatus(200);
+      rc.setEntityTag(service_etag);
+      rc.setContentType(Constants.APP_MEDIA_TYPE);
+      return rc;
+  }
+
+  public ResponseContext getFeed(
+    RequestContext request) {
+      Abdera abdera = request.getAbdera();
+      Document<Feed> feed = get_feed_doc(abdera, request);
+      AbstractResponseContext rc; 
+      rc = new BaseResponseContext<Document<Feed>>(feed);
+      rc.setEntityTag(calculateEntityTag(feed.getRoot()));
+      return rc;
+  }
+
+  
+  public ResponseContext deleteEntry(
+    RequestContext request) {
+      Entry entry = getAbderaEntry(request);
+      if (entry != null)
+        entry.discard();
+      return new EmptyResponseContext(204);
+  }
+
+  public ResponseContext getEntry(
+    RequestContext request) {
+      Entry entry = (Entry) getAbderaEntry(request);
+      if (entry != null) {
+        Feed feed = entry.getParentElement();
+        entry = (Entry) entry.clone();
+        entry.setSource(feed.getAsSource());
+        Document<Entry> entry_doc = entry.getDocument();
+        AbstractResponseContext rc = new BaseResponseContext<Document<Entry>>(entry_doc);
+        rc.setEntityTag(calculateEntityTag(entry));
+        return rc;
+      } else {
+        return new EmptyResponseContext(404);
+      }
+  }
+
+  public ResponseContext postEntry(
+    RequestContext request) {
+      Abdera abdera = request.getAbdera();
+      Factory factory = abdera.getFactory();
+      Parser parser = abdera.getParser();
+      try {
+        MimeType contentType = request.getContentType();
+        String ctype = (contentType != null) ? contentType.toString() : null;
+        if (ctype != null && !MimeTypeHelper.isAtom(ctype) && !MimeTypeHelper.isXml(ctype))
+          return new EmptyResponseContext(415);
+  
+        Document<Entry> entry_doc = 
+          (Document<Entry>) request.getDocument(parser).clone();
+        if (entry_doc != null) {
+          Entry entry = entry_doc.getRoot();
+          if (!ProviderHelper.isValidEntry(entry))
+            return new EmptyResponseContext(400);
+          entry.setUpdated(new Date());
+          entry.getIdElement().setValue(factory.newUuidUri());
+          entry.addLink("feed/" + entry.getId().toString(), "edit");
+          Feed feed = get_feed_doc(abdera, request).getRoot();
+          feed.insertEntry(entry);
+          feed.setUpdated(new Date());
+          BaseResponseContext rc = new BaseResponseContext(entry);
+          IRI baseUri = ProviderHelper.resolveBase(request);
+          rc.setLocation(baseUri.resolve(entry.getEditLinkResolvedHref()).toString());
+          rc.setContentLocation(rc.getLocation().toString());
+          rc.setEntityTag(calculateEntityTag(entry));
+          rc.setStatus(201);
+          return rc;
+        } else {
+          return new EmptyResponseContext(400);
+        }
+      } catch (ParseException pe) {
+        return new EmptyResponseContext(415);
+      } catch (ClassCastException cce) {
+        return new EmptyResponseContext(415);
+      } catch (Exception e) {
+        return new EmptyResponseContext(400);
+    }
+  }
+
+  public ResponseContext putEntry(
+    RequestContext request) {
+      Abdera abdera = request.getAbdera();
+      Parser parser = abdera.getParser();
+      Entry orig_entry = getAbderaEntry(request);
+      if (orig_entry != null) {
+        try {
+          MimeType contentType = request.getContentType();
+          if (contentType != null && !MimeTypeHelper.isAtom(contentType.toString()))
+            return new EmptyResponseContext(415);
+          
+          Document<Entry> entry_doc = 
+            (Document<Entry>) request.getDocument(parser).clone();
+          if (entry_doc != null) {
+            Entry entry = entry_doc.getRoot();
+            if (!entry.getId().equals(orig_entry.getId()))
+              return new EmptyResponseContext(409);
+            if (!ProviderHelper.isValidEntry(entry))
+              return new EmptyResponseContext(400);
+            entry.setUpdated(new Date());
+            entry.getIdElement().setValue(orig_entry.getId().toString());
+            entry.addLink("atom/feed/" + entry.getId().toString(), "edit");
+            orig_entry.discard();
+            Feed feed = get_feed_doc(abdera, request).getRoot();
+            feed.insertEntry(entry);
+            feed.setUpdated(new Date());
+            return new EmptyResponseContext(204);
+          } else {
+            return new EmptyResponseContext(400);
+          }
+        } catch (ParseException pe) {
+          return new EmptyResponseContext(415);
+        } catch (ClassCastException cce) {
+          return new EmptyResponseContext(415);
+        } catch (Exception e) {
+          return new EmptyResponseContext(400);
+        }
+      } else {
+        return new EmptyResponseContext(404);
+      }
+  }
+  
+  private EntityTag calculateEntityTag(Base base) {
+    String id = null;
+    String modified = null;
+    if (base instanceof Entry) {
+      id = ((Entry)base).getId().toString();
+      modified = ((Entry)base).getUpdatedElement().getText();
+    } else if (base instanceof Feed) {
+      id = ((Feed)base).getId().toString();
+      modified = ((Feed)base).getUpdatedElement().getText();
+    }
+    return EntityTag.generate(id, modified);      
+  }
+  
+  private Entry getAbderaEntry(RequestContext request) {
+    Abdera abdera = request.getAbdera();
+    String entry_id = getEntryID(request);
+    Document<Feed> feed = get_feed_doc(abdera, request);
+    try { 
+      return feed.getRoot().getEntry(entry_id); 
+    } catch (Exception e) {}
+    return null;
+  }
+  
+  private String getEntryID(RequestContext request) {
+    if (request.getTarget().getType() != TargetType.TYPE_ENTRY) 
+      return null;
+    String path = request.getUri().toString();
+    String[] segments = path.split("/");
+    return UrlEncoding.decode(segments[segments.length-1]);
+  }
+  
+  public ResponseContext extensionRequest(RequestContext request) {
+    return ProviderHelper.notallowed(
+      request, 
+      "Method Not Allowed", 
+      this.getMethods(request));
+  }
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProviderManager.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProviderManager.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProviderManager.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProviderManager.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,31 @@
+/*
+* 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.simple;
+
+import org.apache.abdera.protocol.server.Provider;
+import org.apache.abdera.protocol.server.impl.AbstractSingletonProviderManager;
+
+public class SimpleProviderManager 
+  extends AbstractSingletonProviderManager {
+
+  @Override
+  protected Provider initProvider() {
+    return new SimpleProvider();
+  }
+
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleServiceContext.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleServiceContext.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleServiceContext.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleServiceContext.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,30 @@
+/*
+* 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.simple;
+
+import org.apache.abdera.protocol.server.impl.DefaultServiceContext;
+
+public class SimpleServiceContext 
+  extends DefaultServiceContext {
+
+  public SimpleServiceContext() {
+    this.defaultprovidermanager = SimpleProviderManager.class.getName();
+    this.defaulttargetresolver = SimpleTargetResolver.class.getName();
+  }
+  
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTargetResolver.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTargetResolver.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTargetResolver.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTargetResolver.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,32 @@
+/*
+* 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.simple;
+
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.impl.RegexTargetResolver;
+
+public class SimpleTargetResolver 
+  extends RegexTargetResolver {
+
+  public SimpleTargetResolver() {
+    setPattern("/atom(\\?[^#]*)?", TargetType.TYPE_SERVICE);
+    setPattern("/atom/feed(\\?[^#]*)?", TargetType.TYPE_COLLECTION);
+    setPattern("/atom/feed/([^/#?]+)(\\?[^#]*)?", TargetType.TYPE_ENTRY);
+  }
+  
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java Sun Jan 20 21:33:46 2008
@@ -0,0 +1,166 @@
+/*
+* 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.simple;
+
+import java.io.ByteArrayInputStream;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.model.Collection;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+import org.apache.abdera.model.Service;
+import org.apache.abdera.model.Workspace;
+import org.apache.abdera.protocol.Response.ResponseType;
+import org.apache.abdera.protocol.client.AbderaClient;
+import org.apache.abdera.protocol.client.ClientResponse;
+import org.apache.abdera.protocol.client.RequestOptions;
+import org.apache.abdera.protocol.server.test.JettyServer;
+import org.apache.abdera.util.Constants;
+import org.apache.abdera.util.MimeTypeHelper;
+
+public class SimpleTest 
+  extends TestCase {
+
+  private static JettyServer server;
+  private static Abdera abdera = Abdera.getInstance();
+  private static AbderaClient client = new AbderaClient();
+
+  public SimpleTest() {
+    try {
+      if (server == null) {
+        server = new JettyServer();
+        server.start(SimpleServiceContext.class);
+      }
+    } catch (Exception e) {}
+  }
+  
+  private int count = 5;
+  
+  @Override protected void tearDown() throws Exception {
+    if (--count == 0) server.stop();
+  }
+  
+  public void testGetService() {
+    ClientResponse resp = client.get("http://localhost:8080/atom");
+    assertNotNull(resp);
+    assertEquals(resp.getType(),ResponseType.SUCCESS);
+    assertTrue(MimeTypeHelper.isMatch(resp.getContentType().toString(), Constants.APP_MEDIA_TYPE));
+    Document<Service> doc = resp.getDocument();
+    Service service = doc.getRoot();
+    assertEquals(service.getWorkspaces().size(),1);
+    Workspace workspace = service.getWorkspaces().get(0);
+    assertEquals(workspace.getCollections().size(),1);
+    Collection collection = workspace.getCollections().get(0);
+    assertEquals(collection.getResolvedHref().toString(), "http://localhost:8080/atom/feed");
+    assertEquals(collection.getTitle().toString(), "Simple");
+    resp.release();
+  }
+  
+  public void testGetFeed() {
+    ClientResponse resp = client.get("http://localhost:8080/atom/feed");
+    assertNotNull(resp);
+    assertEquals(resp.getType(),ResponseType.SUCCESS);
+    assertTrue(MimeTypeHelper.isMatch(resp.getContentType().toString(), Constants.ATOM_MEDIA_TYPE));
+    Document<Feed> doc = resp.getDocument();
+    Feed feed = doc.getRoot();
+    assertEquals(feed.getId().toString(), "tag:example.org,2006:feed");
+    assertEquals(feed.getTitle(), "Simple");
+    assertEquals(feed.getAuthor().getName(), "Simple");
+    assertEquals(feed.getEntries().size(), 0);
+    resp.release();
+  }
+  
+  public void testPostEntry() {
+    Entry entry = abdera.newEntry();
+    entry.setId("http://localhost:8080/atom/feed/entries/1");
+    entry.setTitle("test entry");
+    entry.setContent("Test Content");
+    entry.addLink("http://example.org");
+    entry.setUpdated(new Date());
+    entry.addAuthor("James");
+    ClientResponse resp = client.post("http://localhost:8080/atom/feed", entry);
+    assertNotNull(resp);
+    assertEquals(resp.getType(),ResponseType.SUCCESS);
+    assertEquals(resp.getStatus(), 201);
+    assertNotNull(resp.getLocation());
+    resp.release();
+    resp = client.get("http://localhost:8080/atom/feed");
+    Document<Feed> feed_doc = resp.getDocument();
+    Feed feed = feed_doc.getRoot();
+    assertEquals(feed.getEntries().size(),1);
+  }
+  
+  public void testPostMedia() {
+    ByteArrayInputStream in = new ByteArrayInputStream(new byte[] {0x01,0x02,0x03,0x04});
+    RequestOptions options = client.getDefaultRequestOptions();
+    options.setContentType("application/octet-stream");
+    ClientResponse resp = client.post("http://localhost:8080/atom/feed", in, options);
+    assertEquals(resp.getType(),ResponseType.CLIENT_ERROR);
+    assertEquals(resp.getStatus(), 415);
+    resp.release();
+  }
+  
+  public void testPutEntry() {
+    ClientResponse resp = client.get("http://localhost:8080/atom/feed");
+    Document<Feed> feed_doc = resp.getDocument();
+    Feed feed = feed_doc.getRoot();
+    Entry entry = feed.getEntries().get(0);
+    String edit = entry.getEditLinkResolvedHref().toString();
+    resp.release();
+    resp = client.get(edit);
+    Document<Entry> doc = resp.getDocument();
+    entry = doc.getRoot();
+    entry.setTitle("This is the modified title");
+    resp.release();
+    resp = client.put(edit, entry);
+    assertEquals(resp.getType(), ResponseType.SUCCESS);
+    assertEquals(resp.getStatus(), 204);
+    resp.release();
+    resp = client.get(edit);
+    doc = resp.getDocument();
+    entry = doc.getRoot();
+    assertEquals(entry.getTitle(), "This is the modified title");
+    resp.release();
+    resp = client.get("http://localhost:8080/atom/feed");
+    feed_doc = resp.getDocument();
+    feed = feed_doc.getRoot();
+    assertEquals(feed.getEntries().size(),1);
+    resp.release();
+  }
+  
+  public void testDeleteEntry() {
+    ClientResponse resp = client.get("http://localhost:8080/atom/feed");
+    Document<Feed> feed_doc = resp.getDocument();
+    Feed feed = feed_doc.getRoot();
+    Entry entry = feed.getEntries().get(0);
+    String edit = entry.getEditLinkResolvedHref().toString();
+    resp.release();
+    resp = client.delete(edit);    
+    assertEquals(resp.getType(),ResponseType.SUCCESS);
+    resp.release();
+    resp = client.get("http://localhost:8080/atom/feed");
+    feed_doc = resp.getDocument();
+    feed = feed_doc.getRoot();
+    assertEquals(feed.getEntries().size(),0);
+    resp.release();
+  }
+}

Added: incubator/abdera/java/branches/server_refactor/src/test/resources/abdera/adapter/sample.properties
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/resources/abdera/adapter/sample.properties?rev=613765&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/resources/abdera/adapter/sample.properties (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/resources/abdera/adapter/sample.properties Sun Jan 20 21:33:46 2008
@@ -0,0 +1,4 @@
+feedUri=http://localhost:8080/sample
+adapterClassName=org.apache.abdera.protocol.server.provider.basic.SampleBasicAdapter
+title=title for any sample feed
+author=rayc
\ No newline at end of file