You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by ca...@apache.org on 2011/07/25 18:32:01 UTC

svn commit: r1150772 - in /incubator/rave/trunk/rave-portal/src: main/java/org/apache/rave/provider/opensocial/ main/java/org/apache/rave/provider/opensocial/repository/impl/ main/webapp/WEB-INF/views/ main/webapp/css/ main/webapp/script/ test/java/org...

Author: carlucci
Date: Mon Jul 25 16:31:59 2011
New Revision: 1150772

URL: http://svn.apache.org/viewvc?rev=1150772&view=rev
Log:
Don't display the edit preferences button in the gadget title bar if an OpenSocial gadget has either no UserPrefs or all of the UserPrefs are of type "HIDDEN".  This is a sub-task of RAVE-27: Implement User Prefs.

https://issues.apache.org/jira/browse/RAVE-115

Modified:
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/Constants.java
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/repository/impl/ShindigGadgetMetadataRepository.java
    incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/home.jsp
    incubator/rave/trunk/rave-portal/src/main/webapp/css/default.css
    incubator/rave/trunk/rave-portal/src/main/webapp/script/rave_opensocial.js
    incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/provider/opensocial/repository/ShindigGadgetMetadataRepositoryTest.java

Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/Constants.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/Constants.java?rev=1150772&r1=1150771&r2=1150772&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/Constants.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/Constants.java Mon Jul 25 16:31:59 2011
@@ -25,4 +25,31 @@ package org.apache.rave.provider.opensoc
 public class Constants {
     private Constants() {}
     public static final String WIDGET_TYPE = "OpenSocial";
-}
+    
+    // opensocial string constants    
+    public static final String USER_PREFS = "userPrefs";
+    public static final String DATA_TYPE = "dataType";
+    // rave / opensocial related constants
+    public static final String HAS_PREFS_TO_EDIT = "hasPrefsToEdit";
+    
+    /*
+     * enum representing all of the valid OpenSocial preference data types
+     */
+    public static enum PrefDataTypes {
+        STRING("STRING"),
+        BOOLEAN("BOOL"),
+        ENUM("ENUM"),
+        LIST("LIST"),
+        HIDDEN("HIDDEN");
+
+        private final String dataType;
+        private PrefDataTypes(String dataType) {
+            this.dataType = dataType;
+        }
+
+        @Override
+        public String toString() {
+            return dataType;
+        }
+    }
+}
\ No newline at end of file

Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/repository/impl/ShindigGadgetMetadataRepository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/repository/impl/ShindigGadgetMetadataRepository.java?rev=1150772&r1=1150771&r2=1150772&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/repository/impl/ShindigGadgetMetadataRepository.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/provider/opensocial/repository/impl/ShindigGadgetMetadataRepository.java Mon Jul 25 16:31:59 2011
@@ -19,6 +19,8 @@
 
 package org.apache.rave.provider.opensocial.repository.impl;
 
+import java.util.Iterator;
+import static org.apache.rave.provider.opensocial.Constants.*;
 import org.apache.rave.provider.opensocial.repository.GadgetMetadataRepository;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -37,7 +39,7 @@ public class ShindigGadgetMetadataReposi
 
     private RestOperations restOperations;
     private String shindigUrl;
-
+       
     @Autowired
     public ShindigGadgetMetadataRepository(@Qualifier(value = "jsonStringCompatibleRestTemplate") RestOperations restOperations,
                                            @Value("${portal.opensocial_engine.protocol}") String shindigProtocol,
@@ -96,6 +98,24 @@ public class ShindigGadgetMetadataReposi
                     getJSONObject(0).
                     getJSONObject("result").
                     getJSONObject(gadgetUrl);
+
+            // check to see if this gadget has at least one non-hidden user pref
+            // to determine if we should display the edit prefs button
+            boolean hasPrefsToEdit = false;
+            if (responseObject.has(USER_PREFS)) {
+                JSONObject userPrefs = responseObject.getJSONObject(USER_PREFS);
+                Iterator keys = userPrefs.keys();
+                while(keys.hasNext()) {
+                    String userPrefName = (String) keys.next();
+                    JSONObject userPref = userPrefs.getJSONObject(userPrefName);
+                    if (!PrefDataTypes.HIDDEN.toString().equals(userPref.getString(DATA_TYPE))) {
+                        hasPrefsToEdit = true;
+                        break;
+                    }
+                }
+            }
+
+            responseObject.put(HAS_PREFS_TO_EDIT, hasPrefsToEdit);
             responseString = responseObject.toString();
 
             if (logger.isDebugEnabled()) {

Modified: incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/home.jsp
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/home.jsp?rev=1150772&r1=1150771&r2=1150772&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/home.jsp (original)
+++ incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/home.jsp Mon Jul 25 16:31:59 2011
@@ -49,7 +49,7 @@
                             <!-- These are toolbar buttons -->
                             <div id="widget-${regionWidget.id}-toolbar" style="float:right;">
                                 <button id="widget-${regionWidget.id}-prefs"
-                                        class="widget-toolbar-btn">
+                                        class="widget-toolbar-btn widget-toolbar-btn-prefs">
                                 </button>
                                 <button id="widget-${regionWidget.id}-max"
                                         class="widget-toolbar-btn">
@@ -59,7 +59,7 @@
                                 </button>
                             </div>
                         </div>
-                        <div class="widget-prefs" id="widget-${regionWidget.id}-prefs-content" style="display: none;"></div>
+                        <div class="widget-prefs" id="widget-${regionWidget.id}-prefs-content"></div>
                         <div class="widget" id="widget-${regionWidget.id}-body">
                                 <%-- Widget will be rendered here --%>
                         </div>

Modified: incubator/rave/trunk/rave-portal/src/main/webapp/css/default.css
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/webapp/css/default.css?rev=1150772&r1=1150771&r2=1150772&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/webapp/css/default.css (original)
+++ incubator/rave/trunk/rave-portal/src/main/webapp/css/default.css Mon Jul 25 16:31:59 2011
@@ -165,6 +165,7 @@ h1, h2, h3, h4, h5, h6 {
 .widget-prefs {
     border: 1px solid #D3D3D3;
     background-color: white;
+    display: none;
 }
 
 .widget {
@@ -364,6 +365,10 @@ button.widget-toolbar-btn {
 	width: 1em;
 }
 
+button.widget-toolbar-btn-prefs {
+    display: none;
+}
+
 fieldset{
     margin: 0;
     border:none
@@ -388,4 +393,4 @@ label.error {
     display: block;
     float: none;
     margin: 0.5em 0 auto 120px;
-}
+}
\ No newline at end of file

Modified: incubator/rave/trunk/rave-portal/src/main/webapp/script/rave_opensocial.js
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/webapp/script/rave_opensocial.js?rev=1150772&r1=1150771&r2=1150772&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/webapp/script/rave_opensocial.js (original)
+++ incubator/rave/trunk/rave-portal/src/main/webapp/script/rave_opensocial.js Mon Jul 25 16:31:59 2011
@@ -101,6 +101,12 @@ rave.opensocial = rave.opensocial || (fu
             rave.api.rest.saveWidgetPreferences({regionWidgetId: this.regionWidgetId, userPrefs: userPrefs});
             renderGadgetView("home", this); //TODO: figure out how to get the current view instead of assuming "home"
         };
+        
+        // if the gadget has prefences to edit, display the edit prefs button in the gadget chrome
+        if (gadget.metadata.hasPrefsToEdit) {            
+            $("#widget-" + gadget.regionWidgetId + "-prefs").show();
+        }
+        
         renderGadgetView("home", gadget);
     }
 

Modified: incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/provider/opensocial/repository/ShindigGadgetMetadataRepositoryTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/provider/opensocial/repository/ShindigGadgetMetadataRepositoryTest.java?rev=1150772&r1=1150771&r2=1150772&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/provider/opensocial/repository/ShindigGadgetMetadataRepositoryTest.java (original)
+++ incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/provider/opensocial/repository/ShindigGadgetMetadataRepositoryTest.java Mon Jul 25 16:31:59 2011
@@ -51,9 +51,18 @@ public class ShindigGadgetMetadataReposi
             "\"fields\":[\"iframeUrl\",\"modulePrefs.*\",\"needsTokenRefresh\",\"userPrefs.*\",\"views.preferredHeight\"," +
             "\"views.preferredWidth\",\"expireTimeMs\",\"responseTimeMs\"]}}]";
     private static final String VALID_METADATA = "[{\"id\":\"gadgets.metadata\",\"result\"" +
-            ":{\"http://www.example.com/gadget.xml\":{\"data-snipped\":\"here-for-brevity\"}}}]";
-    private static final String EXPECTED_METADATA_RESPONSE = "{\"data-snipped\":\"here-for-brevity\"}";
-
+            ":{\"http://www.example.com/gadget.xml\":{\"data-snipped\":\"here-for-brevity\",\"userPrefs\":{\"age\":{\"dataType\":\"STRING\",\"default\":\"0\",\"displayName\":\"Age\"}}   }}}]";
+    private static final String EXPECTED_METADATA_RESPONSE = "{\"userPrefs\":{\"age\":{\"dataType\":\"STRING\",\"default\":\"0\",\"displayName\":\"Age\"}},\"hasPrefsToEdit\":true,\"data-snipped\":\"here-for-brevity\"}";
+   
+    private static final String VALID_METADATA_NO_USERPREFS = "[{\"id\":\"gadgets.metadata\",\"result\"" +
+            ":{\"http://www.example.com/gadget.xml\":{\"data-snipped\":\"here-for-brevity\",\"userPrefs\":{}}}}]";
+    private static final String EXPECTED_METADATA_NO_USERPREFS_RESPONSE = "{\"userPrefs\":{},\"hasPrefsToEdit\":false,\"data-snipped\":\"here-for-brevity\"}";
+   
+    private static final String VALID_METADATA_ONLY_HIDDEN_USERPREFS = "[{\"id\":\"gadgets.metadata\",\"result\"" +
+            ":{\"http://www.example.com/gadget.xml\":{\"data-snipped\":\"here-for-brevity\",\"userPrefs\":{\"age\":{\"dataType\":\"HIDDEN\",\"default\":\"0\",\"displayName\":\"Age\"}}   }}}]";
+    private static final String EXPECTED_METADATA_ONLY_HIDDEN_USERPREFS_RESPONSE = "{\"userPrefs\":{\"age\":{\"dataType\":\"HIDDEN\",\"default\":\"0\",\"displayName\":\"Age\"}},\"hasPrefsToEdit\":false,\"data-snipped\":\"here-for-brevity\"}";
+    
+    
     @Before
     public void setup() {
         restOperations = createNiceMock(RestOperations.class);
@@ -63,11 +72,44 @@ public class ShindigGadgetMetadataReposi
 
     @Test
     public void getGadgetMetadata() {
-        expect(restOperations.postForObject(shindigUrl, VALID_SHINDIG_METADATA_RPC_REQUEST, String.class))
-                .andReturn(VALID_METADATA);
+        expect(restOperations.postForObject(shindigUrl, VALID_SHINDIG_METADATA_RPC_REQUEST, String.class)).andReturn(VALID_METADATA);
         replay(restOperations);
 
         String result = gadgetMetadataRepository.getGadgetMetadata(VALID_GADGET_URL);
         assertThat(result, is(EXPECTED_METADATA_RESPONSE));
+        
+        verify(restOperations);
     }
+    
+    @Test
+    public void getGadgetMetadata_noUserPrefs() {
+        expect(restOperations.postForObject(shindigUrl, VALID_SHINDIG_METADATA_RPC_REQUEST, String.class)).andReturn(VALID_METADATA_NO_USERPREFS);
+        replay(restOperations);
+
+        String result = gadgetMetadataRepository.getGadgetMetadata(VALID_GADGET_URL);
+        assertThat(result, is(EXPECTED_METADATA_NO_USERPREFS_RESPONSE));
+        
+        verify(restOperations);
+    }       
+    
+    @Test
+    public void getGadgetMetadata_onlyHiddenUserPrefs() {
+        expect(restOperations.postForObject(shindigUrl, VALID_SHINDIG_METADATA_RPC_REQUEST, String.class)).andReturn(VALID_METADATA_ONLY_HIDDEN_USERPREFS);
+        replay(restOperations);
+
+        String result = gadgetMetadataRepository.getGadgetMetadata(VALID_GADGET_URL);
+        assertThat(result, is(EXPECTED_METADATA_ONLY_HIDDEN_USERPREFS_RESPONSE));
+        
+        verify(restOperations);
+    }      
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void getGadgetMetadata_exceptionParsingResponse() {
+        expect(restOperations.postForObject(shindigUrl, VALID_SHINDIG_METADATA_RPC_REQUEST, String.class)).andReturn("BAD RESPONSE STRING");
+        replay(restOperations);
+
+        gadgetMetadataRepository.getGadgetMetadata(VALID_GADGET_URL);       
+        
+        verify(restOperations);
+    }   
 }