Author: scottbw
Date: Fri Mar  7 14:47:49 2014
New Revision: 1575276

URL: http://svn.apache.org/r1575276
Log:
Added support in REST API for POSTing or PUTting multiple preferences and 
shared data in one request. See WOOKIE-414

Modified:
    
wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
    
wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java
    
wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java

Modified: 
wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
URL: 
http://svn.apache.org/viewvc/wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java?rev=1575276&r1=1575275&r2=1575276&view=diff
==============================================================================
--- 
wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
 (original)
+++ 
wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
 Fri Mar  7 14:47:49 2014
@@ -23,7 +23,6 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -95,16 +94,18 @@ public abstract class AbstractWookieConn
                
                SignedApiRequest request = 
SignedApiRequest.POST(conn.getURL()+"/properties", conn.getApiKey(), 
conn.getSecret());
                createInstanceParams(request, instance.id);
+               
+               String json = "{";
 
                if ( is_public ) {
-                       request.addParameter("is_public", "true");
+                       json += "\"shareddata\":[{\"name\":\""+fName+"\", 
\"value\":\""+fValue+"\"}]";
                }
                else {
-                       request.addParameter("is_public", "false");
+                       json += "\"preferences\":[{\"name\":\""+fName+"\", 
\"value\":\""+fValue+"\"}]";
                }
-               request.addParameter("propertyname", fName);
-               request.addParameter("propertyvalue", fValue);
-
+               json += "}";
+               
+               request.setRequestEntity(json);
                request.execute();
 
                if (request.getStatusCode() > 201) {
@@ -132,20 +133,22 @@ public abstract class AbstractWookieConn
        }
 
 
-       public void updatePropertyForInstance (WidgetInstance instance, boolean 
is_public, String propertyName, String data ) throws WookieConnectorException, 
IOException {
+       public void updatePropertyForInstance (WidgetInstance instance, boolean 
is_public, String name, String value ) throws WookieConnectorException, 
IOException {
                
                SignedApiRequest request = 
SignedApiRequest.PUT(conn.getURL()+"/properties", conn.getApiKey(), 
conn.getSecret());
                createInstanceParams(request, instance.id);
                
+               String json = "{";
+
                if ( is_public ) {
-                       request.addParameter("is_public", "true");
+                       json += "\"shareddata\":[{\"name\":\""+name+"\", 
\"value\":\""+value+"\"}]";
                }
                else {
-                       request.addParameter("is_public", "false");
+                       json += "\"preferences\":[{\"name\":\""+name+"\", 
\"value\":\""+value+"\"}]";
                }
+               json += "}";
                
-               request.addParameter("propertyname", propertyName);
-               request.addParameter("propertyvalue", data);
+               request.setRequestEntity(json);
 
                request.execute();
 
@@ -702,7 +705,7 @@ public abstract class AbstractWookieConn
         * @throws IOException
         */
        public void deletePolicy ( Policy policy ) throws 
WookieConnectorException, IOException {
-               SignedApiRequest request = 
SignedApiRequest.DELETE(conn.getURL()+"/policies"+URLEncoder.encode(policy.toString(),
 "UTF-8"), conn.getApiKey(), conn.getSecret());
+               SignedApiRequest request = 
SignedApiRequest.DELETE(conn.getURL()+"/policies/"+policy.toString(), 
conn.getApiKey(), conn.getSecret());
                request.execute();
                if (request.getStatusCode() != 200){
                        throw new WookieConnectorException("Problem DELETEing 
from /policies", new IOException("Error:"+request.getStatusCode()));

Modified: 
wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java
URL: 
http://svn.apache.org/viewvc/wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java?rev=1575276&r1=1575275&r2=1575276&view=diff
==============================================================================
--- 
wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java
 (original)
+++ 
wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java
 Fri Mar  7 14:47:49 2014
@@ -21,6 +21,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
 import org.apache.wookie.auth.AuthToken;
 import org.apache.wookie.beans.ISharedData;
@@ -31,6 +32,8 @@ import org.apache.wookie.exceptions.Reso
 import org.apache.wookie.exceptions.UnauthorizedAccessException;
 import org.apache.wookie.helpers.Notifier;
 import org.apache.wookie.services.PreferencesService;
+import org.json.JSONArray;
+import org.json.JSONObject;
 
 /**
  * REST implementation for widgetInstance
@@ -45,35 +48,29 @@ public class PropertiesController extend
        private static final long serialVersionUID = 308590474406800659L;       
        
        static Logger _logger = 
Logger.getLogger(PropertiesController.class.getName()); 
 
-       /**
-        * We only override doGet to allow tunneling requests through GET 
-        * for legacy clients
+       
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.wookie.controller.Controller#doGet(javax.servlet.http.HttpServletRequest,
 javax.servlet.http.HttpServletResponse)
         */
        @Override
        protected void doGet(HttpServletRequest request,
                        HttpServletResponse response) throws ServletException, 
IOException {
-               String requestId = 
request.getParameter("requestid");//$NON-NLS-1$
-               // If the request id is not null, show otherwise index
-               if (requestId != null && requestId.length() > 0) {
-                       try {
-                               createOrUpdate(request);
-                       } catch (InvalidParametersException e) {
-                               
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
-                       } catch (UnauthorizedAccessException e){
-                               
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
-                       }
-               } else {
-                       try {
-                               show(null, request, response);
-                               response.setStatus(HttpServletResponse.SC_OK);
-                       } catch (ResourceNotFoundException e) {
-                               
response.sendError(HttpServletResponse.SC_NOT_FOUND);
-                       } catch (UnauthorizedAccessException e){
-                               
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
-                       }
+               //
+               // For now we just execute the show() method. In future we 
could return a JSON array of all properties
+               //
+               String name = request.getParameter("propertyname"); 
//$NON-NLS-1$
+               try {
+                       show(name, request, response);
+               } catch (ResourceNotFoundException e) {
+                       response.sendError(HttpServletResponse.SC_NOT_FOUND);
+               } catch(UnauthorizedAccessException e1){
+                       response.sendError(HttpServletResponse.SC_FORBIDDEN);
                }
        }
 
+
+
        @Override
        protected void show(String resourceId, HttpServletRequest request,
                        HttpServletResponse response) throws 
ResourceNotFoundException,
@@ -81,14 +78,13 @@ public class PropertiesController extend
                
                AuthToken authToken = getAuthTokenFromRequest(request);         
                if (authToken == null) throw new ResourceNotFoundException();
-               String name = request.getParameter("propertyname"); 
//$NON-NLS-1$
-               if (name == null || name.trim().equals("")) throw new 
ResourceNotFoundException();
+               if (resourceId == null || resourceId.trim().equals("")) throw 
new ResourceNotFoundException();
                String value = null;
                // Note that preferences and shared data keys may be the same!
                // We let the shared data values override.
                
-               value = 
PreferencesService.Factory.getInstance().getPreference(authToken.getApiKey(), 
authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), 
name);
-               ISharedData data = new 
SharedContext(authToken).getSharedData(name);
+               value = 
PreferencesService.Factory.getInstance().getPreference(authToken.getApiKey(), 
authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), 
resourceId);
+               ISharedData data = new 
SharedContext(authToken).getSharedData(resourceId);
                if (data != null) value = data.getDvalue();
                if (value == null) throw new ResourceNotFoundException();
                PrintWriter out = response.getWriter();
@@ -111,7 +107,7 @@ public class PropertiesController extend
                        found = new 
SharedContext(authToken).removeSharedData(name);
                        Notifier.notifyWidgets(request.getSession(), authToken, 
Notifier.STATE_UPDATED);
                } else {
-                       found = updatePreference(authToken, name, null);
+                       found = updatePreference(authToken, name, null, false);
                }
                if (!found) throw new ResourceNotFoundException();
                return true;
@@ -138,21 +134,68 @@ public class PropertiesController extend
         * @throws InvalidParametersException
         * @throws UnauthorizedAccessException
         */
-       public static void createOrUpdate(HttpServletRequest request)
+       private static void createOrUpdate(HttpServletRequest request)
        throws InvalidParametersException,UnauthorizedAccessException {
-               String name = request.getParameter("propertyname"); 
//$NON-NLS-1$
-               String value = request.getParameter("propertyvalue"); 
//$NON-NLS-1$
-               
+
                AuthToken authToken = getAuthTokenFromRequest(request);
                if (authToken == null) throw new InvalidParametersException();
-               
-               if (name == null || name.trim().equals("")) throw new 
InvalidParametersException();
-               
-               if (isPublic(request)){ 
-                   new SharedContext(authToken).updateSharedData(name, value, 
false);
-                       Notifier.notifyWidgets(request.getSession(), authToken, 
Notifier.STATE_UPDATED);
-               } else {
-                       updatePreference(authToken, name, value);
+
+               //
+               // The data we need is in JSON in the request body, structured 
as:
+               //
+               // {
+               //   {"preferences" {[
+               //      {"name":"pref1", "value":"pass", "readOnly":0}
+               //   ]},
+               //   {"shareddata" {[
+               //      {"name":"sd1", "value":"pass"}
+               //   ]}
+               // }
+               //
+               //
+               
+               try {
+                       String body = 
IOUtils.toString(request.getInputStream());
+                       JSONObject json = new JSONObject(body);
+                       if (json != null){
+                               if (json.has("preferences")){
+                                       JSONArray array = 
json.getJSONArray("preferences");
+                                       if (array != null){
+                                               for (int 
i=0;i<array.length();i++){
+                                                       JSONObject property = 
array.getJSONObject(i);
+                                                       if 
(!property.has("name")) throw new InvalidParametersException();
+                                                       String name = 
property.getString("name");
+                                                       if (name != null && 
!name.trim().equals("")){
+                                                               String value = 
property.getString("value");
+                                                               boolean 
readOnly = property.getBoolean("readOnly");
+                                                               
updatePreference(authToken, name, value, readOnly);
+                                                       } else {
+                                                               throw new 
InvalidParametersException();
+                                                       }
+                                               }
+                                       }
+                               }
+                               if (json.has("shareddata")){
+                                       JSONArray array = 
json.getJSONArray("shareddata");
+                                       if (array != null){
+                                               for (int 
i=0;i<array.length();i++){
+                                                       JSONObject property = 
array.getJSONObject(i);
+                                                       if 
(!property.has("name")) throw new InvalidParametersException();
+                                                       String name = 
property.getString("name");
+                                                       if (name != null && 
!name.trim().equals("")){
+                                                               String value = 
property.getString("value");
+                                                               new 
SharedContext(authToken).updateSharedData(name, value, false);
+                                                               
Notifier.notifyWidgets(request.getSession(), authToken, Notifier.STATE_UPDATED);
+                                                       } else {
+                                                               throw new 
InvalidParametersException();
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       throw new InvalidParametersException();
                }
        }
 
@@ -162,11 +205,11 @@ public class PropertiesController extend
         * @param name
         * @param value
         */
-       public static boolean updatePreference(AuthToken authToken, String 
name, String value){
+       private static boolean updatePreference(AuthToken authToken, String 
name, String value, boolean readOnly){
         boolean found=false;
         String preference = 
PreferencesService.Factory.getInstance().getPreference(authToken.getApiKey(), 
authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), 
name);        
         if (preference != null) found=true;
-           
PreferencesService.Factory.getInstance().setPreference(authToken.getApiKey(), 
authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), 
name, value);
+           
PreferencesService.Factory.getInstance().setPreference(authToken.getApiKey(), 
authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), 
name, value, readOnly);
         return found;
        }
 

Modified: 
wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java
URL: 
http://svn.apache.org/viewvc/wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java?rev=1575276&r1=1575275&r2=1575276&view=diff
==============================================================================
--- 
wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java
 (original)
+++ 
wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java
 Fri Mar  7 14:47:49 2014
@@ -18,7 +18,11 @@ import static org.junit.Assert.assertEqu
 import java.io.IOException;
 
 import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.methods.StringRequestEntity;
 import org.apache.wookie.tests.helpers.Request;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -51,12 +55,12 @@ public class PropertiesControllerTest ex
        }
 
        /**
-        * Test that we can set preferences using post parameters
+        * Test that we can set preferences using POST
         * 
         * @throws Exception
         */
        @Test
-       public void setPreferenceUsingPostParameters() throws Exception {
+       public void setPreferenceUsingPost() throws Exception {
                //
                // Set a property ("testpost=pass") using POST
                //
@@ -64,10 +68,18 @@ public class PropertiesControllerTest ex
                post.addParameter("api_key", API_KEY_VALID);
                post.addParameter("widgetid", WIDGET_ID_VALID);
                post.addParameter("userid", "test");
-               post.addParameter("is_public", "false");
                post.addParameter("shareddatakey", "propstest");
-               post.addParameter("propertyname", "testpost");
-               post.addParameter("propertyvalue", "pass");
+
+               JSONObject pref = new JSONObject();
+               pref.put("name", "testpost");
+               pref.put("value", "pass");
+               pref.put("readOnly", false);
+               JSONObject json = new JSONObject();
+               JSONArray prefs = new JSONArray();
+               prefs.put(pref);
+               json.put("preferences", prefs);         
+               StringRequestEntity entity = new 
StringRequestEntity(json.toString(), "application/json", "UTF-8");
+               post.setRequestEntity(entity);
                post.execute(true, false);
                int code = post.getStatusCode();
                assertEquals(201, code);
@@ -88,14 +100,82 @@ public class PropertiesControllerTest ex
                assertEquals("pass", resp);
        }
 
+
+       /**
+        * Test that we can set multiple preferences at the same time by 
POSTing JSON
+        * 
+        * @throws Exception
+        */
+       @Test
+       public void setMultiplePreferencesUsingPost() throws Exception {
+               //
+               // Set a property ("testpost=pass") using POST
+               //
+               Request post = new Request("POST", 
TEST_PROPERTIES_SERVICE_URL_VALID);
+               post.addParameter("api_key", API_KEY_VALID);
+               post.addParameter("widgetid", WIDGET_ID_VALID);
+               post.addParameter("userid", "test");
+               post.addParameter("shareddatakey", "propstest");
+
+               JSONObject pref1 = new JSONObject();
+               pref1.put("name", "testpost1");
+               pref1.put("value", "pass1");
+               pref1.put("readOnly", false);
+               
+               JSONObject pref2 = new JSONObject();
+               pref2.put("name", "testpost2");
+               pref2.put("value", "pass2");
+               pref2.put("readOnly", false);
+               
+               JSONObject json = new JSONObject();
+               JSONArray prefs = new JSONArray();
+               prefs.put(pref1);
+               prefs.put(pref2);
+               json.put("preferences", prefs);         
+               StringRequestEntity entity = new 
StringRequestEntity(json.toString(), "application/json", "UTF-8");
+               post.setRequestEntity(entity);
+               post.execute(true, false);
+               int code = post.getStatusCode();
+               assertEquals(201, code);
+
+               //
+               // Read back each property using GET
+               //
+               Request get = new Request("GET", 
TEST_PROPERTIES_SERVICE_URL_VALID);
+               get.addParameter("api_key", API_KEY_VALID);
+               get.addParameter("widgetid", WIDGET_ID_VALID);
+               get.addParameter("userid", "test");
+               get.addParameter("shareddatakey", "propstest");
+               get.addParameter("propertyname", "testpost1");
+               get.execute(true, false);
+               code = get.getStatusCode();
+               assertEquals(200, code);
+               String resp = get.getResponseBodyAsString();
+               assertEquals("pass1", resp);
+               
+               get = new Request("GET", TEST_PROPERTIES_SERVICE_URL_VALID);
+               get.addParameter("api_key", API_KEY_VALID);
+               get.addParameter("widgetid", WIDGET_ID_VALID);
+               get.addParameter("userid", "test");
+               get.addParameter("shareddatakey", "propstest");
+               get.addParameter("propertyname", "testpost2");
+               get.execute(true, false);
+               code = get.getStatusCode();
+               assertEquals(200, code);
+               resp = get.getResponseBodyAsString();
+               assertEquals("pass2", resp);
+       }
+
+       
        /**
         * Test we can set shared data values using querystring parameters
         * 
         * @throws IOException
         * @throws HttpException
+        * @throws JSONException 
         */
        @Test
-       public void setSharedData() throws HttpException, IOException {
+       public void setSharedData() throws HttpException, IOException, 
JSONException {
 
                //
                // Set some shared data with POST
@@ -104,10 +184,17 @@ public class PropertiesControllerTest ex
                post.addParameter("api_key", API_KEY_VALID);
                post.addParameter("widgetid", WIDGET_ID_VALID);
                post.addParameter("userid", "test");
-               post.addParameter("is_public", "false");
                post.addParameter("shareddatakey", "propstest");
-               post.addParameter("propertyname", "cat");
-               post.addParameter("propertyvalue", "garfield");
+
+               JSONObject data = new JSONObject();
+               data.put("name", "cat");
+               data.put("value", "garfield");
+               JSONObject json = new JSONObject();
+               JSONArray set = new JSONArray();
+               set.put(data);
+               json.put("shareddata", set);            
+               StringRequestEntity entity = new 
StringRequestEntity(json.toString(), "application/json", "UTF-8");
+               post.setRequestEntity(entity);
                post.execute(true, false);
                int code = post.getStatusCode();
                assertEquals(201, code);
@@ -134,9 +221,10 @@ public class PropertiesControllerTest ex
         * 
         * @throws IOException
         * @throws HttpException
+        * @throws JSONException 
         */
        @Test
-       public void updateProperty() throws HttpException, IOException {
+       public void updateProperty() throws HttpException, IOException, 
JSONException {
 
                //
                // Set cat=felix using POST
@@ -145,10 +233,18 @@ public class PropertiesControllerTest ex
                put.addParameter("api_key", API_KEY_VALID);
                put.addParameter("widgetid", WIDGET_ID_VALID);
                put.addParameter("userid", "test");
-               put.addParameter("is_public", "false");
                put.addParameter("shareddatakey", "propstest");
-               put.addParameter("propertyname", "cat");
-               put.addParameter("propertyvalue", "felix");
+               
+               JSONObject data = new JSONObject();
+               data.put("name", "cat");
+               data.put("value", "felix");
+               JSONObject json = new JSONObject();
+               JSONArray set = new JSONArray();
+               set.put(data);
+               json.put("shareddata", set);            
+               StringRequestEntity entity = new 
StringRequestEntity(json.toString(), "application/json", "UTF-8");
+               put.setRequestEntity(entity);
+               
                put.execute(true, false);
                int code = put.getStatusCode();
                assertEquals(200, code);
@@ -186,6 +282,7 @@ public class PropertiesControllerTest ex
                delete.addParameter("api_key", API_KEY_VALID);
                delete.addParameter("widgetid", WIDGET_ID_VALID);
                delete.addParameter("userid", "test");
+               delete.addParameter("is_public", "true");
                delete.addParameter("shareddatakey", "propstest");
                delete.addParameter("propertyname", "cat");
                delete.execute(true, false);
@@ -217,16 +314,25 @@ public class PropertiesControllerTest ex
         * 
         * @throws IOException
         * @throws HttpException
+        * @throws JSONException 
         */
        @Test
-       public void setPropertyNoName() throws HttpException, IOException {
+       public void setPropertyNoName() throws HttpException, IOException, 
JSONException {
                Request post = new Request("POST", 
TEST_PROPERTIES_SERVICE_URL_VALID);
                post.addParameter("api_key", API_KEY_VALID);
                post.addParameter("widgetid", WIDGET_ID_VALID);
                post.addParameter("userid", "test");
-               post.addParameter("is_public", "false");
                post.addParameter("shareddatakey", "propstest");
-               post.addParameter("propertyvalue", "garfield");
+               
+               JSONObject data = new JSONObject();
+               data.put("value", "garfield");
+               JSONObject json = new JSONObject();
+               JSONArray set = new JSONArray();
+               set.put(data);
+               json.put("shareddata", set);            
+               StringRequestEntity entity = new 
StringRequestEntity(json.toString(), "application/json", "UTF-8");
+               post.setRequestEntity(entity);
+               
                post.execute(true, false);
                int code = post.getStatusCode();
                assertEquals(400, code);
@@ -238,17 +344,26 @@ public class PropertiesControllerTest ex
         * 
         * @throws IOException
         * @throws HttpException
+        * @throws JSONException 
         */
        @Test
-       public void setPropertyEmptyName() throws HttpException, IOException {
+       public void setPropertyEmptyName() throws HttpException, IOException, 
JSONException {
                Request post = new Request("POST", 
TEST_PROPERTIES_SERVICE_URL_VALID);
                post.addParameter("api_key", API_KEY_VALID);
                post.addParameter("widgetid", WIDGET_ID_VALID);
                post.addParameter("userid", "test");
-               post.addParameter("is_public", "false");
                post.addParameter("shareddatakey", "propstest");
-               post.addParameter("propertyname", "");
-               post.addParameter("propertyvalue", "garfield");
+               
+               JSONObject data = new JSONObject();
+               data.put("name", "");
+               data.put("value", "garfield");
+               JSONObject json = new JSONObject();
+               JSONArray set = new JSONArray();
+               set.put(data);
+               json.put("shareddata", set);            
+               StringRequestEntity entity = new 
StringRequestEntity(json.toString(), "application/json", "UTF-8");
+               post.setRequestEntity(entity);
+               
                post.execute(true, false);
                int code = post.getStatusCode();
                assertEquals(400, code);
@@ -259,17 +374,26 @@ public class PropertiesControllerTest ex
         * 
         * @throws IOException
         * @throws HttpException
+        * @throws JSONException 
         */
        @Test
-       public void setPropertyWhitespaceName() throws HttpException, 
IOException {
+       public void setPropertyWhitespaceName() throws HttpException, 
IOException, JSONException {
                Request post = new Request("POST", 
TEST_PROPERTIES_SERVICE_URL_VALID);
                post.addParameter("api_key", API_KEY_VALID);
                post.addParameter("widgetid", WIDGET_ID_VALID);
                post.addParameter("userid", "test");
-               post.addParameter("is_public", "false");
                post.addParameter("shareddatakey", "propstest");
-               post.addParameter("propertyname", "  ");
-               post.addParameter("propertyvalue", "garfield");
+               
+               JSONObject data = new JSONObject();
+               data.put("name", " ");
+               data.put("value", "garfield");
+               JSONObject json = new JSONObject();
+               JSONArray set = new JSONArray();
+               set.put(data);
+               json.put("shareddata", set);            
+               StringRequestEntity entity = new 
StringRequestEntity(json.toString(), "application/json", "UTF-8");
+               post.setRequestEntity(entity);
+               
                post.execute(true, false);
                int code = post.getStatusCode();
                assertEquals(400, code);


Reply via email to