Author: doll
Date: Fri May 23 06:15:37 2008
New Revision: 659534
URL: http://svn.apache.org/viewvc?rev=659534&view=rev
Log:
SHINDIG-303
Modified patch from David Primmer. Moves the restful format logic into a new
ValidRequestFilter. Removed logic from adapters and JsonFilter to be replaced
by this class. Non-valid formats are now rejected nicely.
Added:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/util/
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/util/ValidRequestFilter.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/ValidRequestTest.java
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/AbstractSocialEntityCollectionAdapter.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialApiProvider.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/json/JSONFilter.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/AbstractLargeRestfulTests.java
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/AbstractSocialEntityCollectionAdapter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/AbstractSocialEntityCollectionAdapter.java?rev=659534&r1=659533&r2=659534&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/AbstractSocialEntityCollectionAdapter.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/AbstractSocialEntityCollectionAdapter.java
Fri May 23 06:15:37 2008
@@ -26,6 +26,8 @@
import org.apache.shindig.social.opensocial.model.IdSpec;
import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
import org.apache.shindig.social.opensocial.util.BeanXmlConverter;
+import org.apache.shindig.social.abdera.util.ValidRequestFilter.Format;
+import org.apache.shindig.social.abdera.util.ValidRequestFilter;
import com.google.inject.Inject;
import org.apache.abdera.Abdera;
@@ -76,20 +78,6 @@
factory = new Abdera().getFactory();
}
- public enum Format {
- JSON("json"), ATOM("atom");
-
- private final String displayValue;
-
- private Format(String displayValue) {
- this.displayValue = displayValue;
- }
-
- public String getDisplayValue() {
- return displayValue;
- }
- }
-
/**
* All the adapters need access to the PeopleService, which has the basic
* social graph information. Each service adapter will also add an instance
@@ -172,7 +160,7 @@
return null;
}
}
-
+
/**
* Gets the IDs of connections of the given user.
*
@@ -186,23 +174,6 @@
}
/**
- * Returns the format (jsoc or atom) from the RequestContext's URL
parameters.
- *
- * @param request Abdera's RequestContext
- * @return The format and default to Format.JSON.
- */
- private Format getFormatTypeFromRequest(RequestContext request) {
- // TODO: should gracefully handle introspection if format param is missing.
- String format = request.getTarget().getParameter("format");
-
- if (format != null && format.equals(Format.ATOM.getDisplayValue())) {
- return Format.ATOM;
- } else {
- return Format.JSON;
- }
- }
-
- /**
* @param request RequestContext
* @param resourceRouteVariable The route variable for the entry. So, for a
* route pattern of /:collection/:id, with "id" resourceRouteVariable
this
@@ -241,7 +212,7 @@
@Override
public Object getContent(T entity, RequestContext request)
throws ResponseContextException {
- Format format = getFormatTypeFromRequest(request);
+ Format format = ValidRequestFilter.getFormatTypeFromRequest(request);
Content content = factory.newContent();
switch (format) {
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialApiProvider.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialApiProvider.java?rev=659534&r1=659533&r2=659534&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialApiProvider.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialApiProvider.java
Fri May 23 06:15:37 2008
@@ -18,6 +18,7 @@
package org.apache.shindig.social.abdera;
import org.apache.shindig.social.abdera.json.JSONFilter;
+import org.apache.shindig.social.abdera.util.ValidRequestFilter;
import com.google.inject.Inject;
import org.apache.abdera.protocol.server.TargetType;
@@ -79,6 +80,7 @@
;
addFilter(new JSONFilter());
+ addFilter(new ValidRequestFilter());
targetBuilder = routeManager;
targetResolver = routeManager;
}
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/json/JSONFilter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/json/JSONFilter.java?rev=659534&r1=659533&r2=659534&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/json/JSONFilter.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/json/JSONFilter.java
Fri May 23 06:15:37 2008
@@ -17,7 +17,8 @@
*/
package org.apache.shindig.social.abdera.json;
-import org.apache.shindig.social.abdera.AbstractSocialEntityCollectionAdapter;
+import org.apache.shindig.social.abdera.util.ValidRequestFilter.Format;
+import org.apache.shindig.social.abdera.util.ValidRequestFilter;
import org.apache.abdera.Abdera;
import org.apache.abdera.model.Document;
@@ -50,14 +51,11 @@
* pojo to atom and pojo to json. Need to fix abdera!
*/
public class JSONFilter implements Filter {
- private final String FORMAT_FIELD = "format";
- private final String ATOM = AbstractSocialEntityCollectionAdapter.Format
- .ATOM.getDisplayValue();
public ResponseContext filter(RequestContext request, FilterChain chain) {
ResponseContext resp = chain.next(request);
- String format = request.getParameter(FORMAT_FIELD);
- if (format != null && format.equalsIgnoreCase(ATOM)) {
+ Format format = ValidRequestFilter.getFormatTypeFromRequest(request);
+ if (format == Format.ATOM) {
return resp;
}
// If there is no content, it could be either due to some error such as
Added:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/util/ValidRequestFilter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/util/ValidRequestFilter.java?rev=659534&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/util/ValidRequestFilter.java
(added)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/util/ValidRequestFilter.java
Fri May 23 06:15:37 2008
@@ -0,0 +1,73 @@
+/*
+* 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.shindig.social.abdera.util;
+
+import org.apache.abdera.protocol.server.Filter;
+import org.apache.abdera.protocol.server.FilterChain;
+import org.apache.abdera.protocol.server.ProviderHelper;
+import org.apache.abdera.protocol.server.RequestContext;
+import org.apache.abdera.protocol.server.ResponseContext;
+
+
+public class ValidRequestFilter implements Filter {
+ public final static String FORMAT_FIELD = "format";
+ private final static String INVALID_FORMAT =
+ "Invalid format parameter. only atom/json are supported";
+
+ public enum Format {
+ JSON("json"), ATOM("atom");
+
+ private final String displayValue;
+
+ private Format(String displayValue) {
+ this.displayValue = displayValue;
+ }
+
+ public String getDisplayValue() {
+ return displayValue;
+ }
+ }
+
+ public ResponseContext filter(RequestContext request, FilterChain chain) {
+ Format format = getFormatTypeFromRequest(request);
+ if (format == null) {
+ return ProviderHelper.badrequest(request, INVALID_FORMAT);
+ }
+ request.setAttribute(FORMAT_FIELD, format);
+ return chain.next(request);
+ }
+
+ /**
+ * Returns the format (jsoc or atom) from the RequestContext's URL
parameters.
+ *
+ * @param request Abdera's RequestContext
+ * @return The format and default to Format.JSON.
+ */
+ public static Format getFormatTypeFromRequest(RequestContext request) {
+ // TODO: should gracefully handle introspection if format param is missing.
+ String format = request.getTarget().getParameter(FORMAT_FIELD);
+
+ if (format == null || format.equals(Format.JSON.getDisplayValue())) {
+ return Format.JSON;
+ } else if (format.equals(Format.ATOM.getDisplayValue())) {
+ return Format.ATOM;
+ } else {
+ return null;
+ }
+ }
+}
Modified:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/AbstractLargeRestfulTests.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/AbstractLargeRestfulTests.java?rev=659534&r1=659533&r2=659534&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/AbstractLargeRestfulTests.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/AbstractLargeRestfulTests.java
Fri May 23 06:15:37 2008
@@ -97,15 +97,15 @@
mimeType));
}
- protected void checkForGoodJsonResponse(ClientResponse response){
+ protected void checkForGoodJsonResponse(ClientResponse response) {
checkForGoodResponse(response, "application/json");
}
- protected void checkForGoodAtomResponse(ClientResponse response){
+ protected void checkForGoodAtomResponse(ClientResponse response) {
checkForGoodResponse(response, Constants.ATOM_MEDIA_TYPE);
}
- protected void checkForBadResponse(ClientResponse response){
+ protected void checkForBadResponse(ClientResponse response) {
assertNotNull(response);
assertEquals(Response.ResponseType.CLIENT_ERROR, response.getType());
}
Added:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/ValidRequestTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/ValidRequestTest.java?rev=659534&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/ValidRequestTest.java
(added)
+++
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/ValidRequestTest.java
Fri May 23 06:15:37 2008
@@ -0,0 +1,35 @@
+/*
+ * 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.shindig.social.abdera;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Test;
+
+
+public class ValidRequestTest extends AbstractLargeRestfulTests {
+
+ @Test
+ public void testGetActivityOfUserBadFormat() throws Exception {
+ resp = client.get(BASEURL + "/people/john.doe/@self?format=zatom");
+ checkForBadResponse(resp);
+ assertEquals(400, resp.getStatus());
+ }
+
+}
\ No newline at end of file