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);
+ }
}