You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2008/01/22 18:26:32 UTC
svn commit: r614267 - in /incubator/abdera/java/branches/server_refactor/src:
main/java/org/apache/abdera/protocol/server/
main/java/org/apache/abdera/protocol/server/context/
main/java/org/apache/abdera/protocol/server/impl/
main/java/org/apache/abder...
Author: jmsnell
Date: Tue Jan 22 09:26:26 2008
New Revision: 614267
URL: http://svn.apache.org/viewvc?rev=614267&view=rev
Log:
Additional simplifications and changes as suggested by Dan.
ServiceContext has been eliminated and collapsed into Provider. The AbderaServlet would create a single Provider instance and use that for all requests. The Provider now provides the Subject and Target resolvers.
Transactional methods now take RequestContext as input
Added:
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicProvider.java
incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/TestProvider.java
Removed:
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/ServiceContext.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/context/AbstractServiceContext.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/context/DefaultServiceContext.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicServiceContext.java
incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/TestServiceContext.java
incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleServiceContext.java
Modified:
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Provider.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/RequestContext.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/ServiceManager.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Transactional.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/context/AbstractRequestContext.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/AbstractProvider.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/CollectionInfo.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/DefaultProvider.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleCollection.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleWorkspace.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicAdapter.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicWorkspace.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java
incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/ServletRequestContext.java
incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/JettyServer.java
incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/basic/BasicTest.java
incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/DefaultTest.java
incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java
incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Provider.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Provider.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Provider.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Provider.java Tue Jan 22 09:26:26 2008
@@ -17,9 +17,27 @@
*/
package org.apache.abdera.protocol.server;
+import java.util.Map;
+
+import javax.security.auth.Subject;
+
+import org.apache.abdera.Abdera;
+
public interface Provider {
+
+ void init(Abdera abdera, Map<String,String> properties);
+ Abdera getAbdera();
+
+ String getProperty(String name);
+
+ String[] getPropertyNames();
+
+ Subject resolveSubject(RequestContext request);
+
+ Target resolveTarget(RequestContext request);
+
ResponseContext process(RequestContext request);
}
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/RequestContext.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/RequestContext.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/RequestContext.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/RequestContext.java Tue Jan 22 09:26:26 2008
@@ -48,7 +48,7 @@
Abdera getAbdera();
- ServiceContext getServiceContext();
+ Provider getProvider();
Target getTarget();
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/ServiceManager.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/ServiceManager.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/ServiceManager.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/ServiceManager.java Tue Jan 22 09:26:26 2008
@@ -21,7 +21,7 @@
import org.apache.abdera.Abdera;
import org.apache.abdera.i18n.text.Localizer;
-import org.apache.abdera.protocol.server.context.DefaultServiceContext;
+import org.apache.abdera.protocol.server.impl.DefaultProvider;
import org.apache.abdera.util.ServiceUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -31,15 +31,6 @@
public static final String PROVIDER =
"org.apache.abdera.protocol.server.Provider";
- public static final String SUBJECT_RESOLVER =
- "org.apache.abdera.protocol.server.SubjectResolver";
-
- public static final String TARGET_RESOLVER =
- "org.apache.abdera.protocol.server.TargetResolver";
-
- public static final String SERVICE_CONTEXT =
- "org.apache.abdera.protocol.server.ServiceContext";
-
private final static Log log = LogFactory.getLog(ServiceManager.class);
private static ServiceManager INSTANCE = null;
@@ -63,21 +54,20 @@
return abdera;
}
- public ServiceContext newServiceContext(
+ public Provider newProvider (
Map<String,String> properties) {
Abdera abdera = getAbdera();
- String instance = properties.get(SERVICE_CONTEXT);
- log.debug(Localizer.sprintf("CREATING.NEW.INSTANCE","ServiceContext"));
- ServiceContext context =
- (ServiceContext) ServiceUtil.newInstance(
- SERVICE_CONTEXT,
+ String instance = properties.get(PROVIDER);
+ log.debug(Localizer.sprintf("CREATING.NEW.INSTANCE","Provider"));
+ Provider provider =
+ (Provider) ServiceUtil.newInstance(
+ PROVIDER,
(instance != null) ?
instance :
- DefaultServiceContext.class.getName(),
+ DefaultProvider.class.getName(),
abdera);
- log.debug(Localizer.sprintf("INITIALIZING.INSTANCE", "ServiceContext"));
- context.init(abdera, properties);
- return context;
+ log.debug(Localizer.sprintf("INITIALIZING.INSTANCE", "Provider"));
+ provider.init(abdera, properties);
+ return provider;
}
-
}
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Transactional.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Transactional.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Transactional.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/Transactional.java Tue Jan 22 09:26:26 2008
@@ -19,10 +19,10 @@
public interface Transactional {
- void start();
+ void start(RequestContext request);
- void end();
+ void end(RequestContext request);
- void compensate(Throwable t);
+ void compensate(RequestContext request, Throwable t);
}
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/context/AbstractRequestContext.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/context/AbstractRequestContext.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/context/AbstractRequestContext.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/context/AbstractRequestContext.java Tue Jan 22 09:26:26 2008
@@ -30,8 +30,8 @@
import org.apache.abdera.parser.ParseException;
import org.apache.abdera.parser.Parser;
import org.apache.abdera.parser.ParserOptions;
+import org.apache.abdera.protocol.server.Provider;
import org.apache.abdera.protocol.server.RequestContext;
-import org.apache.abdera.protocol.server.ServiceContext;
import org.apache.abdera.protocol.server.Target;
import org.apache.abdera.protocol.util.AbstractRequest;
import org.apache.commons.logging.Log;
@@ -43,7 +43,7 @@
private final static Log log = LogFactory.getLog(AbstractRequestContext.class);
- protected final ServiceContext context;
+ protected final Provider provider;
protected Subject subject;
protected Principal principal;
protected Target target;
@@ -53,18 +53,18 @@
protected Document<?> document;
protected AbstractRequestContext(
- ServiceContext context,
+ Provider provider,
String method,
IRI requestUri,
IRI baseUri) {
- this.context = context;
+ this.provider = provider;
this.method = method;
this.baseUri = baseUri;
this.requestUri = requestUri;
}
public Abdera getAbdera() {
- return context.getAbdera();
+ return provider.getAbdera();
}
@SuppressWarnings("unchecked")
@@ -143,8 +143,8 @@
return target;
}
- public ServiceContext getServiceContext() {
- return context;
+ public Provider getProvider() {
+ return provider;
}
public String getTargetPath() {
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/AbstractProvider.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/AbstractProvider.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/AbstractProvider.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/AbstractProvider.java Tue Jan 22 09:26:26 2008
@@ -17,6 +17,12 @@
*/
package org.apache.abdera.protocol.server.impl;
+import java.util.Map;
+
+import javax.security.auth.Subject;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.protocol.Resolver;
import org.apache.abdera.protocol.server.CollectionAdapter;
import org.apache.abdera.protocol.server.MediaCollectionAdapter;
import org.apache.abdera.protocol.server.Provider;
@@ -31,6 +37,47 @@
public abstract class AbstractProvider
implements Provider {
+ protected Abdera abdera;
+ protected Map<String,String> properties;
+
+ public void init(
+ Abdera abdera,
+ Map<String, String> properties) {
+ this.abdera = abdera;
+ this.properties = properties;
+ }
+
+ public String getProperty(String name) {
+ return properties.get(name);
+ }
+
+ public String[] getPropertyNames() {
+ return properties.keySet().toArray(new String[properties.size()]);
+ }
+
+ public Abdera getAbdera() {
+ return abdera;
+ }
+
+ public Subject resolveSubject(RequestContext request) {
+ Resolver<Subject> subjectResolver = getSubjectResolver(request);
+ return subjectResolver != null ?
+ subjectResolver.resolve(request) : null;
+ }
+
+ public Target resolveTarget(RequestContext request) {
+ Resolver<Target> targetResolver =
+ getTargetResolver(request);
+ return targetResolver != null ?
+ targetResolver.resolve(request) : null;
+ }
+
+ protected Resolver<Subject> getSubjectResolver(RequestContext request) {
+ return new SimpleSubjectResolver();
+ }
+
+ protected abstract Resolver<Target> getTargetResolver(RequestContext request);
+
public ResponseContext process(
RequestContext request) {
Target target = request.getTarget();
@@ -56,7 +103,7 @@
adapter instanceof Transactional ?
(Transactional)adapter : null;
try {
- if (transaction != null) transaction.start();
+ if (transaction != null) transaction.start(request);
if (type == TargetType.TYPE_CATEGORIES) {
if (method.equalsIgnoreCase("GET"))
return adapter.getCategories(request);
@@ -94,11 +141,11 @@
return adapter.extensionRequest(request);
} catch (Throwable e) {
if (transaction != null)
- transaction.compensate(e);
+ transaction.compensate(request,e);
return ProviderHelper.servererror(request, e);
} finally {
if (transaction != null)
- transaction.end();
+ transaction.end(request);
}
}
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/CollectionInfo.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/CollectionInfo.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/CollectionInfo.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/CollectionInfo.java Tue Jan 22 09:26:26 2008
@@ -20,15 +20,15 @@
import org.apache.abdera.protocol.server.CollectionAdapter;
import org.apache.abdera.protocol.server.RequestContext;
-public interface CollectionInfo
- extends CollectionAdapter {
+public interface CollectionInfo {
- public String getHref(RequestContext request);
+ String getHref(RequestContext request);
- public String getTitle(RequestContext request);
+ String getTitle(RequestContext request);
- public String[] getAccepts(RequestContext request);
+ String[] getAccepts(RequestContext request);
- public boolean isAdapterFor(RequestContext request);
+ boolean isAdapterFor(RequestContext request);
+ CollectionAdapter getCollectionAdapter(RequestContext request);
}
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/DefaultProvider.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/DefaultProvider.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/DefaultProvider.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/DefaultProvider.java Tue Jan 22 09:26:26 2008
@@ -21,8 +21,12 @@
import java.util.ArrayList;
import java.util.List;
+import javax.security.auth.Subject;
+
+import org.apache.abdera.protocol.Resolver;
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.ResponseContext;
+import org.apache.abdera.protocol.server.Target;
import org.apache.abdera.protocol.server.WorkspaceManager;
import org.apache.abdera.protocol.server.context.StreamWriterResponseContext;
import org.apache.abdera.util.Constants;
@@ -32,12 +36,28 @@
extends AbstractProvider {
private List<WorkspaceInfo> workspaces = new ArrayList<WorkspaceInfo>();
-
- public DefaultProvider() {}
+ private Resolver<Target> targetResolver;
+ private Resolver<Subject> subjectResolver;
public DefaultProvider(WorkspaceInfo... workspaces) {
for (WorkspaceInfo wi : workspaces)
addWorkspace(wi);
+ }
+
+ protected Resolver<Target> getTargetResolver(RequestContext request) {
+ return targetResolver;
+ }
+
+ public void setTargetResolver(Resolver<Target> targetResolver) {
+ this.targetResolver = targetResolver;
+ }
+
+ protected Resolver<Subject> getSubjectResolver(RequestContext request) {
+ return subjectResolver;
+ }
+
+ public void setSubjectResolver(Resolver<Subject> subjectResolver) {
+ this.subjectResolver = subjectResolver;
}
public void addWorkspace(WorkspaceInfo wi) {
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleCollection.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleCollection.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleCollection.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleCollection.java Tue Jan 22 09:26:26 2008
@@ -19,12 +19,11 @@
import org.apache.abdera.protocol.server.CollectionAdapter;
import org.apache.abdera.protocol.server.RequestContext;
-import org.apache.abdera.protocol.server.ResponseContext;
public class SimpleCollection
implements CollectionInfo {
- private final CollectionAdapter internal;
+ private final CollectionAdapter adapter;
private final String id;
private final String title;
private final String href;
@@ -36,7 +35,7 @@
String title,
String href,
String... accepts) {
- this.internal = adapter;
+ this.adapter = adapter;
this.id = id;
this.title = title;
this.accepts = accepts;
@@ -58,33 +57,8 @@
public boolean isAdapterFor(RequestContext request) {
return request.getTarget().getParameter("collection").equals(this.id);
}
-
- public ResponseContext deleteEntry(RequestContext request) {
- return internal.deleteEntry(request);
- }
-
- public ResponseContext extensionRequest(RequestContext request) {
- return internal.extensionRequest(request);
- }
-
- public ResponseContext getEntry(RequestContext request) {
- return internal.getEntry(request);
- }
-
- public ResponseContext getFeed(RequestContext request) {
- return internal.getFeed(request);
- }
-
- public ResponseContext postEntry(RequestContext request) {
- return internal.postEntry(request);
- }
-
- public ResponseContext putEntry(RequestContext request) {
- return internal.putEntry(request);
- }
- public ResponseContext getCategories(RequestContext request) {
- return internal.getCategories(request);
+ public CollectionAdapter getCollectionAdapter(RequestContext request) {
+ return adapter;
}
-
}
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleWorkspace.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleWorkspace.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleWorkspace.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/impl/SimpleWorkspace.java Tue Jan 22 09:26:26 2008
@@ -54,7 +54,8 @@
public CollectionAdapter getCollectionAdapter(
RequestContext request) {
for (CollectionInfo ci : getCollections(request)) {
- if (ci.isAdapterFor(request)) return ci;
+ if (ci.isAdapterFor(request))
+ return ci.getCollectionAdapter(request);
}
return null;
}
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicAdapter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicAdapter.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicAdapter.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicAdapter.java Tue Jan 22 09:26:26 2008
@@ -120,7 +120,7 @@
String entryId =
!createFlag ?
target.getParameter(
- BasicServiceContext.PARAM_ENTRY) : null;
+ BasicProvider.PARAM_ENTRY) : null;
Entry newEntry = createFlag
? createEntry(inputEntry)
: updateEntry(entryId, inputEntry);
@@ -148,7 +148,7 @@
public ResponseContext deleteEntry(
RequestContext request) {
Target target = request.getTarget();
- String entryId = target.getParameter(BasicServiceContext.PARAM_ENTRY);
+ String entryId = target.getParameter(BasicProvider.PARAM_ENTRY);
try {
return deleteEntry(entryId) ?
ProviderHelper.nocontent() :
@@ -166,7 +166,7 @@
public ResponseContext getEntry(
RequestContext request) {
Target target = request.getTarget();
- String entryId = target.getParameter(BasicServiceContext.PARAM_ENTRY);
+ String entryId = target.getParameter(BasicProvider.PARAM_ENTRY);
try {
Entry entry = getEntry(entryId);
return entry != null ?
Added: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicProvider.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicProvider.java?rev=614267&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicProvider.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicProvider.java Tue Jan 22 09:26:26 2008
@@ -0,0 +1,40 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License. For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.protocol.server.provider.basic;
+
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.impl.DefaultProvider;
+import org.apache.abdera.protocol.server.impl.RegexTargetResolver;
+
+public class BasicProvider
+ extends DefaultProvider {
+
+ public static final String PARAM_FEED = "feed";
+ public static final String PARAM_ENTRY = "entry";
+
+ public BasicProvider() {
+ setTargetResolver(
+ new RegexTargetResolver()
+ .setPattern("/", TargetType.TYPE_SERVICE)
+ .setPattern("/" + "([^/#?]+)", TargetType.TYPE_COLLECTION, PARAM_FEED)
+ .setPattern("/" + "([^/#?]+)/([^/#?]+)", TargetType.TYPE_ENTRY, PARAM_FEED, PARAM_ENTRY)
+ );
+ addWorkspace(new BasicWorkspace());
+ }
+
+}
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicWorkspace.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicWorkspace.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicWorkspace.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/provider/basic/BasicWorkspace.java Tue Jan 22 09:26:26 2008
@@ -66,7 +66,7 @@
.getAdapter(
request.getTarget()
.getParameter(
- BasicServiceContext.PARAM_FEED));
+ BasicProvider.PARAM_FEED));
} catch (Exception e) {
return null;
}
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java Tue Jan 22 09:26:26 2008
@@ -35,7 +35,6 @@
import org.apache.abdera.protocol.server.Provider;
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.ResponseContext;
-import org.apache.abdera.protocol.server.ServiceContext;
import org.apache.abdera.protocol.server.ServiceManager;
import org.apache.abdera.writer.StreamWriter;
import org.apache.commons.logging.Log;
@@ -53,48 +52,38 @@
private final static Log log = LogFactory.getLog(AbderaServlet.class);
protected ServiceManager manager;
- protected ServiceContext context;
+ protected Provider provider;
public void init() throws ServletException {
log.debug("Initialing Abdera Servlet");
manager = createServiceManager();
- context = createServiceContext();
- if (context == null) {
- log.debug("Cannot create service context");
- throw new ServletException("Cannot create service context");
- }
+ provider = createProvider();
+ log.debug("Using provider - " + provider);
}
public Abdera getAbdera() {
return ServiceManager.getAbdera();
}
- public ServiceContext getServiceContext() {
- return context;
- }
-
public ServiceManager getServiceManager() {
return manager;
}
- protected ServiceContext createServiceContext() {
- return manager.newServiceContext(
- getProperties(
- getServletConfig()));
- }
-
protected ServiceManager createServiceManager() {
return ServiceManager.getInstance();
}
+
+ protected Provider createProvider() {
+ return manager.newProvider(getProperties(getServletConfig()));
+ }
@Override
protected void service(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
- RequestContext reqcontext = new ServletRequestContext(context, request);
- Provider provider = context.getProvider(reqcontext);
- log.debug("Provider - " + provider);
+ RequestContext reqcontext =
+ new ServletRequestContext(provider, request);
try {
output(
request,
Modified: incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/ServletRequestContext.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/ServletRequestContext.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/ServletRequestContext.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/main/java/org/apache/abdera/protocol/server/servlet/ServletRequestContext.java Tue Jan 22 09:26:26 2008
@@ -26,17 +26,14 @@
import java.util.List;
import java.util.Locale;
-import javax.security.auth.Subject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.abdera.Abdera;
import org.apache.abdera.i18n.iri.IRI;
import org.apache.abdera.i18n.text.Localizer;
-import org.apache.abdera.protocol.Resolver;
+import org.apache.abdera.protocol.server.Provider;
import org.apache.abdera.protocol.server.RequestContext;
-import org.apache.abdera.protocol.server.ServiceContext;
-import org.apache.abdera.protocol.server.Target;
import org.apache.abdera.protocol.server.context.AbstractRequestContext;
public class ServletRequestContext
@@ -47,25 +44,18 @@
private HttpSession session;
public ServletRequestContext(
- ServiceContext context,
+ Provider provider,
HttpServletRequest request) {
super(
- context,
+ provider,
request.getMethod(),
initRequestUri(request),
- initBaseUri(context,request));
+ initBaseUri(provider,request));
this.request = request;
this.session = request.getSession(false);
-
- Resolver<Subject> subjectResolver = context.getSubjectResolver();
- principal = request.getUserPrincipal();
- subject = (subjectResolver != null)?
- subjectResolver.resolve(this) : null;
-
- Resolver<Target> targetResolver =
- context.getTargetResolver();
- target = (targetResolver != null) ?
- targetResolver.resolve(this) : null;
+ this.principal = request.getUserPrincipal();
+ this.subject = provider.resolveSubject(this);
+ this.target = provider.resolveTarget(this);
}
public Object getProperty(Property property) {
@@ -183,9 +173,9 @@
}
private static String getHost(
- ServiceContext context,
+ Provider provider,
HttpServletRequest request) {
- Abdera abdera = context.getAbdera();
+ Abdera abdera = provider.getAbdera();
String host = abdera.getConfiguration().getConfigurationOption(
"org.apache.abdera.protocol.server.Host");
return (host != null) ?
@@ -194,9 +184,9 @@
}
private static int getPort(
- ServiceContext context,
+ Provider provider,
HttpServletRequest request) {
- Abdera abdera = context.getAbdera();
+ Abdera abdera = provider.getAbdera();
String port = abdera.getConfiguration().getConfigurationOption(
"org.apache.abdera.protocol.server.Port");
return (port != null) ?
@@ -205,15 +195,15 @@
}
private static IRI initBaseUri(
- ServiceContext context,
+ Provider provider,
HttpServletRequest request) {
StringBuilder buffer =
new StringBuilder(
(request.isSecure())?
"https":"http");
buffer.append("://");
- buffer.append(getHost(context,request));
- int port = getPort(context,request);
+ buffer.append(getHost(provider,request));
+ int port = getPort(provider,request);
if (port != 80) {
buffer.append(":");
buffer.append(port);
Modified: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/JettyServer.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/JettyServer.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/JettyServer.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/JettyServer.java Tue Jan 22 09:26:26 2008
@@ -17,9 +17,8 @@
*/
package org.apache.abdera.protocol.server.test;
-import org.apache.abdera.protocol.server.ServiceContext;
+import org.apache.abdera.protocol.server.Provider;
import org.apache.abdera.protocol.server.ServiceManager;
-import org.apache.abdera.protocol.server.provider.basic.BasicServiceContext;
import org.apache.abdera.protocol.server.servlet.AbderaServlet;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.Context;
@@ -40,11 +39,11 @@
this.port = port;
}
- public void start(Class<? extends ServiceContext> _class) throws Exception {
+ public void start(Class<? extends Provider> _class) throws Exception {
server = new Server(port);
Context context = new Context(server, "/", Context.SESSIONS);
ServletHolder servletHolder = new ServletHolder(new AbderaServlet());
- servletHolder.setInitParameter(ServiceManager.SERVICE_CONTEXT, _class.getName());
+ servletHolder.setInitParameter(ServiceManager.PROVIDER, _class.getName());
context.addServlet(servletHolder, "/*");
server.start();
}
@@ -53,9 +52,4 @@
server.stop();
}
- public static void main(String... args) throws Exception {
- JettyServer js = new JettyServer();
- js.start(BasicServiceContext.class);
- js.stop();
- }
}
Modified: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/basic/BasicTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/basic/BasicTest.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/basic/BasicTest.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/basic/BasicTest.java Tue Jan 22 09:26:26 2008
@@ -33,7 +33,7 @@
import org.apache.abdera.protocol.client.AbderaClient;
import org.apache.abdera.protocol.client.ClientResponse;
import org.apache.abdera.protocol.client.RequestOptions;
-import org.apache.abdera.protocol.server.provider.basic.BasicServiceContext;
+import org.apache.abdera.protocol.server.provider.basic.BasicProvider;
import org.apache.abdera.protocol.server.test.JettyServer;
import org.apache.abdera.util.Constants;
import org.apache.abdera.util.MimeTypeHelper;
@@ -49,7 +49,7 @@
try {
if (server == null) {
server = new JettyServer();
- server.start(BasicServiceContext.class);
+ server.start(BasicProvider.class);
}
} catch (Exception e) {}
}
Modified: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/DefaultTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/DefaultTest.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/DefaultTest.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/DefaultTest.java Tue Jan 22 09:26:26 2008
@@ -49,7 +49,7 @@
try {
if (server == null) {
server = new JettyServer();
- server.start(TestServiceContext.class);
+ server.start(TestProvider.class);
}
} catch (Exception e) {}
}
Added: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/TestProvider.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/TestProvider.java?rev=614267&view=auto
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/TestProvider.java (added)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/impl/TestProvider.java Tue Jan 22 09:26:26 2008
@@ -0,0 +1,61 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License. For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.protocol.server.test.impl;
+
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.impl.DefaultProvider;
+import org.apache.abdera.protocol.server.impl.RegexTargetResolver;
+import org.apache.abdera.protocol.server.impl.SimpleCollection;
+import org.apache.abdera.protocol.server.impl.SimpleWorkspace;
+import org.apache.abdera.protocol.server.test.simple.SimpleAdapter;
+
+public class TestProvider
+ extends DefaultProvider {
+
+ public TestProvider() {
+ setTargetResolver(
+ new RegexTargetResolver()
+ .setPattern("/atom(\\?[^#]*)?", TargetType.TYPE_SERVICE)
+ .setPattern("/atom/([^/#?]+);categories", TargetType.TYPE_CATEGORIES, "collection")
+ .setPattern("/atom/([^/#?;]+)(\\?[^#]*)?", TargetType.TYPE_COLLECTION, "collection")
+ .setPattern("/atom/([^/#?]+)/([^/#?]+)(\\?[^#]*)?", TargetType.TYPE_ENTRY, "collection", "entry")
+ );
+ SimpleWorkspace workspace = new SimpleWorkspace();
+ workspace.setTitle("My Blog");
+ workspace.addCollection(
+ new SimpleCollection(
+ new SimpleAdapter(),
+ "feed1",
+ "entries1",
+ "/atom/feed1",
+ "application/atom+xml;type=entry"
+ )
+ );
+ workspace.addCollection(
+ new SimpleCollection(
+ new SimpleAdapter(),
+ "feed2",
+ "entries2",
+ "/atom/feed2",
+ "application/atom+xml;type=entry"
+ )
+ );
+ addWorkspace(workspace);
+ }
+
+}
Modified: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleProvider.java Tue Jan 22 09:26:26 2008
@@ -19,11 +19,15 @@
import java.io.IOException;
+import org.apache.abdera.protocol.Resolver;
import org.apache.abdera.protocol.server.CollectionAdapter;
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.ResponseContext;
+import org.apache.abdera.protocol.server.Target;
+import org.apache.abdera.protocol.server.TargetType;
import org.apache.abdera.protocol.server.context.StreamWriterResponseContext;
import org.apache.abdera.protocol.server.impl.AbstractWorkspaceProvider;
+import org.apache.abdera.protocol.server.impl.RegexTargetResolver;
import org.apache.abdera.util.Constants;
import org.apache.abdera.writer.StreamWriter;
@@ -34,13 +38,10 @@
private final String name;
private final String href;
- public SimpleProvider(
- CollectionAdapter adapter,
- String name,
- String href) {
- this.adapter = adapter;
- this.name = name;
- this.href = href;
+ public SimpleProvider() {
+ this.adapter = new SimpleAdapter();
+ this.name = "Simple";
+ this.href = "/atom/feed";
}
public CollectionAdapter getCollectionAdapter(
@@ -72,5 +73,13 @@
}
.setStatus(200)
.setContentType(Constants.APP_MEDIA_TYPE);
+ }
+
+ protected Resolver<Target> getTargetResolver(RequestContext request) {
+ return new RegexTargetResolver()
+ .setPattern("/atom(\\?[^#]*)?", TargetType.TYPE_SERVICE)
+ .setPattern("/atom/([^/#?]+);categories", TargetType.TYPE_CATEGORIES, "collection")
+ .setPattern("/atom/([^/#?;]+)(\\?[^#]*)?", TargetType.TYPE_COLLECTION, "collection")
+ .setPattern("/atom/([^/#?]+)/([^/#?]+)(\\?[^#]*)?", TargetType.TYPE_ENTRY, "collection","entry");
}
}
Modified: incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java?rev=614267&r1=614266&r2=614267&view=diff
==============================================================================
--- incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java (original)
+++ incubator/abdera/java/branches/server_refactor/src/test/java/org/apache/abdera/protocol/server/test/simple/SimpleTest.java Tue Jan 22 09:26:26 2008
@@ -49,7 +49,7 @@
try {
if (server == null) {
server = new JettyServer();
- server.start(SimpleServiceContext.class);
+ server.start(SimpleProvider.class);
}
} catch (Exception e) {}
}