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 2011/10/27 04:16:57 UTC

svn commit: r1189582 - in /abdera/abdera2: activities/src/main/java/org/apache/abdera2/activities/protocol/ activities/src/main/java/org/apache/abdera2/activities/protocol/basic/ common/src/main/java/org/apache/abdera2/common/protocol/ security/src/mai...

Author: jmsnell
Date: Thu Oct 27 02:16:56 2011
New Revision: 1189582

URL: http://svn.apache.org/viewvc?rev=1189582&view=rev
Log:
More progress on fixing the test cases and simplification... 

Removed:
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/ActivitiesRequestContext.java
    abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/context/AtompubRequestContext.java
Modified:
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesCollectionAdapter.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesProvider.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesWorkspaceProvider.java
    abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicAdapter.java
    abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseProvider.java
    abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CollectionAdapter.java
    abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/DefaultWorkspaceManager.java
    abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestProcessor.java
    abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/AbstractEncryptedRequestFilter.java
    abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/SignedRequestFilter.java
    abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubCollectionAdapter.java
    abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubProvider.java
    abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubWorkspaceProvider.java
    abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/multipart/AbstractMultipartCollectionAdapter.java
    abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/provider/basic/BasicAdapter.java
    abdera/abdera2/test/src/main/java/org/apache/abdera2/test/security/filter/SimpleAdapter.java
    abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/custom/SimpleAdapter.java
    abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/customer/CustomerAdapter.java
    abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedAdapter.java
    abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedTest.java

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesCollectionAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesCollectionAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesCollectionAdapter.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesCollectionAdapter.java Thu Oct 27 02:16:56 2011
@@ -25,6 +25,7 @@ import org.apache.abdera2.activities.mod
 import org.apache.abdera2.activities.model.Collection;
 import org.apache.abdera2.activities.model.objects.PersonObject;
 import org.apache.abdera2.activities.model.objects.ServiceObject;
+import org.apache.abdera2.common.misc.ExceptionHelper;
 import org.apache.abdera2.common.protocol.AbstractCollectionAdapter;
 import org.apache.abdera2.common.protocol.CollectionAdapter;
 import org.apache.abdera2.common.protocol.CollectionInfo;
@@ -33,6 +34,8 @@ import org.apache.abdera2.common.protoco
 import org.apache.abdera2.common.protocol.ResponseContextException;
 import org.joda.time.DateTime;
 
+import com.google.common.base.Predicate;
+
 public abstract class AbstractActivitiesCollectionAdapter
   extends AbstractCollectionAdapter
   implements CollectionAdapter, 
@@ -101,15 +104,21 @@ public abstract class AbstractActivities
         .get();
   }
 
-  protected ASObject getEntryFromRequest(RequestContext request) throws ResponseContextException {
+  protected ASObject getEntryFromRequest(
+    RequestContext request) 
+      throws ResponseContextException {
       ASObject object;
       try {
-          ActivitiesRequestContext context = (ActivitiesRequestContext) request;
-          object = context.getEntity();
+        object = 
+          AbstractActivitiesProvider
+            .getASBaseFromRequestContext(request);
       } catch (IOException e) {
-          throw new ResponseContextException(500, e);
+       throw ExceptionHelper.propogate(e);
       }
       return object;
   }
 
+  public Predicate<RequestContext> acceptable() {
+    return AbstractActivitiesWorkspaceProvider.isJson();
+  }
 }

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesProvider.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesProvider.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesProvider.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesProvider.java Thu Oct 27 02:16:56 2011
@@ -17,16 +17,22 @@
  */
 package org.apache.abdera2.activities.protocol;
 
+import java.io.IOException;
+import java.io.Reader;
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.activation.MimeType;
+
 import org.apache.abdera2.activities.model.ASBase;
 import org.apache.abdera2.activities.model.ASObject;
 import org.apache.abdera2.activities.model.Activity;
 import org.apache.abdera2.activities.model.Collection;
+import org.apache.abdera2.activities.model.IO;
 import org.apache.abdera2.activities.model.TypeAdapter;
 import org.apache.abdera2.common.date.DateTimes;
 import org.apache.abdera2.common.http.EntityTag;
+import org.apache.abdera2.common.misc.ExceptionHelper;
 import org.apache.abdera2.common.protocol.BaseProvider;
 import org.apache.abdera2.common.protocol.CollectionRequestProcessor;
 import org.apache.abdera2.common.protocol.EntryRequestProcessor;
@@ -35,6 +41,8 @@ import org.apache.abdera2.common.protoco
 import org.apache.abdera2.common.protocol.ResponseContext;
 import org.apache.abdera2.common.protocol.TargetType;
 import org.apache.abdera2.common.protocol.WorkspaceManager;
+import org.apache.abdera2.common.protocol.RequestContext.Scope;
+import org.joda.time.DateTime;
 
 public abstract class AbstractActivitiesProvider 
   extends BaseProvider
@@ -86,14 +94,6 @@ public abstract class AbstractActivities
         .setStatusText(message);
   }
 
-  @Override
-  public ResponseContext apply(RequestContext request) {
-    return super.apply(
-      request instanceof ActivitiesRequestContext?
-        request:
-        new ActivitiesRequestContext(request));
-  }
-
   public static EntityTag calculateEntityTag(ASBase base) {
     String id = null;
     String modified = null;
@@ -119,4 +119,54 @@ public abstract class AbstractActivities
     String editLink = object.getProperty("editLink");
     return editLink;
   }
+  
+  
+  
+  public static IO getIO(ActivitiesProvider provider, TypeAdapter<?>... adapters) {
+    Set<TypeAdapter<?>> as = 
+      new HashSet<TypeAdapter<?>>(provider.getTypeAdapters());
+    for (TypeAdapter<?> ta : adapters)
+      as.add(ta);
+    return IO.get(as.toArray(new TypeAdapter[as.size()]));
+  }
+  
+  @SuppressWarnings("unchecked")
+  public static <T extends ASBase>T getASBaseFromRequestContext(RequestContext context) throws IOException {
+    ASBase entity = context.getAttribute(Scope.REQUEST, ASBase.class.getName());
+      try {
+      if (entity == null) {
+        Reader reader = context.getReader();
+        IO io = getIO(context.<ActivitiesProvider>getProvider());
+        if (reader != null)
+          entity = io.read(reader);
+        else // try input stream, but this should've worked
+          entity = io.read(context.getInputStream(), "UTF-8");
+      }
+      } catch (Throwable t) {
+        throw ExceptionHelper.propogate(t);
+      }
+    if (entity != null) {
+      setDocProperties(entity, context);
+      context.setAttribute(ASBase.class.getName(), entity);
+    }
+    return (T)entity;
+  }
+  
+  private static void setDocProperties(ASBase base, RequestContext context) {
+    String etag = context.getHeader("ETag");
+    if (etag != null)
+        base.setEntityTag(etag);
+    DateTime lm = context.getDateHeader("Last-Modified");
+    if (lm != null)
+        base.setLastModified(lm);
+    MimeType mt = context.getContentType();
+    if (mt != null)
+        base.setContentType(mt.toString());
+    String language = context.getContentLanguage();
+    if (language != null)
+        base.setLanguage(language);
+    String slug = context.getSlug();
+    if (slug != null)
+        base.setSlug(slug);
+  }
 }

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesWorkspaceProvider.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesWorkspaceProvider.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesWorkspaceProvider.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/AbstractActivitiesWorkspaceProvider.java Thu Oct 27 02:16:56 2011
@@ -89,12 +89,4 @@ public abstract class AbstractActivities
         .setStatus(code)
         .setStatusText(message);
   }
-
-  @Override
-  public ResponseContext apply(RequestContext request) {
-    return super.apply(
-      request instanceof ActivitiesRequestContext?
-        request:
-        new ActivitiesRequestContext(request));
-  }
 }
\ No newline at end of file

Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicAdapter.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicAdapter.java Thu Oct 27 02:16:56 2011
@@ -28,7 +28,6 @@ import org.apache.abdera2.activities.mod
 import org.apache.abdera2.activities.model.Collection;
 import org.apache.abdera2.activities.model.objects.PersonObject;
 import org.apache.abdera2.activities.protocol.AbstractActivitiesProvider;
-import org.apache.abdera2.activities.protocol.ActivitiesRequestContext;
 import org.apache.abdera2.activities.protocol.ActivitiesResponseContext;
 import org.apache.abdera2.activities.protocol.ErrorObject;
 import org.apache.abdera2.activities.protocol.managed.FeedConfiguration;
@@ -124,15 +123,14 @@ public abstract class BasicAdapter exten
       }
     }
     
-    private ResponseContext createOrUpdateObject(RequestContext context, boolean createFlag) {
+    private ResponseContext createOrUpdateObject(RequestContext request, boolean createFlag) {
         try {
-            ActivitiesRequestContext request = (ActivitiesRequestContext) context;
             MimeType mimeType = request.getContentType();
             String contentType = mimeType == null ? null : mimeType.toString();
             if (contentType != null && !MimeTypeHelper.isJson(contentType))
                 return ProviderHelper.notsupported(request);
-            
-            ASBase base = (ASBase)request.getEntity();
+           
+            ASBase base = getEntryFromRequest(request);
             Target target = request.getTarget();
 
             if (base instanceof Collection && createFlag && target.getType() == TargetType.TYPE_COLLECTION) {
@@ -142,7 +140,7 @@ public abstract class BasicAdapter exten
               int c = 0;
               for (ASObject inputEntry : coll.getItems()) {
                 ASObject newEntry = createItem(inputEntry,c++);
-                push(context,target.getParameter(BasicProvider.PARAM_FEED),newEntry);
+                push(request,target.getParameter(BasicProvider.PARAM_FEED),newEntry);
                 if (newEntry != null) {
                   retl.addItem(newEntry);
                 } else {
@@ -159,7 +157,7 @@ public abstract class BasicAdapter exten
               String entryId = !createFlag ? target.getParameter(BasicProvider.PARAM_ENTRY) : null;
               ASObject inputEntry = (ASObject) base;
               ASObject newEntry = createFlag ? createItem(inputEntry) : updateItem(entryId, inputEntry);
-              push(context,target.getParameter(BasicProvider.PARAM_FEED),newEntry);
+              push(request,target.getParameter(BasicProvider.PARAM_FEED),newEntry);
               if (newEntry != null) {
                   String loc = newEntry.getProperty("editLink");
                   ActivitiesResponseContext<ASObject> rc = 
@@ -175,7 +173,7 @@ public abstract class BasicAdapter exten
             }
             
         } catch (Exception e) {
-            return ProviderHelper.servererror(context, e.getMessage(), e);
+            return ProviderHelper.servererror(request, e.getMessage(), e);
         }
     }
 

Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseProvider.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseProvider.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseProvider.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseProvider.java Thu Oct 27 02:16:56 2011
@@ -96,7 +96,7 @@ public abstract class BaseProvider
       CollectionAdapter adapter = 
         getWorkspaceManager()
           .getCollectionAdapter(request);
-      if (adapter == null)
+      if (adapter == null && type != TargetType.TYPE_SERVICE)
         return ProviderHelper.servererror(request, null);
       RequestProcessor processor = 
         (RequestProcessor) this.requestProcessors

Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CollectionAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CollectionAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CollectionAdapter.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CollectionAdapter.java Thu Oct 27 02:16:56 2011
@@ -18,6 +18,7 @@
 package org.apache.abdera2.common.protocol;
 
 import com.google.common.base.Function;
+import com.google.common.base.Predicate;
 
 
 public interface CollectionAdapter {
@@ -26,4 +27,5 @@ public interface CollectionAdapter {
       Target target, 
       String method);
     
+    Predicate<RequestContext> acceptable();
 }

Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/DefaultWorkspaceManager.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/DefaultWorkspaceManager.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/DefaultWorkspaceManager.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/DefaultWorkspaceManager.java Thu Oct 27 02:16:56 2011
@@ -55,12 +55,13 @@ public class DefaultWorkspaceManager 
       return new Predicate<CollectionInfo>() {
         public boolean apply(CollectionInfo input) {
           String href = input.getHref(rc);
-          return (
+          boolean answer = (
             path.equals(href) || 
             (href != null && 
              path.startsWith(href) && 
              URI_GEN_DELIMS.contains(
               path.substring(href.length(), href.length() + 1))));
+          return answer;
         }
       }; 
     }

Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestProcessor.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestProcessor.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestProcessor.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestProcessor.java Thu Oct 27 02:16:56 2011
@@ -52,8 +52,14 @@ public abstract class RequestProcessor 
       this.predicate = predicate;
     }
   
+  private boolean applies(RequestContext request, Predicate<RequestContext> predicate) {
+    return predicate != null && predicate.apply(request);
+  }
+  
   protected ResponseContext actuallyApply(RequestContext request) {
-    if (predicate != null && !predicate.apply(request))
+    boolean adapter_ok = applies(request, adapter.acceptable());
+    boolean pred_ok = applies(request, predicate);
+    if (!adapter_ok && !pred_ok) // fail only if both are false
       return ProviderHelper.notallowed(request);
     Function<RequestContext,ResponseContext> handler = 
       adapter.handlerFor(

Modified: abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/AbstractEncryptedRequestFilter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/AbstractEncryptedRequestFilter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/AbstractEncryptedRequestFilter.java (original)
+++ abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/AbstractEncryptedRequestFilter.java Thu Oct 27 02:16:56 2011
@@ -17,7 +17,6 @@
  */
 package org.apache.abdera2.security.util.filters;
 
-import java.io.IOException;
 import java.security.Provider;
 import java.security.Security;
 import java.util.ArrayList;
@@ -25,19 +24,16 @@ import java.util.List;
 
 import org.apache.abdera2.Abdera;
 import org.apache.abdera2.common.misc.Chain;
+import org.apache.abdera2.common.misc.ExceptionHelper;
 import org.apache.abdera2.common.misc.Task;
 import org.apache.abdera2.common.protocol.RequestContext;
 import org.apache.abdera2.common.protocol.ResponseContext;
 import org.apache.abdera2.model.Document;
 import org.apache.abdera2.model.Element;
-import org.apache.abdera2.parser.ParseException;
-import org.apache.abdera2.parser.Parser;
-import org.apache.abdera2.parser.ParserOptions;
-import org.apache.abdera2.protocol.server.context.AtompubRequestContext;
+import org.apache.abdera2.protocol.server.impl.AbstractAtompubProvider;
 import org.apache.abdera2.security.Encryption;
 import org.apache.abdera2.security.EncryptionOptions;
 
-@SuppressWarnings("unchecked")
 public abstract class AbstractEncryptedRequestFilter implements Task<RequestContext,ResponseContext> {
 
     // The methods that allow encrypted bodies
@@ -65,37 +61,40 @@ public abstract class AbstractEncryptedR
         bootstrap(request);
         String method = request.getMethod();
         if (methods.contains(method.toUpperCase())) {
-            return chain.next(new DecryptingRequestContextWrapper(request));
+            return chain.next(setDecryptedDocument(request));
         } else
             return chain.next(request);
     }
 
+    protected RequestContext setDecryptedDocument(RequestContext request) {
+      try {
+        Document<Element> doc = AbstractAtompubProvider.getDocument(request);
+        if (doc != null) {
+          Abdera abdera = Abdera.getInstance();
+          Encryption enc = new org.apache.abdera2.security.Security(abdera).getEncryption();
+          if (enc.isEncrypted(doc)) {
+            Object arg = initArg(request);
+            EncryptionOptions encoptions = 
+              initEncryptionOptions(request, enc, arg);
+            doc = enc.decrypt(doc, encoptions);
+            if (doc != null) 
+              request.setAttribute(
+                Document.class.getName(), doc);
+          }
+        }
+      } catch (Exception e) {
+        throw ExceptionHelper.propogate(e);
+      }
+      return request;
+    }
+    
     protected abstract void bootstrap(RequestContext request);
 
     protected abstract Object initArg(RequestContext request);
 
-    protected abstract EncryptionOptions initEncryptionOptions(RequestContext request, Encryption encryption, Object arg);
+    protected abstract EncryptionOptions initEncryptionOptions(
+      RequestContext request, 
+      Encryption encryption, 
+      Object arg);
 
-    private class DecryptingRequestContextWrapper extends AtompubRequestContext {
-        public DecryptingRequestContextWrapper(RequestContext request) {
-            super(request);
-        }
-        public <T extends Element> Document<T> getDocument(Parser parser, ParserOptions options) throws ParseException,
-            IOException {
-            Document<Element> doc = super.getDocument();
-            try {
-                if (doc != null) {
-                    Abdera abdera = getAbdera();
-                    Encryption enc = new org.apache.abdera2.security.Security(abdera).getEncryption();
-                    if (enc.isEncrypted(doc)) {
-                        Object arg = initArg((AtompubRequestContext)request);
-                        EncryptionOptions encoptions = initEncryptionOptions((AtompubRequestContext)request, enc, arg);
-                        doc = enc.decrypt(doc, encoptions);
-                    }
-                }
-            } catch (Exception e) {
-            }
-            return (Document<T>)doc;
-        }
-    }
 }

Modified: abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/SignedRequestFilter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/SignedRequestFilter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/SignedRequestFilter.java (original)
+++ abdera/abdera2/security/src/main/java/org/apache/abdera2/security/util/filters/SignedRequestFilter.java Thu Oct 27 02:16:56 2011
@@ -17,6 +17,7 @@
  */
 package org.apache.abdera2.security.util.filters;
 
+import org.apache.abdera2.Abdera;
 import org.apache.abdera2.common.Localizer;
 import org.apache.abdera2.common.misc.Chain;
 import org.apache.abdera2.common.misc.Task;
@@ -25,7 +26,7 @@ import org.apache.abdera2.common.protoco
 import org.apache.abdera2.common.protocol.ProviderHelper;
 import org.apache.abdera2.model.Document;
 import org.apache.abdera2.model.Element;
-import org.apache.abdera2.protocol.server.context.AtompubRequestContext;
+import org.apache.abdera2.protocol.server.impl.AbstractAtompubProvider;
 import org.apache.abdera2.security.Security;
 import org.apache.abdera2.security.Signature;
 
@@ -39,16 +40,12 @@ public class SignedRequestFilter impleme
     public static final String CERTS = "org.apache.abdera.security.util.servlet.SignedRequestFilter.certs";
 
     public ResponseContext apply(RequestContext request, Chain<RequestContext,ResponseContext> chain) {
-        AtompubRequestContext context = 
-          request instanceof AtompubRequestContext ? 
-            (AtompubRequestContext)request : 
-            new AtompubRequestContext(request);
-        Security security = new Security(context.getAbdera());
+        Security security = new Security(Abdera.getInstance());
         Signature sig = security.getSignature();
         String method = request.getMethod();
         if (method.equals("POST") || method.equals("PUT")) {
             try {
-                Document<Element> doc = context.getDocument();
+                Document<Element> doc = AbstractAtompubProvider.getDocument(request);
                 if (security.notVerified(doc))
                     return ProviderHelper.badrequest(
                       request, 
@@ -61,7 +58,7 @@ public class SignedRequestFilter impleme
             } catch (Exception e) {
             }
         }
-        return chain.next(context);
+        return chain.next(request);
     }
 
 }

Modified: abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubCollectionAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubCollectionAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubCollectionAdapter.java (original)
+++ abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubCollectionAdapter.java Thu Oct 27 02:16:56 2011
@@ -17,13 +17,13 @@
  */
 package org.apache.abdera2.protocol.server.impl;
 
-import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collections;
 
 import org.apache.abdera2.Abdera;
 import org.apache.abdera2.factory.Factory;
 import org.apache.abdera2.common.protocol.AbstractCollectionAdapter;
+import org.apache.abdera2.common.protocol.ProviderHelper;
 import org.apache.abdera2.common.protocol.RequestContext;
 import org.apache.abdera2.common.protocol.ResponseContext;
 import org.apache.abdera2.common.protocol.ResponseContextException;
@@ -33,16 +33,16 @@ import org.apache.abdera2.model.Entry;
 import org.apache.abdera2.model.Feed;
 import org.apache.abdera2.parser.ParseException;
 import org.apache.abdera2.parser.Parser;
-import org.apache.abdera2.protocol.server.context.AtompubRequestContext;
 import org.apache.abdera2.protocol.server.context.FOMResponseContext;
 import org.apache.abdera2.protocol.server.model.AtompubCategoriesInfo;
 import org.apache.abdera2.protocol.server.model.AtompubCollectionInfo;
 import org.joda.time.DateTime;
 
+import com.google.common.base.Predicate;
+
 /**
  * Base CollectionAdapter implementation that provides a number of helper utility methods for adapter implementations.
  */
-@SuppressWarnings("unchecked")
 public abstract class AbstractAtompubCollectionAdapter 
   extends AbstractCollectionAdapter
   implements AtompubCollectionInfo {
@@ -126,17 +126,13 @@ public abstract class AbstractAtompubCol
 
         Document<Entry> entry_doc;
         try {
-            AtompubRequestContext context = (AtompubRequestContext) request;
-            entry_doc = (Document<Entry>)context.getDocument(parser).clone();
+          entry_doc = AbstractAtompubProvider.getDocument(parser,request);
         } catch (ParseException e) {
-            throw new ResponseContextException(400, e);
-        } catch (IOException e) {
-            throw new ResponseContextException(500, e);
-        }
-        if (entry_doc == null) {
-            return null;
+          throw new ResponseContextException(400, e);
+        } catch (Throwable t) {
+          throw new ResponseContextException(500, t);
         }
-        return entry_doc.getRoot();
+        return entry_doc == null ? null : entry_doc.getRoot();
     }
 
     public Collection asCollectionElement(RequestContext request) {
@@ -149,4 +145,8 @@ public abstract class AbstractAtompubCol
         }
         return collection;
     }
+    
+    public Predicate<RequestContext> acceptable() {
+      return ProviderHelper.isAtom();
+    }
 }

Modified: abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubProvider.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubProvider.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubProvider.java (original)
+++ abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubProvider.java Thu Oct 27 02:16:56 2011
@@ -33,12 +33,14 @@ import org.apache.abdera2.common.http.Qu
 import org.apache.abdera2.common.http.QualityHelper.QToken;
 import org.apache.abdera2.common.iri.IRI;
 import org.apache.abdera2.common.mediatype.MimeTypeHelper;
+import org.apache.abdera2.common.misc.ExceptionHelper;
 import org.apache.abdera2.common.protocol.AbstractResponseContext;
 import org.apache.abdera2.common.protocol.BaseProvider;
 import org.apache.abdera2.common.protocol.CollectionRequestProcessor;
 import org.apache.abdera2.common.protocol.EntryRequestProcessor;
 import org.apache.abdera2.common.protocol.MediaRequestProcessor;
 import org.apache.abdera2.common.protocol.RequestContext;
+import org.apache.abdera2.common.protocol.RequestContext.Scope;
 import org.apache.abdera2.common.protocol.RequestProcessor;
 import org.apache.abdera2.common.protocol.ResponseContext;
 import org.apache.abdera2.common.protocol.Provider;
@@ -55,10 +57,12 @@ import org.apache.abdera2.model.Extensib
 import org.apache.abdera2.model.Feed;
 import org.apache.abdera2.model.Link;
 import org.apache.abdera2.model.Service;
+import org.apache.abdera2.parser.ParseException;
+import org.apache.abdera2.parser.Parser;
+import org.apache.abdera2.parser.ParserOptions;
 import org.apache.abdera2.protocol.error.Error;
 import org.apache.abdera2.protocol.server.AtompubProvider;
 import org.apache.abdera2.protocol.server.AtompubResponseContext;
-import org.apache.abdera2.protocol.server.context.AtompubRequestContext;
 import org.apache.abdera2.protocol.server.context.FOMResponseContext;
 import org.apache.abdera2.protocol.server.context.StreamWriterResponseContext;
 import org.apache.abdera2.protocol.server.model.AtompubWorkspaceInfo;
@@ -324,12 +328,55 @@ public abstract class AbstractAtompubPro
         }
         return response;
     }
-
-    @Override
-    public ResponseContext apply(RequestContext request) {
-      return super.apply(
-        request instanceof AtompubRequestContext ? 
-          request : 
-          new AtompubRequestContext(request));
+    
+    public static <T extends Element>Document<T> getDocument(
+      RequestContext context)
+        throws ParseException, IOException {
+      return getDocument(null, null, context);
+    }
+
+    public static <T extends Element> Document<T> getDocument(
+      Parser parser, RequestContext context) 
+        throws ParseException, IOException {
+      return getDocument(parser,null,context);
+    }
+
+    public static <T extends Element> Document<T> getDocument(
+      ParserOptions options, 
+      RequestContext context) throws ParseException,
+        IOException {
+        return getDocument(null,options,context);
+    }
+
+    public static <T extends Element> Document<T> getDocument(
+      Parser parser, 
+      ParserOptions options, 
+      RequestContext context)
+        throws ParseException, IOException {
+      
+      Document<T> doc = context.getAttribute(Scope.REQUEST, Document.class.getName());
+      if (doc == null) {
+        try {
+          AtompubProvider provider = context.<AtompubProvider>getProvider();
+          Abdera abdera = provider.getAbdera();
+          log.debug(Localizer.get("PARSING.REQUEST.DOCUMENT"));
+          if (parser == null)
+              parser = abdera.getParser();
+          if (parser == null)
+              throw new IllegalArgumentException(
+                "No Parser implementation was provided");
+          if (options == null)
+            options = parser.getDefaultParserOptions();
+          doc = parser.parse(
+            context.getInputStream(), 
+            context.getResolvedUri().toString(), 
+            options);
+          context.setAttribute(Document.class.getName(), doc);
+        } catch (Throwable t) {
+          throw ExceptionHelper.propogate(t);
+        }
+      }
+      return doc;
     }
+
 }

Modified: abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubWorkspaceProvider.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubWorkspaceProvider.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubWorkspaceProvider.java (original)
+++ abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/AbstractAtompubWorkspaceProvider.java Thu Oct 27 02:16:56 2011
@@ -25,12 +25,10 @@ import org.apache.abdera2.common.protoco
 import org.apache.abdera2.common.protocol.EntryRequestProcessor;
 import org.apache.abdera2.common.protocol.MediaRequestProcessor;
 import org.apache.abdera2.common.protocol.ProviderHelper;
-import org.apache.abdera2.common.protocol.RequestContext;
 import org.apache.abdera2.common.protocol.RequestProcessor;
 import org.apache.abdera2.common.protocol.ResponseContext;
 import org.apache.abdera2.common.protocol.TargetType;
 import org.apache.abdera2.protocol.server.AtompubProvider;
-import org.apache.abdera2.protocol.server.context.AtompubRequestContext;
 import org.apache.abdera2.protocol.server.model.AtompubWorkspaceManager;
 import org.apache.abdera2.protocol.server.processors.ServiceRequestProcessor;
 
@@ -87,11 +85,4 @@ public abstract class AbstractAtompubWor
     return AbstractAtompubProvider.createErrorResponse(abdera,code,message,t);
   }
   
-  @Override
-  public ResponseContext apply(RequestContext request) {
-    return super.apply(
-      request instanceof AtompubRequestContext ? 
-        request:
-        new AtompubRequestContext(request));
-  }
 }
\ No newline at end of file

Modified: abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/multipart/AbstractMultipartCollectionAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/multipart/AbstractMultipartCollectionAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/multipart/AbstractMultipartCollectionAdapter.java (original)
+++ abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/multipart/AbstractMultipartCollectionAdapter.java Thu Oct 27 02:16:56 2011
@@ -27,6 +27,7 @@ import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.activation.MimeType;
 import javax.mail.Header;
 import javax.mail.MessagingException;
 import javax.mail.internet.InternetHeaders;
@@ -44,6 +45,7 @@ import org.apache.abdera2.common.mediaty
 import org.apache.abdera2.common.protocol.RequestContext;
 import org.apache.commons.codec.binary.Base64;
 
+import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 
 @SuppressWarnings("unchecked")
@@ -63,6 +65,17 @@ public abstract class AbstractMultipartC
 
     protected Map<String, String> accepts;
 
+    public Predicate<RequestContext> acceptable() {
+      return new Predicate<RequestContext>() {
+        public boolean apply(RequestContext input) {
+          MimeType mt = input.getContentType();
+          if (mt == null) return false;
+          return MimeTypeHelper.isMultipart(mt.toString()) ||
+                 MimeTypeHelper.isAtom(mt.toString());
+        }
+      };
+    }
+    
     public Iterable<String> getAccepts(RequestContext request) {
         Collection<String> acceptKeys = getAlternateAccepts(request).keySet();
         return Iterables.unmodifiableIterable(acceptKeys);

Modified: abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/provider/basic/BasicAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/provider/basic/BasicAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/provider/basic/BasicAdapter.java (original)
+++ abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/provider/basic/BasicAdapter.java Thu Oct 27 02:16:56 2011
@@ -25,8 +25,6 @@ import org.apache.abdera2.Abdera;
 import org.apache.abdera2.model.Document;
 import org.apache.abdera2.model.Entry;
 import org.apache.abdera2.model.Feed;
-import org.apache.abdera2.parser.Parser;
-import org.apache.abdera2.protocol.server.context.AtompubRequestContext;
 import org.apache.abdera2.protocol.server.impl.AbstractAtompubProvider;
 import org.apache.abdera2.protocol.server.provider.managed.FeedConfiguration;
 import org.apache.abdera2.protocol.server.provider.managed.ManagedCollectionAdapter;
@@ -104,16 +102,13 @@ public abstract class BasicAdapter exten
         return config.getFeedUri() + "/" + entryId;
     }
 
-    private <S extends ResponseContext>S createOrUpdateEntry(RequestContext context, boolean createFlag) {
+    private <S extends ResponseContext>S createOrUpdateEntry(RequestContext request, boolean createFlag) {
         try {
-            AtompubRequestContext request = (AtompubRequestContext) context;
             MimeType mimeType = request.getContentType();
             String contentType = mimeType == null ? null : mimeType.toString();
             if (contentType != null && !MimeTypeHelper.isAtom(contentType) && !MimeTypeHelper.isXml(contentType))
                 return (S)ProviderHelper.notsupported(request);
-            Abdera abdera = request.getAbdera();
-            Parser parser = abdera.getParser();
-            Entry inputEntry = (Entry)request.getDocument(parser).getRoot();
+            Entry inputEntry = AbstractAtompubProvider.<Entry>getDocument(request).getRoot();
             Target target = request.getTarget();
             String entryId = !createFlag ? target.getParameter(BasicProvider.PARAM_ENTRY) : null;
             Entry newEntry = createFlag ? createEntry(inputEntry) : updateEntry(entryId, inputEntry);
@@ -125,7 +120,7 @@ public abstract class BasicAdapter exten
                 return (S)ProviderHelper.notfound(request);
             }
         } catch (Exception e) {
-            return (S)ProviderHelper.servererror(context, e.getMessage(), e);
+            return (S)ProviderHelper.servererror(request, e.getMessage(), e);
         }
     }
 

Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/security/filter/SimpleAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/security/filter/SimpleAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/security/filter/SimpleAdapter.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/security/filter/SimpleAdapter.java Thu Oct 27 02:16:56 2011
@@ -34,7 +34,6 @@ import org.apache.abdera2.model.Document
 import org.apache.abdera2.model.Entry;
 import org.apache.abdera2.model.Feed;
 import org.apache.abdera2.parser.ParseException;
-import org.apache.abdera2.protocol.server.context.AtompubRequestContext;
 import org.apache.abdera2.protocol.server.context.FOMResponseContext;
 import org.apache.abdera2.protocol.server.context.StreamWriterResponseContext;
 import org.apache.abdera2.protocol.server.impl.AbstractAtompubCollectionAdapter;
@@ -141,16 +140,14 @@ public class SimpleAdapter extends Abstr
   
   private Function<RequestContext,ResponseContext> postItem() {
     return new Function<RequestContext,ResponseContext>() {
-      public ResponseContext apply(RequestContext input) {
-        AtompubRequestContext request = (AtompubRequestContext) input;
-        Abdera abdera = request.getAbdera();
+      public ResponseContext apply(RequestContext request) {
         try {
-            Document<Entry> entry_doc = (Document<Entry>)request.getDocument(abdera.getParser()).clone();
+            Document<Entry> entry_doc = (Document<Entry>)AbstractAtompubProvider.getDocument(request).clone();
             if (entry_doc != null) {
                 Entry entry = entry_doc.getRoot();
                 if (!AbstractAtompubProvider.isValidEntry(entry))
                     return ProviderHelper.badrequest(request);
-                setEntryDetails(request, entry, abdera.getFactory().newUuidUri());
+                setEntryDetails(request, entry, Abdera.getInstance().getFactory().newUuidUri());
                 Feed feed = getFeedDocument(request).getRoot();
                 feed.insertEntry(entry);
                 feed.setUpdated(DateTime.now());
@@ -197,13 +194,11 @@ public class SimpleAdapter extends Abstr
 
   private Function<RequestContext,ResponseContext> putItem() {
     return new Function<RequestContext,ResponseContext>() {
-      public ResponseContext apply(RequestContext input) {
-        AtompubRequestContext request = (AtompubRequestContext) input;
-        Abdera abdera = request.getAbdera();
+      public ResponseContext apply(RequestContext request) {
         Entry orig_entry = getAbderaEntry(request);
         if (orig_entry != null) {
             try {
-                Document<Entry> entry_doc = (Document<Entry>)request.getDocument(abdera.getParser()).clone();
+                Document<Entry> entry_doc = (Document<Entry>)AbstractAtompubProvider.getDocument(request).clone();
                 if (entry_doc != null) {
                     Entry entry = entry_doc.getRoot();
                     if (!entry.getId().equals(orig_entry.getId()))
@@ -250,9 +245,8 @@ public class SimpleAdapter extends Abstr
 
   private Function<RequestContext,ResponseContext> getCategories() {
     return new Function<RequestContext,ResponseContext>() {
-      public ResponseContext apply(RequestContext input) {
-        AtompubRequestContext request = (AtompubRequestContext) input;
-        return new StreamWriterResponseContext(request.getAbdera()) {
+      public ResponseContext apply(RequestContext request) {
+        return new StreamWriterResponseContext(Abdera.getInstance()) {
             protected void writeTo(StreamWriter sw) throws IOException {
                 sw.startDocument().startCategories(false).writeCategory("foo").writeCategory("bar")
                     .writeCategory("baz").endCategories().endDocument();

Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/custom/SimpleAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/custom/SimpleAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/custom/SimpleAdapter.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/custom/SimpleAdapter.java Thu Oct 27 02:16:56 2011
@@ -34,7 +34,6 @@ import org.apache.abdera2.model.Document
 import org.apache.abdera2.model.Entry;
 import org.apache.abdera2.model.Feed;
 import org.apache.abdera2.parser.ParseException;
-import org.apache.abdera2.protocol.server.context.AtompubRequestContext;
 import org.apache.abdera2.protocol.server.context.FOMResponseContext;
 import org.apache.abdera2.protocol.server.context.StreamWriterResponseContext;
 import org.apache.abdera2.protocol.server.impl.AbstractAtompubCollectionAdapter;
@@ -141,16 +140,15 @@ public class SimpleAdapter extends Abstr
     
     private Function<RequestContext,ResponseContext> postItem() {
       return new Function<RequestContext,ResponseContext>() {
-        public ResponseContext apply(RequestContext input) {
-          AtompubRequestContext request = (AtompubRequestContext) input;
-          Abdera abdera = request.getAbdera();
+        public ResponseContext apply(RequestContext request) {
           try {
-              Document<Entry> entry_doc = (Document<Entry>)request.getDocument(abdera.getParser()).clone();
+              Document<Entry> entry_doc = 
+                (Document<Entry>) AbstractAtompubProvider.<Entry>getDocument(request).clone();
               if (entry_doc != null) {
                   Entry entry = entry_doc.getRoot();
                   if (!AbstractAtompubProvider.isValidEntry(entry))
                       return ProviderHelper.badrequest(request);
-                  setEntryDetails(request, entry, abdera.getFactory().newUuidUri());
+                  setEntryDetails(request, entry, Abdera.getInstance().getFactory().newUuidUri());
                   Feed feed = getFeedDocument(request).getRoot();
                   feed.insertEntry(entry);
                   feed.setUpdated(DateTime.now());
@@ -189,13 +187,13 @@ public class SimpleAdapter extends Abstr
 
     private Function<RequestContext,ResponseContext> putItem() {
       return new Function<RequestContext,ResponseContext>() {
-        public ResponseContext apply(RequestContext input) {
-          AtompubRequestContext request = (AtompubRequestContext) input;
-          Abdera abdera = request.getAbdera();
+        public ResponseContext apply(RequestContext request) {
           Entry orig_entry = getAbderaEntry(request);
           if (orig_entry != null) {
               try {
-                  Document<Entry> entry_doc = (Document<Entry>)request.getDocument(abdera.getParser()).clone();
+                  Document<Entry> entry_doc = 
+                    (Document<Entry>)AbstractAtompubProvider
+                      .getDocument(request).clone();
                   if (entry_doc != null) {
                       Entry entry = entry_doc.getRoot();
                       if (!entry.getId().equals(orig_entry.getId()))
@@ -243,8 +241,7 @@ public class SimpleAdapter extends Abstr
     private Function<RequestContext,ResponseContext> getCategories() {
       return new Function<RequestContext,ResponseContext>() {
         public ResponseContext apply(RequestContext input) {
-          AtompubRequestContext request = (AtompubRequestContext) input;
-          return new StreamWriterResponseContext(request.getAbdera()) {
+          return new StreamWriterResponseContext(Abdera.getInstance()) {
               protected void writeTo(StreamWriter sw) throws IOException {
                   sw.startDocument().startCategories(false).writeCategory("foo").writeCategory("bar")
                       .writeCategory("baz").endCategories().endDocument();

Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/customer/CustomerAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/customer/CustomerAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/customer/CustomerAdapter.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/customer/CustomerAdapter.java Thu Oct 27 02:16:56 2011
@@ -34,7 +34,6 @@ import org.apache.abdera2.common.protoco
 import org.apache.abdera2.model.Content;
 import org.apache.abdera2.model.Element;
 import org.apache.abdera2.model.Person;
-import org.apache.abdera2.protocol.server.context.AtompubRequestContext;
 import org.apache.abdera2.protocol.server.impl.AbstractEntityCollectionAdapter;
 import org.joda.time.DateTime;
 
@@ -91,8 +90,7 @@ public class CustomerAdapter extends Abs
 
     @Override
     public List<Person> getAuthors(Customer entry, RequestContext context) throws ResponseContextException {
-        AtompubRequestContext request = (AtompubRequestContext) context;
-        Person author = request.getAbdera().getFactory().newAuthor();
+        Person author = Abdera.getInstance().getFactory().newAuthor();
         author.setName("Acme Industries");
         return Arrays.asList(author);
     }

Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedAdapter.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedAdapter.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedAdapter.java Thu Oct 27 02:16:56 2011
@@ -82,5 +82,4 @@ public class MultipartRelatedAdapter 
         }
         return accepts;
     }
-
 }

Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedTest.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedTest.java?rev=1189582&r1=1189581&r2=1189582&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedTest.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/server/multipart/MultipartRelatedTest.java Thu Oct 27 02:16:56 2011
@@ -40,16 +40,16 @@ public class MultipartRelatedTest {
             @Override
             protected AtompubProvider createProvider() {
                 DefaultAtompubProvider provider = new DefaultAtompubProvider("/");
-
                 Map<TargetType,Function<CollectionAdapter,? extends RequestProcessor>> map = 
                   new HashMap<TargetType,Function<CollectionAdapter,? extends RequestProcessor>>();
                 map.put(TargetType.TYPE_SERVICE, 
                   RequestProcessor.forClass(
                     MultipartRelatedServiceRequestProcessor.class, 
                     provider.getWorkspaceManager()));
+
                 provider.addRequestProcessors(map);            
-                MultipartRelatedAdapter ca = new MultipartRelatedAdapter("media");
-                
+                MultipartRelatedAdapter ca = 
+                  new MultipartRelatedAdapter("media");  
                 provider
                   .addWorkspace(
                     SimpleWorkspaceInfo
@@ -57,7 +57,6 @@ public class MultipartRelatedTest {
                       .title("multipart/related Workspace")
                       .collection(ca)
                       .get());
-
                 provider.init(null);
                 return provider;
             }