Re-implemented support for default preferences specified in config.xml, and added functional tests to ensure it works.
git-svn-id: https://svn.apache.org/repos/asf/wookie/trunk@1576042 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/wookie-server/src/main/java/org/apache/wookie/controller/WidgetInstancesController.java b/wookie-server/src/main/java/org/apache/wookie/controller/WidgetInstancesController.java
index 0155fdf..6b749eb 100644
--- a/wookie-server/src/main/java/org/apache/wookie/controller/WidgetInstancesController.java
+++ b/wookie-server/src/main/java/org/apache/wookie/controller/WidgetInstancesController.java
@@ -17,6 +17,8 @@
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.Collection;
+import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
@@ -36,9 +38,11 @@
import org.apache.wookie.helpers.Notifier;
import org.apache.wookie.helpers.WidgetInstanceHelper;
import org.apache.wookie.helpers.WidgetRuntimeHelper;
+import org.apache.wookie.services.PreferencesService;
import org.apache.wookie.services.SharedContextService;
import org.apache.wookie.services.WidgetMetadataService;
import org.apache.wookie.w3c.IContent;
+import org.apache.wookie.beans.IPreference;
import org.apache.wookie.w3c.util.LocalizationUtils;
/**
@@ -125,6 +129,17 @@
useDefaultSizes = true;
}
}
+
+ //
+ // Set default preferences if there are no preferences associated with this session
+ //
+ IWidget widget = WidgetMetadataService.Factory.getInstance().getWidget(authToken.getWidgetId());
+ Collection<IPreference> existingPreferences = PreferencesService.Factory.getInstance().getPreferences(newToken.getApiKey(), newToken.getWidgetId(), newToken.getContextId(), newToken.getViewerId());
+ if (existingPreferences == null || existingPreferences.size() == 0){
+ for (org.apache.wookie.w3c.IPreference preference: widget.getPreferences()){
+ PreferencesService.Factory.getInstance().setPreference(newToken.getApiKey(), newToken.getWidgetId(), newToken.getContextId(), newToken.getViewerId(), preference.getName(), preference.getValue(), preference.isReadOnly());
+ }
+ }
//
// Return XML or JSON
diff --git a/wookie-server/src/test/java/org/apache/wookie/tests/functional/WidgetInstancesControllerTest.java b/wookie-server/src/test/java/org/apache/wookie/tests/functional/WidgetInstancesControllerTest.java
index b0fc3f2..6f7688b 100644
--- a/wookie-server/src/test/java/org/apache/wookie/tests/functional/WidgetInstancesControllerTest.java
+++ b/wookie-server/src/test/java/org/apache/wookie/tests/functional/WidgetInstancesControllerTest.java
@@ -42,7 +42,8 @@
public class WidgetInstancesControllerTest extends AbstractControllerTest {
private static String TEST_ID_KEY = "";
-
+ private static final String TEST_DEFAULT_PREFS_WIDGET = "http://wookie.apache.org/defaultpreferences";
+
@BeforeClass
public static void setup() throws HttpException, IOException {
@@ -70,6 +71,26 @@
post.execute(true, false);
int code = post.getStatusCode();
assertEquals(201,code);
+
+ //
+ // Get the prefs test widget
+ //
+ file = new File("src/test/resources/default-preferences.wgt");
+ assertTrue(file.exists());
+
+ //
+ // Add test wgt file to POST
+ //
+ Part[] parts2 = { new FilePart(file.getName(), file) };
+ post.setRequestEntity(new MultipartRequestEntity(parts2, post.getClient()
+ .getParams()));
+
+ //
+ // POST the file to /widgets and check we get 201 (Created)
+ //
+ post.execute(true, false);
+ code = post.getStatusCode();
+ assertEquals(201,code);
}
@AfterClass
@@ -90,6 +111,9 @@
delete = new Request("DELETE", TEST_WIDGETS_SERVICE_URL_VALID + "/" + WIDGET_ID_LOCALIZED);
delete.execute(true, false);
+
+ delete = new Request("DELETE", TEST_WIDGETS_SERVICE_URL_VALID + "/" + TEST_DEFAULT_PREFS_WIDGET);
+ delete.execute(true, false);
}
/**
@@ -349,6 +373,37 @@
public void resume() {
fail("test not written");
}
+
+ /**
+ * Tests that a new instance has the default preferences set from config.xml
+ * @throws HttpException
+ * @throws IOException
+ */
+ @Test
+ public void getInstanceWithDefaultPreferences() throws HttpException, IOException{
+ Request post = new Request("POST", TEST_INSTANCES_SERVICE_URL_VALID);
+ post.addParameter("api_key", API_KEY_VALID);
+ post.addParameter("widgetid", TEST_DEFAULT_PREFS_WIDGET);
+ post.addParameter("userid", "test");
+ post.addParameter("shareddatakey", "test");
+ post.execute(true, false);
+ int code = post.getStatusCode();
+ assertEquals(200, code);
+
+ //
+ // Get pref
+ //
+ Request get = new Request("GET", TEST_PROPERTIES_SERVICE_URL_VALID);
+ get.addParameter("api_key", API_KEY_VALID);
+ get.addParameter("widgetid", TEST_DEFAULT_PREFS_WIDGET);
+ get.addParameter("userid", "test");
+ get.addParameter("shareddatakey", "test");
+ get.addParameter("propertyname", "default");
+ get.execute(true, false);
+ code = get.getStatusCode();
+ assertEquals(200,code);
+ assertEquals("yes", get.getResponseBodyAsString());
+ }
/**
* Tests that we can clone an instance
diff --git a/wookie-server/src/test/resources/default-preferences.wgt b/wookie-server/src/test/resources/default-preferences.wgt
new file mode 100644
index 0000000..1ce9cf2
--- /dev/null
+++ b/wookie-server/src/test/resources/default-preferences.wgt
Binary files differ