Author: lindner
Date: Sat Oct 31 11:35:04 2009
New Revision: 831532
URL: http://svn.apache.org/viewvc?rev=831532&view=rev
Log:
SHINDIG-1117 | Lists returned for JSON-RPC do not include all properties
Modified:
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/JsonRpcServlet.java
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/RestfulCollection.java
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/xstream/RestfullCollectionConverter.java
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/RestfulCollectionTest.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/atom/AtomFeed.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
Modified:
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/JsonRpcServlet.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/JsonRpcServlet.java?rev=831532&r1=831531&r2=831532&view=diff
==============================================================================
---
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/JsonRpcServlet.java
(original)
+++
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/JsonRpcServlet.java
Sat Oct 31 11:35:04 2009
@@ -37,6 +37,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -105,9 +106,10 @@
}
String content = null;
- Map<String, FormDataItem> formItems = new HashMap<String,
FormDataItem>();
+ Map<String, FormDataItem> formItems = Collections.emptyMap(); //
default for most requests
if (formParser.isMultipartContent(servletRequest)) {
+ formItems = new HashMap<String, FormDataItem>();
for (FormDataItem item : formParser.parse(servletRequest)) {
if (item.isFormField() && REQUEST_PARAM.equals(item.getFieldName())
&& content == null) {
// As per spec, in case of a multipart/form-data content, there
will be one form field
@@ -218,8 +220,22 @@
} else if (response instanceof RestfulCollection) {
Map<String, Object> map = Maps.newHashMap();
RestfulCollection<?> collection = (RestfulCollection<?>) response;
- map.put("startIndex", collection.getStartIndex());
- map.put("totalResults", collection.getTotalResults());
+ // Return sublist info
+ if (collection.getTotalResults() != collection.getEntry().size()) {
+ map.put("totalResults", collection.getTotalResults());
+ map.put("startIndex", collection.getStartIndex());
+ map.put("itemsPerPage", collection.getItemsPerPage());
+ }
+
+ if (!collection.isFiltered())
+ map.put("filtered", collection.isFiltered());
+
+ if (!collection.isUpdatedSince())
+ map.put("updatedSince", collection.isUpdatedSince());
+
+ if (!collection.isSorted())
+ map.put("sorted", collection.isUpdatedSince());
+
map.put("list", collection.getEntry());
result.put("data", map);
} else {
Modified:
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/RestfulCollection.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/RestfulCollection.java?rev=831532&r1=831531&r2=831532&view=diff
==============================================================================
---
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/RestfulCollection.java
(original)
+++
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/RestfulCollection.java
Sat Oct 31 11:35:04 2009
@@ -23,19 +23,50 @@
private List<T> entry;
private int startIndex;
private int totalResults;
+ private int itemsPerPage;
- private boolean filtered = true;
- private boolean sorted = true;
- private boolean updatedSince = true;
-
+ private boolean filtered = false;
+ private boolean sorted = false;
+ private boolean updatedSince = false;
+
+ /**
+ * Creates a new RestfulCollection that includes a complete set of entries.
+ *
+ * Default values for startIndex, totalResults, itemsPerPage and filtering
parameters are automatically set.
+ *
+ * @param entry a list of entries
+ */
public RestfulCollection(List<T> entry) {
- this(entry, 0, entry.size());
+ this(entry, 0, entry.size(), entry.size());
+ this.filtered=true;
+ this.sorted=true;
+ this.updatedSince=true;
}
+ /**
+ * @deprecated As of 1.1-BETA4 use {...@link
#RestfulCollection(java.util.List, int, int, int)} with the extra itemsPerPage
Argument
+ * This contructor will be removed in 1.1 RC1
+ */
+ @Deprecated
public RestfulCollection(List<T> entry, int startIndex, int totalResults) {
+ this(entry, startIndex, totalResults, entry.size());
+ }
+
+ /**
+ * Create a paginated collection response.
+ *
+ * @param entry paginated entries
+ * @param startIndex the index corresponding to the first element of {entry}
+ * @param totalResults the total size of the resultset
+ * @param itemsPerPage the size of the pagination, generally set to the
user-specified count parameter. Clamped to the totalResults size automatically
+ *
+ * @since 1.1-BETA4
+ */
+ public RestfulCollection(List<T> entry, int startIndex, int totalResults,
int itemsPerPage) {
this.entry = entry;
this.startIndex = startIndex;
this.totalResults = totalResults;
+ this.itemsPerPage = Math.min(itemsPerPage, totalResults);
}
public List<T> getEntry() {
@@ -58,6 +89,14 @@
return totalResults;
}
+ public void setItemsPerPage(int itemsPerPage) {
+ this.itemsPerPage = itemsPerPage;
+ }
+
+ public int getItemsPerPage() {
+ return itemsPerPage;
+ }
+
public void setTotalResults(int totalResults) {
this.totalResults = totalResults;
}
Modified:
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/xstream/RestfullCollectionConverter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/xstream/RestfullCollectionConverter.java?rev=831532&r1=831531&r2=831532&view=diff
==============================================================================
---
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/xstream/RestfullCollectionConverter.java
(original)
+++
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/xstream/RestfullCollectionConverter.java
Sat Oct 31 11:35:04 2009
@@ -61,12 +61,19 @@
public void marshal(Object source, HierarchicalStreamWriter writer,
MarshallingContext context) {
RestfulCollection<?> collection = (RestfulCollection<?>) source;
+
+ // Required per spec
writer.startNode("startIndex");
writer.setValue(String.valueOf(collection.getStartIndex()));
writer.endNode();
writer.startNode("totalResults");
writer.setValue(String.valueOf(collection.getTotalResults()));
writer.endNode();
+ writer.startNode("itemsPerPage");
+ writer.setValue(String.valueOf(collection.getItemsPerPage()));
+ writer.endNode();
+
+ // Optional
writer.startNode("isFiltered");
writer.setValue(String.valueOf(collection.isFiltered()));
writer.endNode();
@@ -76,6 +83,7 @@
writer.startNode("isUpdatedSince");
writer.setValue(String.valueOf(collection.isUpdatedSince()));
writer.endNode();
+
// TODO: resolve if entry is the container or the name of the object.
for (Object o : collection.getEntry()) {
writer.startNode("entry");
Modified:
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/RestfulCollectionTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/RestfulCollectionTest.java?rev=831532&r1=831531&r2=831532&view=diff
==============================================================================
---
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/RestfulCollectionTest.java
(original)
+++
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/RestfulCollectionTest.java
Sat Oct 31 11:35:04 2009
@@ -49,14 +49,17 @@
assertEquals(entry, collection.getEntry());
assertEquals(0, collection.getStartIndex());
assertEquals(entry.size(), collection.getTotalResults());
+ assertEquals(entry.size(), collection.getItemsPerPage());
int startIndex = 9;
int totalResults = 10;
- collection = new RestfulCollection<String>(entry, startIndex,
totalResults);
+ int resultsPerPage = 1;
+ collection = new RestfulCollection<String>(entry, startIndex,
totalResults, resultsPerPage);
assertEquals(entry, collection.getEntry());
assertEquals(startIndex, collection.getStartIndex());
assertEquals(totalResults, collection.getTotalResults());
+ assertEquals(resultsPerPage, collection.getItemsPerPage());
}
}
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/atom/AtomFeed.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/atom/AtomFeed.java?rev=831532&r1=831531&r2=831532&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/atom/AtomFeed.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/atom/AtomFeed.java
Sat Oct 31 11:35:04 2009
@@ -71,7 +71,7 @@
}
startIndex = r.getStartIndex();
totalResults = r.getTotalResults();
- itemsPerPage = entryList.size();
+ itemsPerPage = r.getItemsPerPage();
author = "?";
link = new AtomLink("rel", "???");
} else if ( obj instanceof DataCollection ) {
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java?rev=831532&r1=831531&r2=831532&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialService.java
Sat Oct 31 11:35:04 2009
@@ -298,8 +298,7 @@
int last = options.getFirst() + options.getMax();
result = result.subList(options.getFirst(), Math.min(last, totalSize));
- return ImmediateFuture.newInstance(new RestfulCollection<Person>(result,
options.getFirst(),
- totalSize));
+ return ImmediateFuture.newInstance(new RestfulCollection<Person>(result,
options.getFirst(), totalSize, options.getMax()));
} catch (JSONException je) {
throw new
ProtocolException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, je.getMessage(),
je);