Author: [email protected]
Date: Fri Jan 6 12:25:55 2012
New Revision: 1890
Log:
[AMDATUOPENSOCIAL-141] Fixed proper rendering of user preferences even if
userprefs stored in AppData are non-Strings (which is theoretically impossible
in the Shindig API, but has been proven to be possible)
Modified:
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigOpenSocialContainerImpl.java
Modified:
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigOpenSocialContainerImpl.java
==============================================================================
---
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigOpenSocialContainerImpl.java
(original)
+++
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigOpenSocialContainerImpl.java
Fri Jan 6 12:25:55 2012
@@ -85,7 +85,7 @@
// Thread safe implementation of gadget spec cache
private ConcurrentMap<String, FutureTask<Object[]>> m_gadgetSpecCache =
- new ConcurrentHashMap<String, FutureTask<Object[]>>();
+ new ConcurrentHashMap<String, FutureTask<Object[]>>();
// Service dependencies injected by the dependency manager
private volatile Tenant m_tenant;
@@ -103,14 +103,14 @@
// Create a service dependency on the token provider for 'our' tenant
String tenantFilter =
- "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY + "=" + m_tenant.getId()
+ ")(" + Constants.OBJECTCLASS
- + "=" + TokenProvider.class.getName() + "))";
+ "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY + "=" +
m_tenant.getId() + ")(" + Constants.OBJECTCLASS
+ + "=" + TokenProvider.class.getName() + "))";
dependencies.add(m_dependencyManager.createServiceDependency()
.setService(TokenProvider.class,
tenantFilter).setRequired(true).setInstanceBound(true));
String tenantFilter2 =
- "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY + "=" + m_tenant.getId()
+ ")(" + Constants.OBJECTCLASS
- + "=" + UserAdmin.class.getName() + "))";
+ "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY + "=" +
m_tenant.getId() + ")(" + Constants.OBJECTCLASS
+ + "=" + UserAdmin.class.getName() + "))";
dependencies.add(m_dependencyManager.createServiceDependency()
.setService(UserAdmin.class,
tenantFilter2).setRequired(true).setInstanceBound(true));
@@ -171,12 +171,12 @@
gadgetSpec.put("title_url",
spec.getModulePrefs().getTitleUrl().toString());
if (spec.getModulePrefs().getScreenshot() != null
- &&
!spec.getModulePrefs().getScreenshot().toString().isEmpty()) {
+ &&
!spec.getModulePrefs().getScreenshot().toString().isEmpty()) {
gadgetSpec.put("screenshot",
spec.getModulePrefs().getScreenshot().toString());
}
else {
gadgetSpec.put("screenshot", request.getContextPath() +
Activator.ALIAS +
- "/static/images/defaultgadget.png");
+ "/static/images/defaultgadget.png");
}
return gadgetSpec;
@@ -194,7 +194,7 @@
}
private GadgetSpec loadGadgetSpec(final String gadgetUrl, Map<String,
String> userPrefs)
- throws ClientProtocolException, IOException, SpecParserException {
+ throws ClientProtocolException, IOException,
SpecParserException {
String xml = loadXMLFromCache(gadgetUrl);
if (xml != null) {
GadgetSpec spec = new GadgetSpec(Uri.parse(gadgetUrl), xml);
@@ -221,7 +221,7 @@
localeUrl = locales.get(locale).getMessages().toString();
if (!localeUrl.isEmpty()) {
String messageXML =
-
cleanMessageXML(loadContentFromURL(locales.get(locale).getMessages().toString()));
+
cleanMessageXML(loadContentFromURL(locales.get(locale).getMessages().toString()));
MessageBundle bundle = new
MessageBundle(locales.get(locale), messageXML);
Substitutions substituter = new Substitutions();
substituter.addSubstitutions(Substitutions.Type.MESSAGE,
bundle.getMessages());
@@ -260,8 +260,13 @@
up.setName(pref.getName());
up.setRequired(pref.getRequired());
if (userPrefValues != null && userPrefValues.containsKey(key))
{
- up.setValue(userPrefValues.get(key));
- } else {
+ // User preferences stored in AppData SHOULD always be
strings (this is enforced
+ // by the Shindig API). However, since this is enforced by
using a generic Map,
+ // in real-life it can still contain Integers and
Booleans. So add this additional
+ // check (also for backwards compatibility).
+ up.setValue(toString(userPrefValues.get(key)));
+ }
+ else {
up.setValue(pref.getDefaultValue());
}
if ("enum".equalsIgnoreCase(up.getDatatype())) {
@@ -272,7 +277,7 @@
}
up.setEnumValues(enumValueBeans);
}
-
+
userPrefsBean.addUserPref(up);
}
return userPrefsBean;
@@ -293,6 +298,19 @@
return null;
}
+ private String toString(Object userPref) {
+ if (userPref instanceof String) {
+ return (String) userPref;
+ }
+ else if (userPref instanceof Integer) {
+ return ((Integer) userPref).toString();
+ }
+ else if (userPref instanceof Boolean) {
+ return ((Boolean) userPref) ? "1" : "0";
+ }
+ return userPref.toString();
+ }
+
private String loadContentFromURL(String url) throws
ClientProtocolException, IOException {
if (url == null || url.isEmpty()) {
return "";
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits