Author: doll
Date: Thu May 29 05:46:15 2008
New Revision: 661322
URL: http://svn.apache.org/viewvc?rev=661322&view=rev
Log:
Added in a new RouteManager for the samplecontainer. This converts the
setstate, dumpstate and setevilness calls to use the restful code instead of
the old json wire format code. (with tests) It also makes the old
StateFileDataHandler obsolete.
To make this easy, I added a SimpleJsonAdapter. This class abstracts away some
of abderas very xml notions and makes a json only handler much simpler to
write. This change also moves the SocialRouteManager injections out of a method
and into the constructor.
Added:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SimpleJsonAdapter.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/samplecontainer/SampleContainerRouteManager.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/samplecontainer/
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/samplecontainer/SampleContainerRoutesTest.java
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialRouteManager.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/SocialApiProviderTestFixture.java
incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.html
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java?rev=661322&r1=661321&r2=661322&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java
Thu May 29 05:46:15 2008
@@ -18,6 +18,7 @@
*/
package org.apache.shindig.social;
+import org.apache.shindig.social.abdera.SocialRouteManager;
import org.apache.shindig.social.opensocial.ActivitiesService;
import org.apache.shindig.social.opensocial.DataService;
import org.apache.shindig.social.opensocial.OpenSocialDataHandler;
@@ -25,14 +26,15 @@
import org.apache.shindig.social.samplecontainer.BasicActivitiesService;
import org.apache.shindig.social.samplecontainer.BasicDataService;
import org.apache.shindig.social.samplecontainer.BasicPeopleService;
+import org.apache.shindig.social.samplecontainer.SampleContainerRouteManager;
import org.apache.shindig.social.samplecontainer.StateFileDataHandler;
+import com.google.common.collect.Lists;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.TypeLiteral;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -49,6 +51,8 @@
bind(new TypeLiteral<List<GadgetDataHandler>>() {})
.toProvider(GadgetDataHandlersProvider.class);
+
+ bind(SocialRouteManager.class).to(SampleContainerRouteManager.class);
}
public static class GadgetDataHandlersProvider
@@ -58,13 +62,12 @@
@Inject
public GadgetDataHandlersProvider(OpenSocialDataHandler
openSocialDataHandler, StateFileDataHandler stateFileHandler) {
- handlers = new ArrayList<GadgetDataHandler>();
- handlers.add(openSocialDataHandler);
- handlers.add(stateFileHandler);
+ handlers = Lists.newArrayList(openSocialDataHandler, stateFileHandler);
}
public List<GadgetDataHandler> get() {
return handlers;
}
}
+
}
Added:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SimpleJsonAdapter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SimpleJsonAdapter.java?rev=661322&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SimpleJsonAdapter.java
(added)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SimpleJsonAdapter.java
Thu May 29 05:46:15 2008
@@ -0,0 +1,107 @@
+package org.apache.shindig.social.abdera;
+
+import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
+
+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.ProviderHelper;
+import org.apache.abdera.protocol.server.context.BaseResponseContext;
+import org.apache.abdera.model.Entry;
+
+/**
+ * Classes which wish to handle arbitrary json requests (as gets or posts)
+ * should extend this class. Only one method, getResponse, needs to be
+ * implemented.
+ *
+ * This method should return the desired json response in the form
+ * of a java object which will be translate with the [EMAIL PROTECTED]
BeanJsonConverter}.
+ *
+ * If no response is needed, simply return null.
+ *
+ * See the [EMAIL PROTECTED]
org.apache.shindig.social.samplecontainer.SampleContainerRouteManager}
+ * and its inner classes for examples of how to handle simple json requests
with
+ * zero parameters, a parameter provided in a url, or a parameter provided in
+ * post data.
+ */
+public abstract class SimpleJsonAdapter implements CollectionAdapter {
+ protected final BeanJsonConverter beanJsonConverter;
+
+ public SimpleJsonAdapter(BeanJsonConverter beanJsonConverter) {
+ this.beanJsonConverter = beanJsonConverter;
+ }
+
+ /**
+ * Handles the abdera request and returns a java pojo which will be ouput
+ * as json.
+ *
+ * @return any java pojo which represents the json response of this
+ * method call. Return null if no response is needed.
+ * @param request The abdera request context
+ */
+ protected abstract Object getResponse(RequestContext request);
+
+ // TODO: We may eventually want to protect some of these requests from gets,
+ // and only allow posts. For now though, this is fine.
+ public ResponseContext getEntry(RequestContext request) {
+ Object responseObject = getResponse(request);
+
+ String content = "{'success' : true}";
+ if (responseObject != null) {
+ content = beanJsonConverter.convertToJson(responseObject).toString();
+ }
+
+ Entry entry = request.getAbdera().getFactory().newEntry();
+ entry.setContent(content);
+ return new BaseResponseContext<Entry>(entry);
+ }
+
+ protected String getParameter(RequestContext request, String name) {
+ return request.getTarget().getParameter(name);
+ }
+
+ protected void sendError(RequestContext request, String message) {
+ ProviderHelper.badrequest(request, message);
+ }
+
+ // This method is called when abdera receives a post it doesn't understand in
+ // xml. All post parameters are still in the same place as the get call, so
+ // we can just dispatch here and the underlying json handlers won't know the
+ // difference.
+ public ResponseContext extensionRequest(RequestContext requestContext) {
+ return getEntry(requestContext);
+ }
+
+
+ // Unimplemented methods. Simple json classes only handle gets and posts as
+ // they are not associated with any particular pojos. If you wish to
implement
+ // these methods use the AbstractSocialEntityCollectionAdapter class.
+
+ public ResponseContext postEntry(RequestContext requestContext) {
+ throw new UnsupportedOperationException();
+ }
+
+ public ResponseContext deleteEntry(RequestContext requestContext) {
+ throw new UnsupportedOperationException();
+ }
+
+ public ResponseContext headEntry(RequestContext requestContext) {
+ throw new UnsupportedOperationException();
+ }
+
+ public ResponseContext optionsEntry(RequestContext requestContext) {
+ throw new UnsupportedOperationException();
+ }
+
+ public ResponseContext putEntry(RequestContext requestContext) {
+ throw new UnsupportedOperationException();
+ }
+
+ public ResponseContext getFeed(RequestContext requestContext) {
+ throw new UnsupportedOperationException();
+ }
+
+ public ResponseContext getCategories(RequestContext requestContext) {
+ throw new UnsupportedOperationException();
+ }
+}
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialRouteManager.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialRouteManager.java?rev=661322&r1=661321&r2=661322&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialRouteManager.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/SocialRouteManager.java
Thu May 29 05:46:15 2008
@@ -17,8 +17,6 @@
*/
package org.apache.shindig.social.abdera;
-import com.google.inject.Inject;
-
import org.apache.abdera.protocol.server.CollectionAdapter;
import org.apache.abdera.protocol.server.TargetType;
import org.apache.abdera.protocol.server.impl.RouteManager;
@@ -28,10 +26,14 @@
private DataAdapter dataAdapter;
private ActivityAdapter activityAdapter;
private static final String BASE = "/social/rest/";
- private String base;
+ protected String base;
- public SocialRouteManager() {
+ public SocialRouteManager(PersonAdapter personAdapter, DataAdapter
dataAdapter,
+ ActivityAdapter activityAdapter) {
this.base = BASE;
+ this.personAdapter = personAdapter;
+ this.dataAdapter = dataAdapter;
+ this.activityAdapter = activityAdapter;
}
public void setRoutes() {
@@ -65,14 +67,6 @@
;
}
- @Inject
- public void setAdapters(PersonAdapter personAdapter, DataAdapter dataAdapter,
- ActivityAdapter activityAdapter) {
- this.personAdapter = personAdapter;
- this.dataAdapter = dataAdapter;
- this.activityAdapter = activityAdapter;
- }
-
/**
* This extension of the addRoute from the parent allows a RequestUrlTemplate
* to be passed in instead of a name and pattern. This is just a convenience
Added:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/samplecontainer/SampleContainerRouteManager.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/samplecontainer/SampleContainerRouteManager.java?rev=661322&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/samplecontainer/SampleContainerRouteManager.java
(added)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/samplecontainer/SampleContainerRouteManager.java
Thu May 29 05:46:15 2008
@@ -0,0 +1,170 @@
+/*
+ * 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.samplecontainer;
+
+import org.apache.shindig.social.abdera.ActivityAdapter;
+import org.apache.shindig.social.abdera.DataAdapter;
+import org.apache.shindig.social.abdera.PersonAdapter;
+import org.apache.shindig.social.abdera.SimpleJsonAdapter;
+import org.apache.shindig.social.abdera.SocialRouteManager;
+import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.apache.abdera.protocol.server.CollectionAdapter;
+import org.apache.abdera.protocol.server.RequestContext;
+import org.apache.abdera.protocol.server.TargetType;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Map;
+
[EMAIL PROTECTED]
+public class SampleContainerRouteManager extends SocialRouteManager {
+ private final DumpStateAdapter dumpStateAdapter;
+ private final SetStateAdapter setStateAdapter;
+ private final SetEvilnessAdapter setEvilnessAdapter;
+
+ /**
+ * Lists all of the restful urls specific to the samplecontainer.
+ */
+ public static enum SampleContainerUrls {
+ /**
+ * No parameters need to be passed in. Will return json representing the
+ * current state.
+ */
+ DUMP_STATE("samplecontainer/dumpstate", TargetType.TYPE_ENTRY),
+
+ /**
+ * doevil should be "true" or "false" indicating whether the sample
+ * container should return data that tries to hack the gadget
+ */
+ SET_EVILNESS("samplecontainer/setevilness/:doevil", TargetType.TYPE_ENTRY),
+
+ /**
+ * This url expects a post parameter called "fileurl".
+ */
+ SET_STATE("samplecontainer/setstate", TargetType.TYPE_ENTRY);
+
+ private String routePattern;
+ private TargetType targetType;
+
+ private SampleContainerUrls(String routePattern, TargetType targetType) {
+ this.targetType = targetType;
+ this.routePattern = routePattern;
+ }
+
+ public String getDescription() {
+ return toString();
+ }
+
+ public String getRoutePattern() {
+ return routePattern;
+ }
+
+ public TargetType getTargetType() {
+ return targetType;
+ }
+ }
+
+ @Inject
+ public SampleContainerRouteManager(PersonAdapter personAdapter,
+ DataAdapter dataAdapter, ActivityAdapter activityAdapter,
+ SampleContainerRouteManager.DumpStateAdapter dumpStateAdapter,
+ SampleContainerRouteManager.SetStateAdapter setStateAdapter,
+ SampleContainerRouteManager.SetEvilnessAdapter setEvilnessAdapter) {
+ super(personAdapter, dataAdapter, activityAdapter);
+ this.dumpStateAdapter = dumpStateAdapter;
+ this.setStateAdapter = setStateAdapter;
+ this.setEvilnessAdapter = setEvilnessAdapter;
+ }
+
+ public void setRoutes() {
+ super.setRoutes();
+ this.addRoute(SampleContainerUrls.DUMP_STATE, dumpStateAdapter);
+ this.addRoute(SampleContainerUrls.SET_STATE, setStateAdapter);
+ this.addRoute(SampleContainerUrls.SET_EVILNESS, setEvilnessAdapter);
+ }
+
+ public void addRoute(SampleContainerUrls url,
+ CollectionAdapter collectionAdapter) {
+ addRoute(url.getDescription(), base + url.getRoutePattern(),
+ url.getTargetType(), collectionAdapter);
+ }
+
+ // Simple adapters for the sample container
+
+ public static class DumpStateAdapter extends SimpleJsonAdapter {
+ private XmlStateFileFetcher fetcher;
+
+ @Inject
+ public DumpStateAdapter(XmlStateFileFetcher fetcher,
+ BeanJsonConverter beanJsonConverter) {
+ super(beanJsonConverter);
+ this.fetcher = fetcher;
+ }
+
+ protected Object getResponse(RequestContext request) {
+ Map<String, Object> state = Maps.newHashMap();
+ state.put("people", fetcher.getAllPeople());
+ state.put("friendIds", fetcher.getFriendIds());
+ state.put("data", fetcher.getAppData());
+ state.put("activities", fetcher.getActivities());
+ return state;
+ }
+ }
+
+ public static class SetStateAdapter extends SimpleJsonAdapter {
+ private XmlStateFileFetcher fetcher;
+
+ @Inject
+ public SetStateAdapter(XmlStateFileFetcher fetcher,
+ BeanJsonConverter beanJsonConverter) {
+ super(beanJsonConverter);
+ this.fetcher = fetcher;
+ }
+
+ protected Object getResponse(RequestContext request) {
+ try {
+ String stateFile = getParameter(request, "fileurl");
+ fetcher.resetStateFile(new URI(stateFile));
+ } catch (URISyntaxException e) {
+ sendError(request, "The state file was not a valid url");
+ }
+ return null;
+ }
+ }
+
+ public static class SetEvilnessAdapter extends SimpleJsonAdapter {
+ private XmlStateFileFetcher fetcher;
+
+ @Inject
+ public SetEvilnessAdapter(XmlStateFileFetcher fetcher,
+ BeanJsonConverter beanJsonConverter) {
+ super(beanJsonConverter);
+ this.fetcher = fetcher;
+ }
+
+ protected Object getResponse(RequestContext request) {
+ String doEvil = getParameter(request, "doevil");
+ fetcher.setEvilness(Boolean.valueOf(doEvil));
+ return null;
+ }
+ }
+}
Modified:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java?rev=661322&r1=661321&r2=661322&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
Thu May 29 05:46:15 2008
@@ -37,6 +37,8 @@
import org.apache.shindig.social.samplecontainer.BasicDataService;
import org.apache.shindig.social.samplecontainer.BasicPeopleService;
import org.apache.shindig.social.samplecontainer.XmlStateFileFetcher;
+import org.apache.shindig.social.samplecontainer.SampleContainerRouteManager;
+import org.apache.shindig.social.abdera.SocialRouteManager;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -64,6 +66,7 @@
bind(ActivitiesService.class).to(BasicActivitiesService.class);
bind(XmlStateFileFetcher.class).to(MockXmlStateFileFetcher.class);
+ bind(SocialRouteManager.class).to(SampleContainerRouteManager.class);
bind(SecurityTokenDecoder.class).to(BasicSecurityTokenDecoder.class);
}
@@ -204,7 +207,7 @@
}
public void setEvilness(boolean doEvil) {
- throw new UnsupportedOperationException();
+ // Ignore
}
}
Modified:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/SocialApiProviderTestFixture.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/SocialApiProviderTestFixture.java?rev=661322&r1=661321&r2=661322&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/SocialApiProviderTestFixture.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/abdera/SocialApiProviderTestFixture.java
Thu May 29 05:46:15 2008
@@ -27,6 +27,9 @@
public final SocialApiProvider provider = new SocialApiProvider();
public SocialApiProviderTestFixture() {
- provider.setSocialRouteManager(new SocialRouteManager());
+ provider.setSocialRouteManager(new SocialRouteManager(
+ mock(PersonAdapter.class),
+ mock(DataAdapter.class),
+ mock(ActivityAdapter.class)));
}
}
Added:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/samplecontainer/SampleContainerRoutesTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/samplecontainer/SampleContainerRoutesTest.java?rev=661322&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/samplecontainer/SampleContainerRoutesTest.java
(added)
+++
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/samplecontainer/SampleContainerRoutesTest.java
Thu May 29 05:46:15 2008
@@ -0,0 +1,95 @@
+package org.apache.shindig.social.samplecontainer;
+
+import org.apache.shindig.social.abdera.AbstractLargeRestfulTests;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+import org.json.JSONObject;
+import org.junit.Test;
+
+public class SampleContainerRoutesTest extends AbstractLargeRestfulTests {
+
+ /**
+ * Expected response for dump state in json:
+ *
+ * {
+ * "people" : {"john.doe" : {<fields>}, ...},
+ * "friendIds" : {"john.doe" : ["jane.doe", "simple.doe"],
+ * "jane.doe" : ["john.doe"]},
+ * "data" : {"john.doe" : {"count" : "0"}, ...},
+ * "activities" : {"john.doe" : [{<activity>}], ...}
+ * }
+ *
+ * @throws Exception if test encounters an error
+ */
+ @Test
+ public void testDumpState() throws Exception {
+ resp = client.get(BASEURL + "/samplecontainer/dumpstate");
+ checkForGoodJsonResponse(resp);
+
+ JSONObject json = getJson(resp);
+
+ JSONObject people = json.getJSONObject("people");
+ assertEquals(3, people.length());
+ assertNotNull(people.getJSONObject("john.doe"));
+ assertNotNull(people.getJSONObject("jane.doe"));
+ assertNotNull(people.getJSONObject("simple.doe"));
+
+ JSONObject friends = json.getJSONObject("friendIds");
+ assertEquals(2, friends.length());
+ assertEquals(2, friends.getJSONArray("john.doe").length());
+ assertEquals(1, friends.getJSONArray("jane.doe").length());
+ assertEquals("john.doe", friends.getJSONArray("jane.doe").getString(0));
+
+ JSONObject data = json.getJSONObject("data");
+ assertEquals(3, data.length());
+ assertEquals("0", data.getJSONObject("john.doe").getString("count"));
+ assertEquals("5", data.getJSONObject("jane.doe").getString("count"));
+ assertEquals("7", data.getJSONObject("simple.doe").getString("count"));
+
+ JSONObject activities = json.getJSONObject("activities");
+ assertEquals(3, activities.length());
+ assertNotNull(activities.getJSONArray("john.doe"));
+ assertNotNull(activities.getJSONArray("jane.doe"));
+ assertNotNull(activities.getJSONArray("simple.doe"));
+ }
+
+ /**
+ * Expected response for app data in json:
+ *
+ * { "success" : true }
+ *
+ * @throws Exception if test encounters an error
+ */
+ @Test
+ public void testSetState() throws Exception {
+ // TODO: Test this with a post instead of a get.
+ // I couldn't figure out how to get the post body passed through correctly
+ resp = client.get(BASEURL + "/samplecontainer/setstate?fileurl=hello.com");
+
+ checkForGoodJsonResponse(resp);
+ assertTrue(getJson(resp).getBoolean("success"));
+ }
+
+ /**
+ * Expected response for app data in json:
+ *
+ * { "success" : true }
+ *
+ * @throws Exception if test encounters an error
+ */
+ @Test
+ public void testSetEvilness() throws Exception {
+ resp = client.get(BASEURL + "/samplecontainer/setevilness/true");
+ checkForGoodJsonResponse(resp);
+ assertTrue(getJson(resp).getBoolean("success"));
+
+ resp = client.get(BASEURL + "/samplecontainer/setevilness/false");
+ checkForGoodJsonResponse(resp);
+ assertTrue(getJson(resp).getBoolean("success"));
+
+ resp = client.get(BASEURL + "/samplecontainer/setevilness/ahhhhhh!");
+ checkForBadResponse(resp);
+ }
+}
Modified:
incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.html
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.html?rev=661322&r1=661321&r2=661322&view=diff
==============================================================================
--- incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.html
(original)
+++ incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.html Thu
May 29 05:46:15 2008
@@ -43,7 +43,7 @@
// TODO: This is gross, it needs to use the config just like the gadget js does
var socialDataPath = document.location.protocol + "//" + document.location.host
- + "/social/data";
+ + "/social/rest/samplecontainer/";
var gadgetUrl = baseUrl + 'examples/SocialHelloWorld.xml';
var gadgetUrlCookie = 'sampleContainerGadgetUrl';
@@ -70,7 +70,6 @@
var cookieStateFileUrl =
decodeURIComponent(goog.net.cookies.get(stateFileUrlCookie));
if (cookieStateFileUrl && cookieStateFileUrl != "undefined") {
stateFileUrl = cookieStateFileUrl;
- reloadStateFile();
}
// Setup state file
@@ -89,7 +88,9 @@
gadgets.container.addGadget(gadget);
gadgets.container.layoutManager.setGadgetChromeIds(['gadget-chrome']);
- gadgets.container.renderGadgets();
+ reloadStateFile(function() {
+ gadgets.container.renderGadgets();
+ });
};
function changeGadgetUrl() {
@@ -151,38 +152,36 @@
gadgets.container.gadgetClass = SampleContainerGadget;
function setEvilBit() {
- sendRequestToServer([{"type" : "SET_EVILNESS", "doEvil" : doEvil}]);
+ sendRequestToServer('setevilness/' + doEvil, 'POST');
};
function reloadStateFile(opt_callback) {
- sendRequestToServer([{"type" : "SET_STATE", "fileUrl" : stateFileUrl}],
+ sendRequestToServer('setstate', 'POST',
+ {"fileurl" : stateFileUrl},
opt_callback);
};
function dumpStateFile() {
- sendRequestToServer([{"type" : "DUMP_STATE"}],
+ sendRequestToServer('dumpstate', 'GET', null,
function(data) {
document.getElementById('gadgetState').innerHTML
- = gadgets.json.stringify(data['responses'][0]['response']);
+ = gadgets.json.stringify(data);
});
};
-function sendRequestToServer(jsonRequest, opt_callback) {
+function sendRequestToServer(url, method, opt_postParams, opt_callback) {
// TODO: Should re-use the jsoncontainer code somehow
- jsonRequest = gadgets.json.stringify(jsonRequest);
+ opt_postParams = opt_postParams || {};
var makeRequestParams = {
"CONTENT_TYPE" : "JSON",
- "METHOD" : "POST",
- "AUTHORIZATION" : "SIGNED",
- "POST_DATA" : encodeValues({'request' : jsonRequest,
- 'st' : generateSecureToken()})};
+ "METHOD" : method,
+ "POST_DATA" : encodeValues(opt_postParams)};
- makeRequest(socialDataPath,
+ makeRequest(socialDataPath + url,
function(data) {
data = data.data;
- if (!data || data['error'] ||
- !data['responses'][0] || data['responses'][0]['error']) {
+ if (!data) {
alert("The request to the server caused an error.");
} else {
if (opt_callback) {
@@ -230,11 +229,15 @@
function makeRequest(url, callback, params) {
var xhr = makeXhr();
- xhr.open("POST", url, true);
+ xhr.open(params.METHOD, url, true);
xhr.onreadystatechange = gadgets.util.makeClosure(
null, processResponse, url, callback, params, xhr);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- xhr.send(params.POST_DATA);
+ if (params.METHOD == 'POST') {
+ xhr.send(params.POST_DATA);
+ } else {
+ xhr.send();
+ }
};
function encodeValues(fields, opt_noEscaping) {