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/29 01:44:37 UTC
svn commit: r1190679 [1/3] - in /abdera/abdera2:
activities/src/main/java/org/apache/abdera2/activities/model/
activities/src/main/java/org/apache/abdera2/activities/protocol/
activities/src/main/java/org/apache/abdera2/activities/protocol/basic/
activ...
Author: jmsnell
Date: Fri Oct 28 23:44:35 2011
New Revision: 1190679
URL: http://svn.apache.org/viewvc?rev=1190679&view=rev
Log:
More refactoring.. simplification, code improvements, etc
Added:
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractProvider.java (contents, props changed)
- copied, changed from r1190093, abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseProvider.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/pusher/Pushers.java (with props)
abdera/abdera2/core/src/main/java/org/apache/abdera2/util/MorePredicates.java (with props)
abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/simple/PusherExample.java (with props)
Removed:
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseProvider.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Transactional.java
abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/model/AtompubWorkspaceManager.java
Modified:
abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASBase.java
abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java
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/DefaultActivitiesProvider.java
abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicAdapter.java
abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicProvider.java
abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedProvider.java
abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedWorkspace.java
abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseImpl.java
abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseWrapper.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Authentication.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/CacheControl.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/EntityTag.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/QualityHelper.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/WebLink.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/iri/IRI.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/mediatype/MimeTypeHelper.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/ExceptionHelper.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MoreFunctions.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractCollectionAdapter.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractMessage.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractRequest.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponse.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponseContext.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractWorkspaceProvider.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseRequestContextWrapper.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseResponseContextWrapper.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CompressionFilter.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Message.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/MethodOverrideFilter.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/ProviderHelper.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestTemplateContext.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RouteManager.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/SimpleSubjectResolver.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/SimpleTarget.java
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/TransactionalRequestProcessor.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/model/Entry.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/model/Source.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMEntry.java
abdera/abdera2/core/src/main/java/org/apache/abdera2/parser/axiom/FOMSource.java
abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/xsltxpath/XPathExample.java
abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/rss/RssFeed.java
abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/rss/RssItem.java
abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/rss/RssSource.java
abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/context/StreamWriterResponseContext.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/impl/AbstractEntityCollectionAdapter.java
abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/impl/DefaultAtompubProvider.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/processors/MultipartRelatedServiceRequestProcessor.java
abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/provider/basic/BasicAdapter.java
abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/provider/basic/BasicProvider.java
abdera/abdera2/server/src/main/java/org/apache/abdera2/protocol/server/provider/managed/CollectionAdapterConfiguration.java
abdera/abdera2/test/src/main/java/org/apache/abdera2/test/security/filter/CustomProvider.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/multipart/MultipartRelatedAdapter.java
Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASBase.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASBase.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASBase.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/ASBase.java Fri Oct 28 23:44:35 2011
@@ -35,6 +35,8 @@ import org.apache.abdera2.common.iri.IRI
import org.apache.abdera2.common.lang.Lang;
import org.apache.abdera2.common.mediatype.MimeTypeParseException;
+import com.google.common.base.Function;
+
/**
* Root of the Activity Streams object hierarchy, provides the core property
* management and can be used to represent simple, untyped objects.
@@ -66,6 +68,10 @@ public class ASBase
return (T)exts.get(name);
}
+ public <T,R>R getProperty(String name, Function<T,R> transform) {
+ return (R)transform.apply(this.<T>getProperty(name));
+ }
+
public void setProperty(String name, Object value) {
if (value != null)
exts.put(name, value);
Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/model/Collection.java Fri Oct 28 23:44:35 2011
@@ -132,6 +132,7 @@ public class Collection<T extends ASObje
public static class CollectionGenerator<T extends ASObject>
extends ASObjectGenerator<Collection<T>> {
+ @SuppressWarnings("rawtypes")
private static <T extends ASObject>Class<? extends Collection<T>> t(Class _class) {
return (Class<? extends Collection<T>>) _class;
}
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=1190679&r1=1190678&r2=1190679&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 Fri Oct 28 23:44:35 2011
@@ -32,7 +32,8 @@ import org.apache.abdera2.common.protoco
import org.apache.abdera2.common.protocol.RequestContext;
import org.apache.abdera2.common.protocol.ResponseContext;
import org.apache.abdera2.common.protocol.ResponseContextException;
-import org.joda.time.DateTime;
+
+import static org.apache.abdera2.activities.protocol.AbstractActivitiesProvider.*;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
@@ -50,30 +51,37 @@ public abstract class AbstractActivities
return Arrays.asList("application/json");
}
- protected ResponseContext buildCreateEntryResponse(String link, ASBase base) {
+ protected ResponseContext buildCreateEntryResponse(
+ String link,
+ ASBase base) {
return
new ActivitiesResponseContext<ASBase>(base)
.setLocation(link)
.setContentLocation(link)
- .setEntityTag(AbstractActivitiesProvider.calculateEntityTag(base))
+ .setEntityTag(calculateEntityTag(base))
.setStatus(201);
}
- protected ResponseContext buildGetEntryResponse(RequestContext request, ASObject base)
+ protected ResponseContext buildGetEntryResponse(
+ RequestContext request,
+ ASObject base)
throws ResponseContextException {
base.setSource(createSourceObject(request));
return
new ActivitiesResponseContext<ASObject>(base)
- .setEntityTag(AbstractActivitiesProvider.calculateEntityTag(base));
+ .setEntityTag(calculateEntityTag(base));
}
- protected ResponseContext buildGetFeedResponse(Collection<ASObject> collection) {
+ protected ResponseContext buildGetFeedResponse(
+ Collection<ASObject> collection) {
return
new ActivitiesResponseContext<Collection<ASObject>>(collection)
- .setEntityTag(AbstractActivitiesProvider.calculateEntityTag(collection));
+ .setEntityTag(calculateEntityTag(collection));
}
- protected ServiceObject createSourceObject(RequestContext request) throws ResponseContextException {
+ protected ServiceObject createSourceObject(
+ RequestContext request)
+ throws ResponseContextException {
return
ServiceObject
.makeService()
@@ -90,18 +98,20 @@ public abstract class AbstractActivities
/**
* Create the base feed for the requested collection.
*/
- protected Collection<ASObject> createCollectionBase(RequestContext request) throws ResponseContextException {
+ protected Collection<ASObject> createCollectionBase(
+ RequestContext request)
+ throws ResponseContextException {
return
Collection
.makeCollection()
.id(getId(request))
- .set("title", getTitle(request))
- .set("updated", DateTime.now())
- .set("author",
+ .updatedNow()
+ .author(
PersonObject
.makePerson()
.displayName(getAuthor(request))
- .get())
+ .get())
+ .displayName(getTitle(request))
.get();
}
@@ -120,6 +130,8 @@ public abstract class AbstractActivities
}
public Predicate<RequestContext> acceptable() {
- return Predicates.or(super.acceptable(),AbstractActivitiesWorkspaceProvider.isJson());
+ return Predicates.or(
+ super.acceptable(),
+ 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=1190679&r1=1190678&r2=1190679&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 Fri Oct 28 23:44:35 2011
@@ -33,11 +33,10 @@ import org.apache.abdera2.activities.mod
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.AbstractProvider;
import org.apache.abdera2.common.protocol.CollectionRequestProcessor;
import org.apache.abdera2.common.protocol.EntryRequestProcessor;
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.common.protocol.WorkspaceManager;
@@ -45,26 +44,26 @@ import org.apache.abdera2.common.protoco
import org.joda.time.DateTime;
public abstract class AbstractActivitiesProvider
- extends BaseProvider
+ extends AbstractProvider
implements ActivitiesProvider {
- protected Set<TypeAdapter<?>> typeAdapters = new HashSet<TypeAdapter<?>>();
+ protected Set<TypeAdapter<?>> typeAdapters =
+ new HashSet<TypeAdapter<?>>();
protected final WorkspaceManager workspaceManager;
protected AbstractActivitiesProvider(
WorkspaceManager workspaceManager) {
this.workspaceManager = workspaceManager;
- this.requestProcessors.put(
- TargetType.TYPE_COLLECTION,
- RequestProcessor.forClass(
- CollectionRequestProcessor.class,
- workspaceManager,
- AbstractActivitiesWorkspaceProvider.isJson()));
- this.requestProcessors.put(
- TargetType.TYPE_ENTRY,
- RequestProcessor.forClass(
- EntryRequestProcessor.class,
- workspaceManager));
+ addRequestProcessor(
+ TargetType.TYPE_COLLECTION,
+ CollectionRequestProcessor.class,
+ AbstractActivitiesWorkspaceProvider.isJson(),
+ workspaceManager
+ );
+ addRequestProcessor(
+ TargetType.TYPE_ENTRY,
+ EntryRequestProcessor.class,
+ workspaceManager);
}
public void addTypeAdapter(TypeAdapter<?> typeAdapter) {
@@ -100,7 +99,10 @@ public abstract class AbstractActivities
if (base instanceof Activity) {
Activity ac = (Activity)base;
id = ac.getId();
- modified = DateTimes.format(ac.getUpdated() != null ? ac.getUpdated() : ac.getPublished());
+ modified = DateTimes.format(
+ ac.getUpdated() != null ?
+ ac.getUpdated() :
+ ac.getPublished());
} else if (base instanceof Collection) {
Collection<?> col = (Collection<?>)base;
id = col.getProperty("id");
@@ -109,7 +111,10 @@ public abstract class AbstractActivities
} else if (base instanceof ASObject) {
ASObject as = (ASObject)base;
id = as.getId().toString();
- modified = DateTimes.format(as.getUpdated() != null ? as.getUpdated() : as.getPublished());
+ modified = DateTimes.format(
+ as.getUpdated() != null ?
+ as.getUpdated() :
+ as.getPublished());
}
if (modified == null) modified = DateTimes.formatNow();
return EntityTag.generate(id, modified);
@@ -122,7 +127,9 @@ public abstract class AbstractActivities
- public static IO getIO(ActivitiesProvider provider, TypeAdapter<?>... adapters) {
+ public static IO getIO(
+ ActivitiesProvider provider,
+ TypeAdapter<?>... adapters) {
Set<TypeAdapter<?>> as =
new HashSet<TypeAdapter<?>>(provider.getTypeAdapters());
for (TypeAdapter<?> ta : adapters)
@@ -131,7 +138,9 @@ public abstract class AbstractActivities
}
@SuppressWarnings("unchecked")
- public static <T extends ASBase>T getASBaseFromRequestContext(RequestContext context) throws IOException {
+ public static <T extends ASBase>T getASBaseFromRequestContext(
+ RequestContext context)
+ throws IOException {
ASBase entity = context.getAttribute(Scope.REQUEST, ASBase.class.getName());
try {
if (entity == null) {
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=1190679&r1=1190678&r2=1190679&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 Fri Oct 28 23:44:35 2011
@@ -29,7 +29,6 @@ import org.apache.abdera2.common.protoco
import org.apache.abdera2.common.protocol.EntryRequestProcessor;
import org.apache.abdera2.common.protocol.Provider;
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.common.protocol.WorkspaceManager;
@@ -42,7 +41,8 @@ public abstract class AbstractActivities
WorkspaceManager,
ActivitiesProvider {
- protected Set<TypeAdapter<?>> typeAdapters = new HashSet<TypeAdapter<?>>();
+ protected final Set<TypeAdapter<?>> typeAdapters =
+ new HashSet<TypeAdapter<?>>();
public static Predicate<RequestContext> isJson() {
return new Predicate<RequestContext>() {
@@ -55,16 +55,15 @@ public abstract class AbstractActivities
}
protected AbstractActivitiesWorkspaceProvider() {
- this.requestProcessors.put(
+ addRequestProcessor(
TargetType.TYPE_COLLECTION,
- RequestProcessor.forClass(
- CollectionRequestProcessor.class,
- this,isJson()));
- this.requestProcessors.put(
- TargetType.TYPE_ENTRY,
- RequestProcessor.forClass(
- EntryRequestProcessor.class,
- this));
+ CollectionRequestProcessor.class,
+ isJson(),
+ this);
+ addRequestProcessor(
+ TargetType.TYPE_ENTRY,
+ EntryRequestProcessor.class,
+ this);
}
public void addTypeAdapter(TypeAdapter<?> typeAdapter) {
Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/DefaultActivitiesProvider.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/DefaultActivitiesProvider.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/DefaultActivitiesProvider.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/DefaultActivitiesProvider.java Fri Oct 28 23:44:35 2011
@@ -39,21 +39,22 @@ public class DefaultActivitiesProvider
protected Function<RequestContext,Target> targetResolver;
protected Function<Request,Subject> subjectResolver;
protected TargetBuilder<?> targetBuilder;
- protected RouteManager<TargetType,RequestContext> routeManager;
+ protected RouteManager<TargetType,RequestContext,String> routeManager;
public DefaultActivitiesProvider() {
this("/");
}
- @SuppressWarnings({ "unchecked", "rawtypes" })
public DefaultActivitiesProvider(String base) {
super(new DefaultWorkspaceManager());
if (base == null) base = "/";
routeManager =
- new RouteManager()
- .addRoute("stream", base + ":stream", TargetType.TYPE_COLLECTION)
- .addRoute("activity", base + ":stream/:activity", TargetType.TYPE_ENTRY)
- ;
+ RouteManager.<TargetType,RequestContext,String>make()
+ .with("stream", base + ":stream", TargetType.TYPE_COLLECTION)
+ .with("activity", base + ":stream/:activity", TargetType.TYPE_ENTRY)
+ .get()
+ ;
+
targetBuilder = routeManager;
targetResolver = routeManager;
}
@@ -105,13 +106,12 @@ public class DefaultActivitiesProvider
}
public void addWorkspace(WorkspaceInfo workspace) {
- ((DefaultWorkspaceManager)getWorkspaceManager()).addWorkspace(workspace);
+ ((DefaultWorkspaceManager)getWorkspaceManager()).addWorkspace(workspace);
}
public void addWorkspaces(Collection<WorkspaceInfo> workspaces) {
- for (WorkspaceInfo w : workspaces) {
- ((DefaultWorkspaceManager)getWorkspaceManager()).addWorkspace(w);
- }
+ for (WorkspaceInfo w : workspaces)
+ ((DefaultWorkspaceManager)getWorkspaceManager()).addWorkspace(w);
}
@SuppressWarnings("rawtypes")
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=1190679&r1=1190678&r2=1190679&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 Fri Oct 28 23:44:35 2011
@@ -44,6 +44,8 @@ import org.apache.abdera2.common.pusher.
import org.joda.time.DateTime;
import com.google.common.base.Function;
+import static com.google.common.base.Preconditions.*;
+import static org.apache.abdera2.common.misc.ExceptionHelper.*;
/**
* The BasicAdapter provides a simplistic interface for working with Atompub collections with a restricted set of
@@ -67,13 +69,15 @@ public abstract class BasicAdapter exten
public String getProperty(String key) throws Exception {
Object val = config.getProperty(key);
- if (val == null) {
- logger.warning("Cannot find property " + key + "in Adapter properties file for feed " + config.getFeedId());
- throw new RuntimeException();
- }
- if (val instanceof String)
- return (String)val;
- throw new RuntimeException();
+ checkNotNull(
+ val,
+ "Cannot find property in Adapter properties file for feed ",
+ key,
+ config.getFeedId());
+ checked(
+ val instanceof String,
+ RuntimeException.class);
+ return (String)val;
}
protected Collection<ASObject> createCollection() {
@@ -99,12 +103,12 @@ public abstract class BasicAdapter exten
}
protected void setObjectIdIfNull(ASObject object) throws Exception {
- if (object.getId() != null)
- return;
- String uuidUri = UUID.randomUUID().toString();
- String[] segments = uuidUri.split(":");
- String entryId = segments[segments.length - 1];
- object.setId(createEntryIdUri(entryId));
+ if (object.getId() != null)
+ return;
+ String uuidUri = UUID.randomUUID().toString();
+ String[] segments = uuidUri.split(":");
+ String entryId = segments[segments.length - 1];
+ object.setId(createEntryIdUri(entryId));
}
protected String createEntryIdUri(String entryId) throws Exception {
@@ -113,68 +117,71 @@ public abstract class BasicAdapter exten
private void push(RequestContext context, String channel, ASObject object) {
if (context.getAttribute(Scope.CONTAINER, "AbderaChannelManager") != null) {
- ChannelManager cm = (ChannelManager) context.getAttribute(Scope.CONTAINER, "AbderaChannelManager");
+ ChannelManager cm = (ChannelManager) context.getAttribute(
+ Scope.CONTAINER, "AbderaChannelManager");
if (cm != null) {
- Pusher<ASObject> pusher = cm.getPusher(channel);
- if (pusher != null) {
+ Pusher<ASObject> pusher =
+ cm.getPusher(channel);
+ if (pusher != null)
pusher.push(object);
- }
}
}
}
private ResponseContext createOrUpdateObject(RequestContext request, boolean createFlag) {
- try {
- MimeType mimeType = request.getContentType();
- String contentType = mimeType == null ? null : mimeType.toString();
- if (contentType != null && !MimeTypeHelper.isJson(contentType))
- return ProviderHelper.notsupported(request);
+ try {
+ MimeType mimeType = request.getContentType();
+ String contentType = mimeType == null ? null : mimeType.toString();
+ if (contentType != null && !MimeTypeHelper.isJson(contentType))
+ return ProviderHelper.notsupported(request);
- ASBase base = getEntryFromRequest(request);
- Target target = request.getTarget();
+ ASBase base = getEntryFromRequest(request);
+ Target target = request.getTarget();
- if (base instanceof Collection && createFlag && target.getType() == TargetType.TYPE_COLLECTION) {
- // only allow multiposts on collections.. these always create, never update
- Collection<ASObject> coll = (Collection<ASObject>) base;
- Collection<ASObject> retl = new Collection<ASObject>();
- int c = 0;
- for (ASObject inputEntry : coll.getItems()) {
- ASObject newEntry = createItem(inputEntry,c++);
- push(request,target.getParameter(BasicProvider.PARAM_FEED),newEntry);
- if (newEntry != null) {
- retl.addItem(newEntry);
- } else {
- ErrorObject err = new ErrorObject();
- err.setCode(-100);
- err.setDisplayName("Error adding object");
- retl.addItem(err);
- }
- }
- return
- new ActivitiesResponseContext<Collection<ASObject>>(retl)
- .setStatus(createFlag?201:200);
- } else if (base instanceof ASObject){
- String entryId = !createFlag ? target.getParameter(BasicProvider.PARAM_ENTRY) : null;
- ASObject inputEntry = (ASObject) base;
- ASObject newEntry = createFlag ? createItem(inputEntry) : updateItem(entryId, inputEntry);
- push(request,target.getParameter(BasicProvider.PARAM_FEED),newEntry);
+ if (base instanceof Collection &&
+ createFlag &&
+ target.getType() == TargetType.TYPE_COLLECTION) {
+ // only allow multiposts on collections.. these always create, never update
+ Collection<ASObject> coll = (Collection<ASObject>) base;
+ Collection<ASObject> retl = new Collection<ASObject>();
+ int c = 0;
+ for (ASObject inputEntry : coll.getItems()) {
+ ASObject newEntry = createItem(inputEntry,c++);
if (newEntry != null) {
- String loc = newEntry.getProperty("editLink");
- ActivitiesResponseContext<ASObject> rc =
- new ActivitiesResponseContext<ASObject>(newEntry);
- rc.setStatus(createFlag?201:200);
- rc.setLocation(loc);
- return rc;
+ push(request,target.getParameter(BasicProvider.PARAM_FEED),newEntry);
+ retl.addItem(newEntry);
} else {
- return ProviderHelper.notfound(request);
+ ErrorObject err = new ErrorObject();
+ err.setCode(-100);
+ err.setDisplayName("Error adding object");
+ retl.addItem(err);
}
- } else {
- return ProviderHelper.notallowed(request);
}
-
- } catch (Exception e) {
- return ProviderHelper.servererror(request, e.getMessage(), e);
- }
+ return
+ new ActivitiesResponseContext<Collection<ASObject>>(retl)
+ .setStatus(createFlag?201:200);
+ } else if (base instanceof ASObject){
+ String entryId = !createFlag ?
+ target.getParameter(BasicProvider.PARAM_ENTRY) :
+ null;
+ ASObject inputEntry = (ASObject) base;
+ ASObject newEntry = createFlag ?
+ createItem(inputEntry) :
+ updateItem(entryId, inputEntry);
+ if (newEntry != null) {
+ push(request,target.getParameter(BasicProvider.PARAM_FEED),newEntry);
+ String loc = newEntry.getProperty("editLink");
+ return
+ new ActivitiesResponseContext<ASObject>(newEntry)
+ .setStatus(createFlag?201:200)
+ .setLocation(loc);
+ } else
+ return ProviderHelper.notfound(request);
+ } else
+ return ProviderHelper.notallowed(request);
+ } catch (Exception e) {
+ return ProviderHelper.servererror(request, e.getMessage(), e);
+ }
}
private Function<RequestContext,ResponseContext> postItem() {
@@ -241,9 +248,9 @@ public abstract class BasicAdapter exten
new ActivitiesResponseContext<Collection<ASObject>>(collection)
.setStatus(200);
} else return ProviderHelper.notfound(input);
- } catch (Exception e) {
+ } catch (Exception e) {
return ProviderHelper.servererror(input, e.getMessage(), e);
- }
+ }
}
};
}
Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicProvider.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicProvider.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicProvider.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/basic/BasicProvider.java Fri Oct 28 23:44:35 2011
@@ -28,7 +28,8 @@ import org.apache.abdera2.common.protoco
/**
* Provider implementation intended to be used with BasicAdapter implementations
*/
-public class BasicProvider extends ManagedProvider {
+public class BasicProvider
+ extends ManagedProvider {
public static final String PARAM_FEED = "stream";
public static final String PARAM_ENTRY = "activity";
@@ -38,18 +39,18 @@ public class BasicProvider extends Manag
init();
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
private void init() {
- RouteManager routeManager =
- new RouteManager()
- .addRoute(
- "stream",
- "/:stream",
- TargetType.TYPE_COLLECTION)
- .addRoute(
- "activity",
- "/:stream/:activity",
- TargetType.TYPE_ENTRY);
+ RouteManager<TargetType,RequestContext,String> routeManager =
+ RouteManager.<TargetType,RequestContext,String>make()
+ .with(
+ "stream",
+ "/:stream",
+ TargetType.TYPE_COLLECTION)
+ .with(
+ "activity",
+ "/:stream/:activity",
+ TargetType.TYPE_ENTRY)
+ .get();
setTargetBuilder(
routeManager);
setTargetResolver(
@@ -58,9 +59,9 @@ public class BasicProvider extends Manag
public CollectionAdapter getCollectionAdapter(RequestContext request) {
try {
- return getCollectionAdapterManager(request)
- .getAdapter(
- request.getTarget().getParameter(PARAM_FEED));
+ return getCollectionAdapterManager(request)
+ .getAdapter(
+ request.getTarget().getParameter(PARAM_FEED));
} catch (Exception e) {
return null;
}
Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedProvider.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedProvider.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedProvider.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedProvider.java Fri Oct 28 23:44:35 2011
@@ -29,14 +29,14 @@ import org.apache.abdera2.common.protoco
public abstract class ManagedProvider
extends AbstractActivitiesWorkspaceProvider {
- protected abstract ServerConfiguration getServerConfiguration(RequestContext request);
+ protected abstract ServerConfiguration getServerConfiguration(RequestContext request);
- protected ManagedProvider() {
- addWorkspace(new ManagedWorkspace(this));
- }
+ protected ManagedProvider() {
+ addWorkspace(new ManagedWorkspace(this));
+ }
- public CollectionAdapterManager getCollectionAdapterManager(RequestContext request) {
- return new CollectionAdapterManager(getServerConfiguration(request));
+ public CollectionAdapterManager getCollectionAdapterManager(RequestContext request) {
+ return new CollectionAdapterManager(getServerConfiguration(request));
}
}
Modified: abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedWorkspace.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedWorkspace.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedWorkspace.java (original)
+++ abdera/abdera2/activities/src/main/java/org/apache/abdera2/activities/protocol/managed/ManagedWorkspace.java Fri Oct 28 23:44:35 2011
@@ -22,6 +22,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
+import org.apache.abdera2.common.misc.ExceptionHelper;
import org.apache.abdera2.common.protocol.RequestContext;
import org.apache.abdera2.common.protocol.CollectionInfo;
import org.apache.abdera2.common.protocol.WorkspaceInfo;
@@ -33,27 +34,27 @@ public class ManagedWorkspace implements
private String title = "Abdera - Activities";
public ManagedWorkspace(ManagedProvider provider) {
- this.provider = provider;
+ this.provider = provider;
}
public Collection<CollectionInfo> getCollections(RequestContext request) {
- CollectionAdapterManager cam = provider.getCollectionAdapterManager(request);
- List<CollectionInfo> collections = new ArrayList<CollectionInfo>();
- try {
- Map<String, FeedConfiguration> map = cam.listAdapters();
- for (FeedConfiguration config : map.values())
- collections.add(config);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return collections;
+ CollectionAdapterManager cam = provider.getCollectionAdapterManager(request);
+ List<CollectionInfo> collections = new ArrayList<CollectionInfo>();
+ try {
+ Map<String, FeedConfiguration> map = cam.listAdapters();
+ for (FeedConfiguration config : map.values())
+ collections.add(config);
+ } catch (Throwable e) {
+ throw ExceptionHelper.propogate(e);
+ }
+ return collections;
}
public String getTitle(RequestContext request) {
- return title;
+ return title;
}
public void setTitle(String title) {
- this.title = title;
+ this.title = title;
}
}
Modified: abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseImpl.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseImpl.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseImpl.java (original)
+++ abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseImpl.java Fri Oct 28 23:44:35 2011
@@ -53,6 +53,11 @@ import org.apache.http.protocol.HttpCont
import org.apache.http.util.EntityUtils;
import org.joda.time.DateTime;
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+
+import static com.google.common.base.Preconditions.*;
+
class ClientResponseImpl
implements ClientResponse {
@@ -305,4 +310,17 @@ class ClientResponseImpl
}
return links;
}
+
+ public <T> T getHeader(String name, Function<String, T> transform) {
+ checkNotNull(transform);
+ return transform.apply(getHeader(name));
+ }
+
+ public <T> Iterable<T> getHeaders(String name, Function<String, T> transform) {
+ Iterable<Object> objs = getHeaders(name);
+ List<T> list = new ArrayList<T>();
+ for (Object obj : objs)
+ list.add(transform.apply(obj.toString()));
+ return Iterables.unmodifiableIterable(list);
+ }
}
\ No newline at end of file
Modified: abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseWrapper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseWrapper.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseWrapper.java (original)
+++ abdera/abdera2/client/src/main/java/org/apache/abdera2/protocol/client/ClientResponseWrapper.java Fri Oct 28 23:44:35 2011
@@ -17,6 +17,8 @@ import org.apache.abdera2.common.http.We
import org.apache.abdera2.common.iri.IRI;
import org.joda.time.DateTime;
+import com.google.common.base.Function;
+
public class ClientResponseWrapper
implements ClientResponse {
@@ -166,4 +168,12 @@ public class ClientResponseWrapper
return internal.getSession();
}
+ public <T> T getHeader(String name, Function<String, T> transform) {
+ return internal.getHeader(name, transform);
+ }
+
+ public <T> Iterable<T> getHeaders(String name, Function<String, T> transform) {
+ return internal.getHeaders(name, transform);
+ }
+
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Authentication.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Authentication.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Authentication.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Authentication.java Fri Oct 28 23:44:35 2011
@@ -20,6 +20,7 @@ import static com.google.common.base.Pre
import java.io.ByteArrayOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -38,6 +39,7 @@ import static org.apache.abdera2.common.
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.StringUtils;
+import com.google.common.base.Function;
import com.google.common.base.Supplier;
/**
@@ -81,6 +83,15 @@ public class Authentication implements I
ALWAYS.add(name);
}
+ public static final Function<String, Iterable<Authentication>> parser =
+ new Function<String,Iterable<Authentication>>() {
+ public Iterable<Authentication> apply(String input) {
+ return input != null ?
+ parse(input) :
+ Collections.<Authentication>emptySet();
+ }
+ };
+
public static Iterable<Authentication> parse(String challenge) {
checkNotNull(challenge);
List<Authentication> challenges = new ArrayList<Authentication>();
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/CacheControl.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/CacheControl.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/CacheControl.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/CacheControl.java Fri Oct 28 23:44:35 2011
@@ -23,6 +23,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import com.google.common.base.Function;
import com.google.common.base.Supplier;
import com.google.common.collect.Iterables;
@@ -187,6 +188,13 @@ public final class CacheControl implemen
}
+ public static final Function<String,CacheControl> parser =
+ new Function<String,CacheControl>() {
+ public CacheControl apply(String input) {
+ return input != null ? parse(input) : null;
+ }
+ };
+
public static CacheControl parse(String cc) {
return CacheControlUtil.parseCacheControl(cc, make()).get();
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/EntityTag.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/EntityTag.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/EntityTag.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/EntityTag.java Fri Oct 28 23:44:35 2011
@@ -375,6 +375,22 @@ public class EntityTag
};
}
+ public static Function<String, EntityTag> parser =
+ new Function<String,EntityTag>() {
+ public EntityTag apply(String input) {
+ return input != null ? parse(input) : null;
+ }
+ };
+
+ public static Function<String, Iterable<EntityTag>> parseMultiple =
+ new Function<String,Iterable<EntityTag>>() {
+ public Iterable<EntityTag> apply(String input) {
+ return input != null ?
+ parseTags(input) :
+ Collections.<EntityTag>emptySet();
+ }
+ };
+
/**
* Utility method for generating ETags. Works by concatenating the UTF-8 bytes of the provided strings then
* generating an MD5 hash of the result.
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/QualityHelper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/QualityHelper.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/QualityHelper.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/QualityHelper.java Fri Oct 28 23:44:35 2011
@@ -20,6 +20,8 @@ package org.apache.abdera2.common.http;
import java.io.Serializable;
import java.util.Arrays;
+import com.google.common.base.Function;
+
public final class QualityHelper {
private QualityHelper() {}
@@ -129,4 +131,10 @@ public final class QualityHelper {
return qtokens;
}
+ public static final Function<String,QToken[]> parser =
+ new Function<String,QToken[]>() {
+ public QToken[] apply(String input) {
+ return input != null ? QualityHelper.orderByQ(input) : new QToken[0];
+ }
+ };
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/WebLink.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/WebLink.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/WebLink.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/WebLink.java Fri Oct 28 23:44:35 2011
@@ -18,6 +18,7 @@ import org.apache.abdera2.common.lang.La
import org.apache.abdera2.common.text.CharUtils;
import org.apache.abdera2.common.text.Codec;
+import com.google.common.base.Function;
import com.google.common.base.Supplier;
import com.google.common.collect.Iterables;
@@ -463,6 +464,16 @@ public class WebLink implements Serializ
return buf.toString();
}
+ public static final Function<String,Iterable<WebLink>> parser =
+ new Function<String,Iterable<WebLink>>() {
+ public Iterable<WebLink> apply(String input) {
+ return
+ input != null ?
+ parse(input) :
+ Collections.<WebLink>emptySet();
+ }
+ };
+
public static Iterable<WebLink> parse(String text) {
List<WebLink> links = new ArrayList<WebLink>();
if (text == null) return Collections.emptyList();
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/iri/IRI.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/iri/IRI.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/iri/IRI.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/iri/IRI.java Fri Oct 28 23:44:35 2011
@@ -621,4 +621,10 @@ public final class IRI implements Serial
};
}
+ public static final Function<String,IRI> parser =
+ new Function<String,IRI>() {
+ public IRI apply(String input) {
+ return input != null ? new IRI(input) : null;
+ }
+ };
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/mediatype/MimeTypeHelper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/mediatype/MimeTypeHelper.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/mediatype/MimeTypeHelper.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/mediatype/MimeTypeHelper.java Fri Oct 28 23:44:35 2011
@@ -401,4 +401,12 @@ public final class MimeTypeHelper {
}
};
}
+
+ public static final Function<String,MimeType> parser =
+ new Function<String,MimeType>() {
+ public MimeType apply(String input) {
+ return input != null ? MimeTypeHelper.create(input) : null;
+ }
+
+ };
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/ExceptionHelper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/ExceptionHelper.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/ExceptionHelper.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/ExceptionHelper.java Fri Oct 28 23:44:35 2011
@@ -7,6 +7,44 @@ import org.apache.commons.logging.Log;
public class ExceptionHelper {
+ public static <T extends Throwable>void checked(
+ boolean expression,
+ Class<T> _class) throws T {
+ checked(expression,_class,null);
+ }
+
+ public static <T extends Throwable>void checked(
+ boolean expression,
+ Class<T> _class,
+ String message,
+ Object... args) throws T {
+ if (!expression) {
+ T t = null;
+ try {
+ if (message != null) {
+ StringBuilder buf =
+ new StringBuilder(message);
+ if (args.length > 0)
+ buf.append(" ");
+ for (Object arg : args) {
+ buf.append('[')
+ .append(arg)
+ .append(']');
+ }
+ t = _class
+ .getConstructor(String.class)
+ .newInstance(buf.toString());
+ } else
+ t = _class
+ .getConstructor()
+ .newInstance();
+ } catch (Throwable e) {
+ throw propogate(e);
+ }
+ throw t;
+ }
+ }
+
public static RuntimeException propogate(Throwable t) {
if (t instanceof RuntimeException)
throw (RuntimeException)t;
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MoreFunctions.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MoreFunctions.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MoreFunctions.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/misc/MoreFunctions.java Fri Oct 28 23:44:35 2011
@@ -300,4 +300,14 @@ public class MoreFunctions {
}
}
+ public static final Function<String,Long> parseLong =
+ new Function<String,Long>() {
+ public Long apply(String input) {
+ try {
+ return (input != null) ? Long.valueOf(input) : -1;
+ } catch (NumberFormatException e) {
+ return -1L;
+ }
+ }
+ };
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractCollectionAdapter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractCollectionAdapter.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractCollectionAdapter.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractCollectionAdapter.java Fri Oct 28 23:44:35 2011
@@ -21,7 +21,6 @@ import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
-import org.apache.abdera2.activities.protocol.AbstractActivitiesWorkspaceProvider;
import org.apache.abdera2.common.text.UrlEncoding;
import org.apache.abdera2.common.date.DateTimes;
import org.apache.abdera2.common.http.EntityTag;
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractMessage.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractMessage.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractMessage.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractMessage.java Fri Oct 28 23:44:35 2011
@@ -26,48 +26,64 @@ import org.apache.abdera2.common.http.Ca
import org.apache.abdera2.common.http.Preference;
import org.apache.abdera2.common.http.WebLink;
import org.apache.abdera2.common.iri.IRI;
+import org.apache.abdera2.common.mediatype.MimeTypeHelper;
import org.apache.abdera2.common.text.Codec;
import org.apache.abdera2.common.text.UrlEncoding;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.Iterables;
+
+import static com.google.common.base.Preconditions.*;
/**
* Root impl for Message interface impls. This is provided solely as a way of keeping the interface and impl's
* consistent across the Request and Response objects.
*/
-public abstract class AbstractMessage implements Message {
+public abstract class AbstractMessage
+ implements Message {
+ public <T>T getHeader(String name, Function<String,T> transform) {
+ checkNotNull(transform);
+ return transform.apply(getHeader(name));
+ }
+
+ public <T>Iterable<T> getHeaders(String name, Function<String,T> transform) {
+ Iterable<Object> objs = this.getHeaders(name);
+ List<T> list = new ArrayList<T>();
+ for (Object obj : objs)
+ list.add(transform.apply(obj.toString()));
+ return Iterables.unmodifiableIterable(list);
+ }
+
public CacheControl getCacheControl() {
- String cc = getHeader("Cache-Control");
- return cc != null ? CacheControl.parse(cc) : null;
+ return getHeader("Cache-Control", CacheControl.parser);
}
public String getContentLanguage() {
- return getHeader("Content-Language");
+ return getHeader("Content-Language");
}
public IRI getContentLocation() {
- String value = getHeader("Content-Location");
- return (value != null) ? new IRI(value) : null;
+ return getHeader("Content-Location", IRI.parser);
}
public MimeType getContentType() {
- try {
- String value = getHeader("Content-Type");
- return (value != null) ? new MimeType(value) : null;
- } catch (javax.activation.MimeTypeParseException e) {
- throw new org.apache.abdera2.common.mediatype.MimeTypeParseException(e);
- }
+ return getHeader("Content-Type", MimeTypeHelper.parser);
}
+ private static final Function<String,String> DEC =
+ Functions.<String,String,String>compose(
+ UrlEncoding.decoder(),
+ Codec.decode());
+
public String getDecodedHeader(String header) {
- return UrlEncoding.decode(Codec.decode(getHeader(header)));
+ return getHeader(
+ header,
+ DEC);
}
public Iterable<String> getDecodedHeaders(String header) {
- Iterable<Object> headers = getHeaders(header);
- List<String> items = new ArrayList<String>();
- for (Object h : headers)
- items.add(UrlEncoding.decode(Codec.decode(h.toString())));
- return items;
+ return getHeaders(header, DEC);
}
public String getSlug() {
@@ -76,7 +92,7 @@ public abstract class AbstractMessage im
public Iterable<WebLink> getWebLinks() {
List<WebLink> links = new ArrayList<WebLink>();
- Iterable<Object> headers = this.getHeaders("Link");
+ Iterable<Object> headers = this.getHeaders("Link");
for (Object obj : headers) {
Iterable<WebLink> list = WebLink.parse(obj.toString());
for (WebLink link : list)
Copied: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractProvider.java (from r1190093, 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/AbstractProvider.java?p2=abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractProvider.java&p1=abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseProvider.java&r1=1190093&r2=1190679&rev=1190679&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/AbstractProvider.java Fri Oct 28 23:44:35 2011
@@ -32,16 +32,17 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.google.common.base.Function;
+import com.google.common.base.Predicate;
/**
* Base Provider implementation that provides the core implementation details for all Providers. This class provides the
* basic request routing logic.
*/
@SuppressWarnings({"unchecked","rawtypes"})
-public abstract class BaseProvider
+public abstract class AbstractProvider
implements Provider {
- private final static Log log = LogFactory.getLog(BaseProvider.class);
+ private final static Log log = LogFactory.getLog(AbstractProvider.class);
protected Map<String, Object> properties;
protected Set<Task<RequestContext,ResponseContext>> filters =
new LinkedHashSet<Task<RequestContext,ResponseContext>>();
@@ -99,7 +100,7 @@ public abstract class BaseProvider
if (adapter == null && type != TargetType.TYPE_SERVICE)
return ProviderHelper.notfound(request);
RequestProcessor processor =
- (RequestProcessor) this.requestProcessors
+ this.requestProcessors
.get(type)
.apply(adapter);
if (processor == null)
@@ -143,12 +144,48 @@ public abstract class BaseProvider
}
}
- public void setRequestProcessors(Map<TargetType, Function<CollectionAdapter,? extends RequestProcessor>> requestProcessors) {
+ public void setRequestProcessors(
+ Map<
+ TargetType,
+ Function<
+ CollectionAdapter,
+ ? extends RequestProcessor>>
+ requestProcessors) {
this.requestProcessors.clear();
this.requestProcessors.putAll(requestProcessors);
}
- public void addRequestProcessors(Map<TargetType, Function<CollectionAdapter,? extends RequestProcessor>> requestProcessors) {
+ public void addRequestProcessor(
+ TargetType type,
+ Class<? extends RequestProcessor> _class,
+ Predicate<RequestContext> predicate,
+ WorkspaceManager workspaceManager) {
+ this.requestProcessors.put(
+ type,
+ RequestProcessor.forClass(
+ _class,
+ workspaceManager,
+ predicate));
+ }
+
+ public void addRequestProcessor(
+ TargetType type,
+ Class<? extends RequestProcessor> _class,
+ WorkspaceManager workspaceManager) {
+ this.requestProcessors.put(
+ type,
+ RequestProcessor.forClass(
+ _class,
+ workspaceManager));
+ }
+
+ public void addRequestProcessors(
+ Map<
+ TargetType,
+ Function<
+ CollectionAdapter,
+ ? extends RequestProcessor>>
+ requestProcessors) {
this.requestProcessors.putAll(requestProcessors);
}
Propchange: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractProvider.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractRequest.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractRequest.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractRequest.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractRequest.java Fri Oct 28 23:44:35 2011
@@ -40,12 +40,11 @@ public abstract class AbstractRequest ex
}
public Iterable<Authentication> getAuthentication() {
- String auth = getHeader("Authorization");
- return auth != null ? Authentication.parse(auth) : null;
+ return getHeader("Authorization", Authentication.parser);
}
public Iterable<EntityTag> getIfMatch() {
- return EntityTag.parseTags(getHeader("If-Match"));
+ return getHeader("If-Match", EntityTag.parseMultiple);
}
public DateTime getIfModifiedSince() {
@@ -53,7 +52,7 @@ public abstract class AbstractRequest ex
}
public Iterable<EntityTag> getIfNoneMatch() {
- return EntityTag.parseTags(getHeader("If-None-Match"));
+ return getHeader("If-None-Match", EntityTag.parseMultiple);
}
public DateTime getIfUnmodifiedSince() {
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponse.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponse.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponse.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponse.java Fri Oct 28 23:44:35 2011
@@ -18,20 +18,16 @@
package org.apache.abdera2.common.protocol;
import org.apache.abdera2.common.iri.IRI;
+import org.apache.abdera2.common.misc.MoreFunctions;
import org.apache.abdera2.common.http.Authentication;
import org.apache.abdera2.common.http.EntityTag;
import org.apache.abdera2.common.http.ResponseType;
import org.joda.time.DateTime;
public abstract class AbstractResponse extends AbstractMessage implements Response {
-
+
public long getAge() {
- String value = getHeader("Age");
- try {
- return (value != null) ? Long.parseLong(value) : -1;
- } catch (NumberFormatException e) {
- return -1;
- }
+ return getHeader("Age", MoreFunctions.parseLong);
}
public String getAllow() {
@@ -39,17 +35,11 @@ public abstract class AbstractResponse e
}
public long getContentLength() {
- String value = getHeader("Content-Length");
- try {
- return (value != null) ? Long.parseLong(value) : -1;
- } catch (NumberFormatException e) {
- return -1;
- }
+ return getHeader("Content-Length", MoreFunctions.parseLong);
}
public EntityTag getEntityTag() {
- String etag = getHeader("ETag");
- return (etag != null) ? EntityTag.parse(getHeader("ETag")) : null;
+ return getHeader("ETag", EntityTag.parser);
}
public DateTime getExpires() {
@@ -61,16 +51,14 @@ public abstract class AbstractResponse e
}
public IRI getLocation() {
- String l = getHeader("Location");
- return l != null ? new IRI(l) : null;
+ return getHeader("Location",IRI.parser);
}
public ResponseType getType() {
- return ResponseType.select(getStatus());
+ return ResponseType.select(getStatus());
}
public Iterable<Authentication> getAuthentication() {
- String auth = getHeader("WWW-Authenticate");
- return auth != null ? Authentication.parse(auth) : null;
+ return getHeader("WWW-Authenticate", Authentication.parser);
}
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponseContext.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponseContext.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponseContext.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractResponseContext.java Fri Oct 28 23:44:35 2011
@@ -52,7 +52,8 @@ public abstract class AbstractResponseCo
protected String status_text = null;
protected boolean binary = false;
- protected Map<String, Iterable<Object>> headers = null;
+ protected final Map<String, Iterable<Object>> headers =
+ new HashMap<String,Iterable<Object>>();
public <T extends ResponseContext>T setBinary(boolean binary) {
this.binary = binary;
@@ -72,7 +73,7 @@ public abstract class AbstractResponseCo
}
public <T extends ResponseContext>T removeHeader(String name) {
- getHeaders().remove(name);
+ headers.remove(name);
return (T)this;
}
@@ -96,7 +97,6 @@ public abstract class AbstractResponseCo
}
public <T extends ResponseContext>T setHeader(String name, Object... vals) {
- Map<String, Iterable<Object>> headers = getHeaders();
Set<Object> values = new HashSet<Object>();
values.addAll(Arrays.asList(vals));
headers.put(name, values);
@@ -118,7 +118,6 @@ public abstract class AbstractResponseCo
}
public <T extends ResponseContext>T addHeaders(String name, Object... vals) {
- Map<String, Iterable<Object>> headers = getHeaders();
Iterable<Object> values = headers.get(name);
Set<Object> l =
values == null ?
@@ -130,13 +129,10 @@ public abstract class AbstractResponseCo
}
public Map<String, Iterable<Object>> getHeaders() {
- if (headers == null)
- headers = new HashMap<String, Iterable<Object>>();
return headers;
}
public DateTime getDateHeader(String name) {
- Map<String, Iterable<Object>> headers = getHeaders();
Iterable<Object> values = headers.get(name);
if (values != null) {
for (Object value : values) {
@@ -144,6 +140,10 @@ public abstract class AbstractResponseCo
return new DateTime(value);
else if (value instanceof DateTime)
return (DateTime)value;
+ else if (value instanceof Long)
+ return new DateTime((Long)value);
+ else if (value instanceof String)
+ return new DateTime(value);
else if (value instanceof Calendar)
return new DateTime(value);
}
@@ -157,36 +157,41 @@ public abstract class AbstractResponseCo
}
public String getHeader(String name) {
- Map<String, Iterable<Object>> headers = getHeaders();
Iterable<Object> values = headers.get(name);
Object obj = getFirst(values,null);
return obj != null ? obj.toString() : null;
}
public Iterable<Object> getHeaders(String name) {
- Map<String, Iterable<Object>> headers = getHeaders();
return headers.get(name);
}
public Iterable<String> getHeaderNames() {
- Map<String, Iterable<Object>> headers = getHeaders();
return headers.keySet();
}
public <T extends ResponseContext>T setAge(long age) {
- return (T)(age <= -1 ? removeHeader("Age") : setHeader("Age", String.valueOf(age)));
+ return (T)(age <= -1 ?
+ removeHeader("Age") :
+ setHeader("Age", String.valueOf(age)));
}
public <T extends ResponseContext>T setContentLanguage(String language) {
- return (T)(language == null ? removeHeader("Content-Language") : setHeader("Content-Language", language));
+ return (T)(language == null ?
+ removeHeader("Content-Language") :
+ setHeader("Content-Language", language));
}
public <T extends ResponseContext>T setContentLength(long length) {
- return (T)(length <= -1 ? removeHeader("Content-Length") : setHeader("Content-Length", String.valueOf(length)));
+ return (T)(length <= -1 ?
+ removeHeader("Content-Length") :
+ setHeader("Content-Length", String.valueOf(length)));
}
public <T extends ResponseContext>T setContentLocation(String uri) {
- return (T)(uri == null ? removeHeader("Content-Location") : setHeader("Content-Location", uri));
+ return (T)(uri == null ?
+ removeHeader("Content-Location") :
+ setHeader("Content-Location", uri));
}
public <T extends ResponseContext>T setSlug(String slug) {
@@ -215,23 +220,33 @@ public abstract class AbstractResponseCo
}
public <T extends ResponseContext>T setEntityTag(String etag) {
- return (T)(etag != null ? setEntityTag(new EntityTag(etag)) : removeHeader("ETag"));
+ return (T)(etag != null ?
+ setEntityTag(new EntityTag(etag)) :
+ removeHeader("ETag"));
}
public <T extends ResponseContext>T setEntityTag(EntityTag etag) {
- return (T)(etag == null ? removeHeader("ETag") : setHeader("ETag", etag.toString()));
+ return (T)(etag == null ?
+ removeHeader("ETag") :
+ setHeader("ETag", etag.toString()));
}
public <T extends ResponseContext>T setExpires(DateTime date) {
- return (T)(date == null ? removeHeader("Expires") : setHeader("Expires", date));
+ return (T)(date == null ?
+ removeHeader("Expires") :
+ setHeader("Expires", date));
}
public <T extends ResponseContext>T setLastModified(DateTime date) {
- return (T)(date == null ? removeHeader("Last-Modified") : setHeader("Last-Modified", date));
+ return (T)(date == null ?
+ removeHeader("Last-Modified") :
+ setHeader("Last-Modified", date));
}
public <T extends ResponseContext>T setLocation(String uri) {
- return (T)(uri == null ? removeHeader("Location") : setHeader("Location", uri));
+ return (T)(uri == null ?
+ removeHeader("Location") :
+ setHeader("Location", uri));
}
public <T extends ResponseContext>T setLocation(IRI iri) {
return setLocation(iri == null ? null : iri.toString());
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractWorkspaceProvider.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractWorkspaceProvider.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractWorkspaceProvider.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/AbstractWorkspaceProvider.java Fri Oct 28 23:44:35 2011
@@ -28,12 +28,13 @@ import org.joda.time.DateTime;
import com.google.common.base.Function;
/**
- * An abstract base Provider implementation that implements the WorkspaceManager interface. This is intended to be used
- * by Provider's that do not wish to use a separate WorkspaceManager object.
+ * An abstract base Provider implementation that implements the
+ * WorkspaceManager interface. This is intended to be used by
+ * Provider's that do not wish to use a separate WorkspaceManager object.
*/
public abstract class AbstractWorkspaceProvider
- extends BaseProvider
- implements WorkspaceManager {
+ extends AbstractProvider
+ implements WorkspaceManager {
protected Function<RequestContext,Target> targetResolver;
protected TargetBuilder<?> targetBuilder;
@@ -44,8 +45,9 @@ public abstract class AbstractWorkspaceP
return this;
}
- protected Function<RequestContext,Target> getTargetResolver(RequestContext request) {
- return targetResolver;
+ protected Function<RequestContext,Target> getTargetResolver(
+ RequestContext request) {
+ return targetResolver;
}
@SuppressWarnings("rawtypes")
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseRequestContextWrapper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseRequestContextWrapper.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseRequestContextWrapper.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseRequestContextWrapper.java Fri Oct 28 23:44:35 2011
@@ -35,6 +35,8 @@ import org.apache.abdera2.common.http.Pr
import org.apache.abdera2.common.http.WebLink;
import org.joda.time.DateTime;
+import com.google.common.base.Function;
+
@SuppressWarnings("unchecked")
public class BaseRequestContextWrapper
implements RequestContext{
@@ -247,4 +249,12 @@ public class BaseRequestContextWrapper
return request.getPreferApplied();
}
+ public <T> T getHeader(String name, Function<String, T> transform) {
+ return request.getHeader(name,transform);
+ }
+
+ public <T> Iterable<T> getHeaders(String name, Function<String, T> transform) {
+ return request.getHeaders(name,transform);
+ }
+
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseResponseContextWrapper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseResponseContextWrapper.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseResponseContextWrapper.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/BaseResponseContextWrapper.java Fri Oct 28 23:44:35 2011
@@ -33,6 +33,8 @@ import org.apache.abdera2.common.http.Re
import org.apache.abdera2.common.http.WebLink;
import org.joda.time.DateTime;
+import com.google.common.base.Function;
+
@SuppressWarnings("unchecked")
public class BaseResponseContextWrapper implements ResponseContext {
@@ -326,4 +328,12 @@ public class BaseResponseContextWrapper
return (T)this;
}
+ public <T> T getHeader(String name, Function<String, T> transform) {
+ return response.getHeader(name,transform);
+ }
+
+ public <T> Iterable<T> getHeaders(String name, Function<String, T> transform) {
+ return response.getHeaders(name, transform);
+ }
+
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CompressionFilter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CompressionFilter.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CompressionFilter.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/CompressionFilter.java Fri Oct 28 23:44:35 2011
@@ -34,13 +34,20 @@ import org.apache.abdera2.common.misc.Ta
*/
public class CompressionFilter implements Task<RequestContext,ResponseContext> {
- public ResponseContext apply(RequestContext request, Chain<RequestContext,ResponseContext> chain) {
- String encoding = request.getHeader("Accept-Encoding");
- QToken[] encodings = encoding != null ? QualityHelper.orderByQ(encoding) : new QToken[0];
+ public ResponseContext apply(
+ RequestContext request,
+ Chain<RequestContext,ResponseContext> chain) {
+ QToken[] encodings =
+ request.getHeader(
+ "Accept-Encoding",
+ QualityHelper.parser);
for (QToken enc : encodings) {
try {
- CompressionCodec codec = CompressionCodec.valueOf(enc.token().toUpperCase());
- return new CompressingResponseContextWrapper(chain.next(request), codec);
+ CompressionCodec codec =
+ CompressionCodec.valueOf(
+ enc.token().toUpperCase());
+ return new CompressingResponseContextWrapper(
+ chain.next(request), codec);
} catch (Exception e) {}
}
return chain.next(request);
@@ -49,36 +56,38 @@ public class CompressionFilter implement
/**
* A HttpServletResponseWrapper implementation that applies GZip or Deflate compression to response output.
*/
- public static class CompressingResponseContextWrapper extends BaseResponseContextWrapper {
-
+ public static class CompressingResponseContextWrapper
+ extends BaseResponseContextWrapper {
private final CompressionCodec codec;
-
- public CompressingResponseContextWrapper(ResponseContext response, CompressionCodec codec) {
+ public CompressingResponseContextWrapper(
+ ResponseContext response,
+ CompressionCodec codec) {
super(response);
this.codec = codec;
}
-
private OutputStream wrap(OutputStream out) {
- return new CompressingOutputStream(codec, out);
+ return new CompressingOutputStream(codec, out);
}
-
public void writeTo(OutputStream out) throws IOException {
- super.writeTo(wrap(out));
- out.flush();
+ super.writeTo(wrap(out));
+ out.flush();
}
}
- public static class CompressingOutputStream extends FilterOutputStream {
-
- public CompressingOutputStream(CompressionCodec codec, OutputStream out) {
+ public static class CompressingOutputStream
+ extends FilterOutputStream {
+ public CompressingOutputStream(
+ CompressionCodec codec,
+ OutputStream out) {
super(initStream(codec, out));
}
-
- public CompressingOutputStream(DeflaterOutputStream dout) {
+ public CompressingOutputStream(
+ DeflaterOutputStream dout) {
super(dout);
}
-
- private static OutputStream initStream(CompressionCodec codec, OutputStream out) {
+ private static OutputStream initStream(
+ CompressionCodec codec,
+ OutputStream out) {
try {
return Compression.wrap(out, new CompressionCodec[] {codec});
} catch (Exception e) {
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Message.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Message.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Message.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Message.java Fri Oct 28 23:44:35 2011
@@ -26,12 +26,18 @@ import org.apache.abdera2.common.http.We
import org.apache.abdera2.common.iri.IRI;
import org.joda.time.DateTime;
+import com.google.common.base.Function;
+
/**
* A protocol message. This is used as the basis for both request and response objects in order to provide a consistent
* interface.
*/
public interface Message {
+ <T>T getHeader(String name, Function<String,T> transform);
+
+ <T>Iterable<T> getHeaders(String name, Function<String,T> transform);
+
/**
* Get the value of the specified header
*/
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/MethodOverrideFilter.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/MethodOverrideFilter.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/MethodOverrideFilter.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/MethodOverrideFilter.java Fri Oct 28 23:44:35 2011
@@ -27,7 +27,8 @@ import org.apache.abdera2.common.misc.Ta
/**
* Abdera Filter implementation that supports the use of the X-HTTP-Method-Override header used by GData.
*/
-public class MethodOverrideFilter implements Task<RequestContext,ResponseContext> {
+public class MethodOverrideFilter
+ implements Task<RequestContext,ResponseContext> {
private Set<String> methods = new HashSet<String>();
@@ -73,7 +74,8 @@ public class MethodOverrideFilter implem
xheader = xheader.toUpperCase().trim();
if (method.equals("POST") &&
xheader != null &&
- methods.contains(method))
+ (methods.contains(method) ||
+ methods.contains("*")))
method = xheader;
this.method = method;
}
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/ProviderHelper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/ProviderHelper.java?rev=1190679&r1=1190678&r2=1190679&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/ProviderHelper.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/ProviderHelper.java Fri Oct 28 23:44:35 2011
@@ -17,8 +17,6 @@
*/
package org.apache.abdera2.common.protocol;
-import java.util.Date;
-
import javax.activation.MimeType;
import org.apache.abdera2.common.Localizer;
@@ -27,55 +25,76 @@ import org.apache.abdera2.common.text.Sl
import org.apache.abdera2.common.http.QualityHelper;
import org.apache.abdera2.common.http.QualityHelper.QToken;
import org.apache.abdera2.common.mediatype.MimeTypeHelper;
+import org.apache.abdera2.common.misc.MoreFunctions;
+import static org.apache.abdera2.common.misc.MoreFunctions.array;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import com.google.common.base.Function;
import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
public class ProviderHelper {
public final static Log log = LogFactory.getLog(ProviderHelper.class);
- private ProviderHelper() {
- }
+ private ProviderHelper() {}
- public static int getPageSize(RequestContext request, String pagesizeparam, int defaultpagesize) {
- int size = defaultpagesize;
- try {
- String _ps = request.getParameter(pagesizeparam);
- size = (_ps != null) ? Math.min(Math.max(Integer.parseInt(_ps), 0), defaultpagesize) : defaultpagesize;
- } catch (Exception e) {
+ public static final Function<RequestContext,Integer> getPageSize(
+ final String param,
+ final int def) {
+ return new Function<RequestContext,Integer>() {
+ public Integer apply(RequestContext input) {
+ int size = def;
+ try {
+ String _ps = input.getParameter(param);
+ size = (_ps != null) ?
+ Math.min(
+ Math.max(Integer.parseInt(_ps), 0), def) :
+ def;
+ } catch (Exception e) {}
+ log.debug(Localizer.sprintf("PAGE.SIZE", size));
+ return size;
}
- log.debug(Localizer.sprintf("PAGE.SIZE", size));
- return size;
+ };
}
-
- public static int getOffset(RequestContext request, String pageparam, int pageSize) {
- int offset = 0;
- try {
- String _page = request.getParameter(pageparam);
- int page = (_page != null) ? Integer.parseInt(_page) : 1;
- page = Math.max(page, 1) - 1;
- offset = pageSize * page;
- } catch (Exception e) {
- }
- log.debug(Localizer.sprintf("OFFSET", offset));
- return offset;
+
+ public static final Function<RequestContext,Integer> getOffset(
+ final String param,
+ final int pagesize) {
+ return new Function<RequestContext,Integer>() {
+ public Integer apply(RequestContext input) {
+ int offset = 0;
+ try {
+ String _page = input.getParameter(param);
+ int page = (_page != null) ?
+ Integer.parseInt(_page) : 1;
+ page = Math.max(page, 1) - 1;
+ offset = pagesize * page;
+ } catch (Exception e) {}
+ log.debug(Localizer.sprintf("OFFSET", offset));
+ return offset;
+ }
+ };
}
/**
* Returns an Error document based on the StreamWriter
*/
- public static ResponseContext createErrorResponse(Provider provider, final int code, final String message) {
+ public static ResponseContext createErrorResponse(
+ Provider provider,
+ final int code,
+ final String message) {
return createErrorResponse(provider, code, message, null);
}
/**
* Returns an Error document based on the StreamWriter
*/
- public static ResponseContext createErrorResponse(Provider provider,
- final int code,
- final String message,
- final Throwable t) {
+ public static ResponseContext createErrorResponse(
+ Provider provider,
+ final int code,
+ final String message,
+ final Throwable t) {
return (ResponseContext)provider.createErrorResponse(code, message, t);
}
@@ -248,12 +267,6 @@ public class ProviderHelper {
return sanitized;
}
- public static boolean beforeOrEqual(Date d1, Date d2) {
- long l1 = d1.getTime() / 1000; // drop milliseconds
- long l2 = d2.getTime() / 1000; // drop milliseconds
- return l1 <= l2;
- }
-
public static IRI resolveBase(RequestContext request) {
return request.getBaseUri().resolve(request.getUri());
}
@@ -268,21 +281,20 @@ public class ProviderHelper {
return buf.toString();
}
+ static private final Function<TargetType,String[]> METHODS_CHOICE =
+ MoreFunctions.<TargetType,String[]>choice()
+ .of(Predicates.<TargetType>isNull(), MoreFunctions.<String>array())
+ .of(Predicates.<TargetType>equalTo(TargetType.TYPE_COLLECTION), array("GET", "HEAD", "OPTIONS", "POST"))
+ .of(Predicates.<TargetType>equalTo(TargetType.TYPE_CATEGORIES), array("GET", "HEAD", "OPTIONS"))
+ .of(Predicates.<TargetType>equalTo(TargetType.TYPE_ENTRY), array("DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"))
+ .of(Predicates.<TargetType>equalTo(TargetType.TYPE_MEDIA), array("DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"))
+ .of(Predicates.<TargetType>equalTo(TargetType.TYPE_SERVICE), array("GET", "HEAD", "OPTIONS"))
+ .otherwise(array("GET","HEAD","OPTIONS"))
+ .get();
+
public static String[] getDefaultMethods(RequestContext request) {
TargetType type = request.getTarget().getType();
- if (type == null)
- return new String[0];
- if (type == TargetType.TYPE_COLLECTION)
- return new String[] {"GET", "HEAD", "OPTIONS", "POST"};
- if (type == TargetType.TYPE_CATEGORIES)
- return new String[] {"GET", "HEAD", "OPTIONS"};
- if (type == TargetType.TYPE_ENTRY)
- return new String[] {"DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"};
- if (type == TargetType.TYPE_MEDIA)
- return new String[] {"DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"};
- if (type == TargetType.TYPE_SERVICE)
- return new String[] {"GET", "HEAD", "OPTIONS"};
- return new String[] {"GET", "HEAD", "OPTIONS"};
+ return METHODS_CHOICE.apply(type);
}
public static boolean defaultCheckMethod(RequestContext request, String[] methods) {