Author: lindner
Date: Sat Jun 12 00:50:28 2010
New Revision: 953915
URL: http://svn.apache.org/viewvc?rev=953915&view=rev
Log:
SHINDIG-805 use contributor pattern for features config
Added:
shindig/trunk/features/src/main/javascript/features/shindig.auth/
shindig/trunk/features/src/main/javascript/features/shindig.auth/auth-init.js
- copied, changed from r953815,
shindig/trunk/features/src/main/javascript/features/core.auth/auth-init.js
shindig/trunk/features/src/main/javascript/features/shindig.auth/auth.js
- copied, changed from r953815,
shindig/trunk/features/src/main/javascript/features/core.auth/auth.js
shindig/trunk/features/src/main/javascript/features/shindig.auth/feature.xml
- copied, changed from r953815,
shindig/trunk/features/src/main/javascript/features/core.auth/feature.xml
shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/
shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/feature.xml
- copied, changed from r953815,
shindig/trunk/features/src/main/javascript/features/xhrwrapper/feature.xml
shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/xhrwrapper.js
- copied, changed from r953815,
shindig/trunk/features/src/main/javascript/features/xhrwrapper/xhrwrapper.js
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigContributor.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/CoreUtilConfigContributor.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/OsapiServicesConfigContributor.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ShindigAuthConfigContributor.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/XhrwrapperConfigContributor.java
Removed:
shindig/trunk/features/src/main/javascript/features/core.auth/auth-init.js
shindig/trunk/features/src/main/javascript/features/core.auth/auth.js
shindig/trunk/features/src/main/javascript/features/core.auth/feature.xml
shindig/trunk/features/src/main/javascript/features/xhrwrapper/xhrwrapper.js
Modified:
shindig/trunk/features/pom.xml
shindig/trunk/features/src/main/javascript/features/auth-refresh/feature.xml
shindig/trunk/features/src/main/javascript/features/container/feature.xml
shindig/trunk/features/src/main/javascript/features/core.io/feature.xml
shindig/trunk/features/src/main/javascript/features/core/feature.xml
shindig/trunk/features/src/main/javascript/features/features.txt
shindig/trunk/features/src/main/javascript/features/opensocial-jsonrpc/feature.xml
shindig/trunk/features/src/main/javascript/features/osapi/feature.xml
shindig/trunk/features/src/main/javascript/features/xhrwrapper/feature.xml
shindig/trunk/features/src/test/javascript/features/xhrwrapper/xhrwrappertest.js
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
Modified: shindig/trunk/features/pom.xml
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/pom.xml?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
--- shindig/trunk/features/pom.xml (original)
+++ shindig/trunk/features/pom.xml Sat Jun 12 00:50:28 2010
@@ -109,7 +109,7 @@
<source>globals/globals.js</source>
<source>core.config/config.js</source>
<source>core.json/json.js</source>
- <source>core.auth/auth.js</source>
+ <source>shindig.auth/auth.js</source>
<source>core.util/util.js</source>
<source>core.prefs/prefs.js</source>
<source>core.log/log.js</source>
@@ -121,7 +121,7 @@
<source>i18n/numberformat.js</source>
<source>setprefs/setprefs.js</source>
<source>views/views.js</source>
- <source>xhrwrapper/xhrwrapper.js</source>
+ <source>shindig.xhrwrapper/xhrwrapper.js</source>
<source>xmlutil/xmlutil.js</source>
<source>opensocial-data-context/datacontext.js</source>
<source>opensocial-data/data.js</source>
@@ -155,7 +155,7 @@
<source>osapi/jsonrpctransport.js</source>
<source>osapi/peoplehelpers.js</source>
<source>../../../../src/test/javascript/lib/testutils.js</source>
- <source>oauthpopup/oauthpopup.js</source>
+ <source>oauthpopup/oauthpopup.js</source>
</sources>
<testSourceDirectory>${basedir}/src/test/javascript/features</testSourceDirectory>
<testSuites>
Modified:
shindig/trunk/features/src/main/javascript/features/auth-refresh/feature.xml
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/auth-refresh/feature.xml?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
---
shindig/trunk/features/src/main/javascript/features/auth-refresh/feature.xml
(original)
+++
shindig/trunk/features/src/main/javascript/features/auth-refresh/feature.xml
Sat Jun 12 00:50:28 2010
@@ -18,7 +18,7 @@ specific language governing permissions
-->
<feature>
<name>auth-refresh</name>
- <dependency>core.auth</dependency>
+ <dependency>shindig.auth</dependency>
<dependency>rpc</dependency>
<gadget>
<script src="auth-refresh.js"/>
Modified:
shindig/trunk/features/src/main/javascript/features/container/feature.xml
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/feature.xml?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/feature.xml
(original)
+++ shindig/trunk/features/src/main/javascript/features/container/feature.xml
Sat Jun 12 00:50:28 2010
@@ -21,6 +21,7 @@ under the License.
<name>container</name>
<dependency>globals</dependency>
<dependency>core.log</dependency>
+ <dependency>shindig.auth</dependency>
<dependency>core.util</dependency>
<dependency>osapi</dependency>
<dependency>rpc</dependency>
Modified:
shindig/trunk/features/src/main/javascript/features/core.io/feature.xml
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/core.io/feature.xml?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/core.io/feature.xml
(original)
+++ shindig/trunk/features/src/main/javascript/features/core.io/feature.xml Sat
Jun 12 00:50:28 2010
@@ -29,7 +29,7 @@
-->
<name>core.io</name>
<dependency>globals</dependency>
- <dependency>core.auth</dependency>
+ <dependency>shindig.auth</dependency>
<dependency>core.config</dependency>
<dependency>core.json</dependency>
<dependency>core.util</dependency>
Modified: shindig/trunk/features/src/main/javascript/features/core/feature.xml
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/core/feature.xml?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/core/feature.xml
(original)
+++ shindig/trunk/features/src/main/javascript/features/core/feature.xml Sat
Jun 12 00:50:28 2010
@@ -24,7 +24,7 @@
core.* libs.
-->
<name>core</name>
- <dependency>core.auth</dependency>
+ <dependency>shindig.auth</dependency>
<dependency>core.config</dependency>
<dependency>core.json</dependency>
<dependency>core.legacy</dependency>
Modified: shindig/trunk/features/src/main/javascript/features/features.txt
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/features.txt?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/features.txt (original)
+++ shindig/trunk/features/src/main/javascript/features/features.txt Sat Jun 12
00:50:28 2010
@@ -24,7 +24,6 @@ features/auth-refresh/feature.xml
features/caja/feature.xml
features/container/feature.xml
features/content-rewrite/feature.xml
-features/core.auth/feature.xml
features/core.config/feature.xml
features/core.io/feature.xml
features/core.json/feature.xml
@@ -60,8 +59,10 @@ features/rpc/feature.xml
features/security-token/feature.xml
features/setprefs/feature.xml
features/settitle/feature.xml
+features/shindig.auth/feature.xml
features/shindig.container/feature.xml
features/shindig.container-1.0/feature.xml
+features/shindig.xhrwrapper/feature.xml
features/skins/feature.xml
features/swfobject/feature.xml
features/tabs/feature.xml
Modified:
shindig/trunk/features/src/main/javascript/features/opensocial-jsonrpc/feature.xml
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/opensocial-jsonrpc/feature.xml?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
---
shindig/trunk/features/src/main/javascript/features/opensocial-jsonrpc/feature.xml
(original)
+++
shindig/trunk/features/src/main/javascript/features/opensocial-jsonrpc/feature.xml
Sat Jun 12 00:50:28 2010
@@ -19,7 +19,7 @@
-->
<feature>
<name>opensocial-jsonrpc</name>
- <dependency>core.auth</dependency>
+ <dependency>shindig.auth</dependency>
<dependency>core.prefs</dependency>
<dependency>core.io</dependency>
<dependency>core.json</dependency>
Modified: shindig/trunk/features/src/main/javascript/features/osapi/feature.xml
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/osapi/feature.xml?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/osapi/feature.xml
(original)
+++ shindig/trunk/features/src/main/javascript/features/osapi/feature.xml Sat
Jun 12 00:50:28 2010
@@ -20,7 +20,7 @@
<feature>
<name>osapi</name>
<dependency>globals</dependency>
- <dependency>core.auth</dependency>
+ <dependency>shindig.auth</dependency>
<dependency>core.config</dependency>
<dependency>core.io</dependency>
<dependency>core.json</dependency>
Copied:
shindig/trunk/features/src/main/javascript/features/shindig.auth/auth-init.js
(from r953815,
shindig/trunk/features/src/main/javascript/features/core.auth/auth-init.js)
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/shindig.auth/auth-init.js?p2=shindig/trunk/features/src/main/javascript/features/shindig.auth/auth-init.js&p1=shindig/trunk/features/src/main/javascript/features/core.auth/auth-init.js&r1=953815&r2=953915&rev=953915&view=diff
==============================================================================
(empty)
Copied:
shindig/trunk/features/src/main/javascript/features/shindig.auth/auth.js (from
r953815, shindig/trunk/features/src/main/javascript/features/core.auth/auth.js)
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/shindig.auth/auth.js?p2=shindig/trunk/features/src/main/javascript/features/shindig.auth/auth.js&p1=shindig/trunk/features/src/main/javascript/features/core.auth/auth.js&r1=953815&r2=953915&rev=953915&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/core.auth/auth.js
(original)
+++ shindig/trunk/features/src/main/javascript/features/shindig.auth/auth.js
Sat Jun 12 00:50:28 2010
@@ -155,10 +155,7 @@ shindig.Auth = function() {
}
}
- // old incorrect way
gadgets.config.register("shindig.auth", null, init);
- // correct way
- gadgets.config.register("core.auth", null, init);
return /** @scope shindig.auth */ {
Copied:
shindig/trunk/features/src/main/javascript/features/shindig.auth/feature.xml
(from r953815,
shindig/trunk/features/src/main/javascript/features/core.auth/feature.xml)
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/shindig.auth/feature.xml?p2=shindig/trunk/features/src/main/javascript/features/shindig.auth/feature.xml&p1=shindig/trunk/features/src/main/javascript/features/core.auth/feature.xml&r1=953815&r2=953915&rev=953915&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/core.auth/feature.xml
(original)
+++
shindig/trunk/features/src/main/javascript/features/shindig.auth/feature.xml
Sat Jun 12 00:50:28 2010
@@ -17,7 +17,7 @@
specific language governing permissions and limitations under the License.
-->
<feature>
- <name>core.auth</name>
+ <name>shindig.auth</name>
<dependency>core.config</dependency>
<dependency>core.util</dependency>
<gadget>
Copied:
shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/feature.xml
(from r953815,
shindig/trunk/features/src/main/javascript/features/xhrwrapper/feature.xml)
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/feature.xml?p2=shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/feature.xml&p1=shindig/trunk/features/src/main/javascript/features/xhrwrapper/feature.xml&r1=953815&r2=953915&rev=953915&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/xhrwrapper/feature.xml
(original)
+++
shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/feature.xml
Sat Jun 12 00:50:28 2010
@@ -17,7 +17,7 @@ KIND, either express or implied. See the
specific language governing permissions and limitations under the License.
-->
<feature>
- <name>xhrwrapper</name>
+ <name>shindig.xhrwrapper</name>
<dependency>core.io</dependency>
<dependency>xmlutil</dependency>
<gadget>
Copied:
shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/xhrwrapper.js
(from r953815,
shindig/trunk/features/src/main/javascript/features/xhrwrapper/xhrwrapper.js)
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/xhrwrapper.js?p2=shindig/trunk/features/src/main/javascript/features/shindig.xhrwrapper/xhrwrapper.js&p1=shindig/trunk/features/src/main/javascript/features/xhrwrapper/xhrwrapper.js&r1=953815&r2=953915&rev=953915&view=diff
==============================================================================
(empty)
Modified:
shindig/trunk/features/src/main/javascript/features/xhrwrapper/feature.xml
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/xhrwrapper/feature.xml?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/xhrwrapper/feature.xml
(original)
+++ shindig/trunk/features/src/main/javascript/features/xhrwrapper/feature.xml
Sat Jun 12 00:50:28 2010
@@ -18,9 +18,6 @@ specific language governing permissions
-->
<feature>
<name>xhrwrapper</name>
- <dependency>core.io</dependency>
- <dependency>xmlutil</dependency>
- <gadget>
- <script src="xhrwrapper.js"/>
- </gadget>
+ <!-- deprecated usage -->
+ <dependency>shindig.xhrwrapper</dependency>
</feature>
Modified:
shindig/trunk/features/src/test/javascript/features/xhrwrapper/xhrwrappertest.js
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/test/javascript/features/xhrwrapper/xhrwrappertest.js?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
---
shindig/trunk/features/src/test/javascript/features/xhrwrapper/xhrwrappertest.js
(original)
+++
shindig/trunk/features/src/test/javascript/features/xhrwrapper/xhrwrappertest.js
Sat Jun 12 00:50:28 2010
@@ -234,4 +234,4 @@ XhrWrapperTest.prototype.checkOAuth = fu
this.assertEquals('OAUTH', this.madeRequest.params['AUTHORIZATION']);
this.assertEquals(service, this.madeRequest.params['OAUTH_SERVICE_NAME']);
this.assertEquals(opt_token, this.madeRequest.params['OAUTH_TOKEN_NAME']);
-};
\ No newline at end of file
+};
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
Sat Jun 12 00:50:28 2010
@@ -23,12 +23,18 @@ import com.google.common.collect.Immutab
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
+import com.google.inject.multibindings.MapBinder;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Named;
import com.google.inject.name.Names;
import org.apache.commons.lang.StringUtils;
+import org.apache.shindig.gadgets.config.ConfigContributor;
+import org.apache.shindig.gadgets.config.CoreUtilConfigContributor;
+import org.apache.shindig.gadgets.config.OsapiServicesConfigContributor;
+import org.apache.shindig.gadgets.config.ShindigAuthConfigContributor;
+import org.apache.shindig.gadgets.config.XhrwrapperConfigContributor;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.InvalidationHandler;
import org.apache.shindig.gadgets.parse.ParseModule;
@@ -83,6 +89,7 @@ public class DefaultGuiceModule extends
requestStaticInjection(HttpResponse.class);
registerGadgetHandlers();
+ registerConfigContributors();
registerFeatureHandlers();
}
@@ -95,6 +102,14 @@ public class DefaultGuiceModule extends
handlerBinder.addBinding().to(HttpRequestHandler.class);
}
+ protected void registerConfigContributors() {
+ MapBinder<String, ConfigContributor> configBinder =
MapBinder.newMapBinder(binder(), String.class, ConfigContributor.class);
+ configBinder.addBinding("core.util").to(CoreUtilConfigContributor.class);
+ configBinder.addBinding("osapi").to(OsapiServicesConfigContributor.class);
+
configBinder.addBinding("shindig.auth").to(ShindigAuthConfigContributor.class);
+
configBinder.addBinding("shindig.xhrwrapper").to(XhrwrapperConfigContributor.class);
+
+ }
/**
* Sets up the multibinding for extended feature resources
*/
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigContributor.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigContributor.java?rev=953915&view=auto
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigContributor.java
(added)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigContributor.java
Sat Jun 12 00:50:28 2010
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+package org.apache.shindig.gadgets.config;
+
+import org.apache.shindig.gadgets.Gadget;
+
+import java.util.Map;
+
+public interface ConfigContributor {
+ /**
+ * Contribute configuration values for a specific gadget in an iframe.
+ * @param config The config mapping of feature to value.
+ * @param gadget The gadget to contribute for.
+ */
+ public void contribute(Map<String,Object> config, Gadget gadget);
+
+ /**
+ * Contribute configuration for the container specific javascript. This
interface
+ * should only support params used by JsServlet
+ *
+ * @param config The config to add to.
+ * @param container The container.
+ * @param host The hostname
+ */
+ public void contribute(Map<String,Object> config, String container, String
host);
+}
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/CoreUtilConfigContributor.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/CoreUtilConfigContributor.java?rev=953915&view=auto
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/CoreUtilConfigContributor.java
(added)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/CoreUtilConfigContributor.java
Sat Jun 12 00:50:28 2010
@@ -0,0 +1,48 @@
+package org.apache.shindig.gadgets.config;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Singleton;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.spec.Feature;
+import org.apache.shindig.gadgets.spec.ModulePrefs;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Populates the core.util configuration, which at present includes the list
+ * of features that are supported.
+ */
+...@singleton
+public class CoreUtilConfigContributor implements ConfigContributor {
+
+ /** {...@inheritdoc} */
+ public void contribute(Map<String, Object> config, Gadget gadget) {
+ // Add gadgets.util support. This is calculated dynamically based on
request inputs.
+ ModulePrefs prefs = gadget.getSpec().getModulePrefs();
+ Collection<Feature> features = prefs.getFeatures().values();
+ Map<String, Map<String, Object>> featureMap =
Maps.newHashMapWithExpectedSize(features.size());
+ for (Feature feature : features) {
+
+ // Flatten out the multimap a bit for backwards compatibility: map keys
+ // with just 1 value into the string, treat others as arrays
+ Map<String, Object> paramFeaturesInConfig = Maps.newHashMap();
+ for (String paramName : feature.getParams().keySet()) {
+ Collection<String> paramValues = feature.getParams().get(paramName);
+ if (paramValues.size() == 1) {
+ paramFeaturesInConfig.put(paramName, paramValues.iterator().next());
+ } else {
+ paramFeaturesInConfig.put(paramName, paramValues);
+ }
+ }
+
+ featureMap.put(feature.getName(), paramFeaturesInConfig);
+ }
+ config.put("core.util", featureMap);
+ }
+
+ /** {...@inheritdoc} */
+ public void contribute(Map<String,Object> config, String container, String
host) {
+ // not used for container configuration
+ }
+}
\ No newline at end of file
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/OsapiServicesConfigContributor.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/OsapiServicesConfigContributor.java?rev=953915&view=auto
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/OsapiServicesConfigContributor.java
(added)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/OsapiServicesConfigContributor.java
Sat Jun 12 00:50:28 2010
@@ -0,0 +1,51 @@
+package org.apache.shindig.gadgets.config;
+
+import com.google.common.collect.Multimap;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.render.RpcServiceLookup;
+
+import java.util.Map;
+
+/**
+ * Populates the osapi.services configuration, which includes
+ * the osapi endpoints this container supports.
+ *
+ * TODO osapi.services as a configuration parameter does not
+ * match a specific feature. It would be better to store this as
+ * 'osapi:{services: {...}}}
+ */
+...@singleton
+public class OsapiServicesConfigContributor implements ConfigContributor {
+
+ protected final RpcServiceLookup rpcServiceLookup;
+
+ @Inject
+ public OsapiServicesConfigContributor(RpcServiceLookup rpcServiceLookup) {
+ this.rpcServiceLookup = rpcServiceLookup;
+ }
+
+ /** {...@inheritdoc} */
+ public void contribute(Map<String, Object> config, Gadget gadget) {
+ GadgetContext ctx = gadget.getContext();
+ addServicesConfig(config, ctx.getContainer(), ctx.getHost());
+ }
+
+ /** {...@inheritdoc} */
+ public void contribute(Map<String,Object> config, String container, String
host) {
+ addServicesConfig(config, container, host);
+ }
+
+ /**
+ * Add osapi.services to the config
+ * @param config config map to add it to.
+ */
+ private void addServicesConfig(Map<String,Object> config, String container,
String host) {
+ if (rpcServiceLookup != null) {
+ Multimap<String, String> endpoints =
rpcServiceLookup.getServicesFor(container, host);
+ config.put("osapi.services", endpoints);
+ }
+ }
+}
\ No newline at end of file
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ShindigAuthConfigContributor.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ShindigAuthConfigContributor.java?rev=953915&view=auto
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ShindigAuthConfigContributor.java
(added)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ShindigAuthConfigContributor.java
Sat Jun 12 00:50:28 2010
@@ -0,0 +1,59 @@
+package org.apache.shindig.gadgets.config;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+import org.apache.shindig.auth.AnonymousSecurityToken;
+import org.apache.shindig.auth.SecurityToken;
+import org.apache.shindig.auth.SecurityTokenDecoder;
+import org.apache.shindig.auth.SecurityTokenException;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.config.ConfigContributor;
+
+import java.util.Map;
+
+...@singleton
+public class ShindigAuthConfigContributor implements ConfigContributor {
+
+ private SecurityTokenDecoder securityTokenCodec;
+
+ @Inject
+ public ShindigAuthConfigContributor(SecurityTokenDecoder codec) {
+ this.securityTokenCodec = codec;
+ }
+
+ /** {...@inheritdoc} */
+ public void contribute(Map<String,Object> config, Gadget gadget) {
+ final GadgetContext context = gadget.getContext();
+ final SecurityToken authToken = context.getToken();
+ if (authToken != null) {
+ Map<String, String> authConfig = Maps.newHashMapWithExpectedSize(2);
+ String updatedToken = authToken.getUpdatedToken();
+ if (updatedToken != null) {
+ authConfig.put("authToken", updatedToken);
+ }
+ String trustedJson = authToken.getTrustedJson();
+ if (trustedJson != null) {
+ authConfig.put("trustedJson", trustedJson);
+ }
+ config.put("shindig.auth", authConfig);
+ }
+ }
+
+ /** {...@inheritdoc} */
+ public void contribute(Map<String,Object> config, String container, String
host) {
+ // Inject an anonymous security token TODO set TTL based on cachability of
this JS?
+ SecurityToken containerToken = new AnonymousSecurityToken(container,
0,"*", 1000L * 60 * 60 * 24);
+ Map<String, String> authConfig = Maps.newHashMapWithExpectedSize(2);
+
+ try {
+ config.put("shindig.auth", authConfig);
+ authConfig.put("authToken",
securityTokenCodec.encodeToken(containerToken));
+
+ } catch (SecurityTokenException e) {
+ // ignore
+ }
+ }
+}
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/XhrwrapperConfigContributor.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/XhrwrapperConfigContributor.java?rev=953915&view=auto
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/XhrwrapperConfigContributor.java
(added)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/XhrwrapperConfigContributor.java
Sat Jun 12 00:50:28 2010
@@ -0,0 +1,53 @@
+package org.apache.shindig.gadgets.config;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Singleton;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.AuthType;
+import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.oauth.OAuthArguments;
+import org.apache.shindig.gadgets.spec.View;
+
+import java.util.Map;
+
+/**
+ * Provides config support for the xhrwrapper feature.
+ */
+
+...@singleton
+public class XhrwrapperConfigContributor implements ConfigContributor {
+ /** {...@inheritdoc} */
+ public void contribute(Map<String,Object> config, Gadget gadget) {
+ Map<String, String> xhrWrapperConfig = Maps.newHashMapWithExpectedSize(2);
+ View view = gadget.getCurrentView();
+ Uri contentsUri = view.getHref();
+ xhrWrapperConfig.put("contentUrl", contentsUri == null ? "" :
contentsUri.toString());
+ if (AuthType.OAUTH.equals(view.getAuthType())) {
+ addOAuthConfig(xhrWrapperConfig, view);
+ } else if (AuthType.SIGNED.equals(view.getAuthType())) {
+ xhrWrapperConfig.put("authorization", "signed");
+ }
+ config.put("shindig.xhrwrapper", xhrWrapperConfig);
+ }
+
+ /** {...@inheritdoc} */
+ private void addOAuthConfig(Map<String, String> xhrWrapperConfig, View view)
{
+ Map<String, String> oAuthConfig = Maps.newHashMapWithExpectedSize(3);
+ try {
+ OAuthArguments oAuthArguments = new OAuthArguments(view);
+ oAuthConfig.put("authorization", "oauth");
+ oAuthConfig.put("oauthService", oAuthArguments.getServiceName());
+ if (!"".equals(oAuthArguments.getTokenName())) {
+ oAuthConfig.put("oauthTokenName", oAuthArguments.getTokenName());
+ }
+ xhrWrapperConfig.putAll(oAuthConfig);
+ } catch (GadgetException e) {
+ // Do not add any OAuth configuration if an exception was thrown
+ }
+ }
+
+ public void contribute(Map<String,Object> config, String container, String
host) {
+ // no-op, no container specific configuration
+ }
+}
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
Sat Jun 12 00:50:28 2010
@@ -18,20 +18,18 @@
*/
package org.apache.shindig.gadgets.render;
-import org.apache.shindig.auth.SecurityToken;
import org.apache.shindig.common.JsonSerializer;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.xml.DomUtil;
import org.apache.shindig.config.ContainerConfig;
-import org.apache.shindig.gadgets.AuthType;
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.MessageBundleFactory;
import org.apache.shindig.gadgets.UnsupportedFeatureException;
+import org.apache.shindig.gadgets.config.ConfigContributor;
import org.apache.shindig.gadgets.features.FeatureRegistry;
import org.apache.shindig.gadgets.features.FeatureResource;
-import org.apache.shindig.gadgets.oauth.OAuthArguments;
import org.apache.shindig.gadgets.preload.PreloadException;
import org.apache.shindig.gadgets.preload.PreloadedData;
import org.apache.shindig.gadgets.rewrite.GadgetRewriter;
@@ -39,7 +37,6 @@ import org.apache.shindig.gadgets.rewrit
import org.apache.shindig.gadgets.rewrite.RewritingException;
import org.apache.shindig.gadgets.spec.Feature;
import org.apache.shindig.gadgets.spec.MessageBundle;
-import org.apache.shindig.gadgets.spec.ModulePrefs;
import org.apache.shindig.gadgets.spec.UserPref;
import org.apache.shindig.gadgets.spec.View;
import org.apache.shindig.gadgets.uri.JsUriManager;
@@ -51,7 +48,6 @@ import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import java.util.Arrays;
-import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -62,7 +58,6 @@ import com.google.common.collect.Immutab
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.google.inject.name.Named;
@@ -100,7 +95,9 @@ public class RenderingGadgetRewriter imp
protected final ContainerConfig containerConfig;
protected final FeatureRegistry featureRegistry;
protected final JsUriManager jsUriManager;
- protected final RpcServiceLookup rpcServiceLookup;
+ protected final Map<String, ConfigContributor> configContributors;
+
+
protected Set<String> defaultExternLibs = ImmutableSet.of();
protected Boolean externalizeFeatures = false;
@@ -113,12 +110,12 @@ public class RenderingGadgetRewriter imp
ContainerConfig containerConfig,
FeatureRegistry featureRegistry,
JsUriManager jsUriManager,
- RpcServiceLookup rpcServiceLookup) {
+ Map<String, ConfigContributor>
configContributors) {
this.messageBundleFactory = messageBundleFactory;
this.containerConfig = containerConfig;
this.featureRegistry = featureRegistry;
this.jsUriManager = jsUriManager;
- this.rpcServiceLookup = rpcServiceLookup;
+ this.configContributors = configContributors;
}
@Inject
@@ -375,93 +372,16 @@ public class RenderingGadgetRewriter imp
if (conf != null) {
config.put(name, conf);
}
- }
- }
-
- addHasFeatureConfig(gadget, config);
- addOsapiSystemListMethodsConfig(context.getContainer(), config,
context.getHost());
- addSecurityTokenConfig(context, config);
- addXhrWrapperConfig(gadget, config);
- return "gadgets.config.init(" + JsonSerializer.serialize(config) + ");\n";
- }
-
- private void addXhrWrapperConfig(Gadget gadget, Map<String, Object> config) {
- boolean isUsingXhrWrapper = gadget.getAllFeatures().contains("xhrwrapper");
- if (isUsingXhrWrapper) {
- Map<String, String> xhrWrapperConfig =
Maps.newHashMapWithExpectedSize(2);
- View view = gadget.getCurrentView();
- Uri contentsUri = view.getHref();
- xhrWrapperConfig.put("contentUrl", contentsUri == null ? "" :
contentsUri.toString());
- if (AuthType.OAUTH.equals(view.getAuthType())) {
- addOAuthConfig(xhrWrapperConfig, view);
- } else if (AuthType.SIGNED.equals(view.getAuthType())) {
- xhrWrapperConfig.put("authorization", "signed");
- }
- config.put("shindig.xhrwrapper", xhrWrapperConfig);
- }
- }
-
- private void addOAuthConfig(Map<String, String> xhrWrapperConfig, View view)
{
- Map<String, String> oAuthConfig = Maps.newHashMapWithExpectedSize(3);
- try {
- OAuthArguments oAuthArguments = new OAuthArguments(view);
- oAuthConfig.put("authorization", "oauth");
- oAuthConfig.put("oauthService", oAuthArguments.getServiceName());
- if (!"".equals(oAuthArguments.getTokenName())) {
- oAuthConfig.put("oauthTokenName", oAuthArguments.getTokenName());
- }
- xhrWrapperConfig.putAll(oAuthConfig);
- } catch (GadgetException e) {
- // Do not add any OAuth configuration if an exception was thrown
- }
- }
-
- private void addSecurityTokenConfig(GadgetContext context, Map<String,
Object> config) {
- SecurityToken authToken = context.getToken();
- if (authToken != null) {
- Map<String, String> authConfig = Maps.newHashMapWithExpectedSize(2);
- String updatedToken = authToken.getUpdatedToken();
- if (updatedToken != null) {
- authConfig.put("authToken", updatedToken);
- }
- String trustedJson = authToken.getTrustedJson();
- if (trustedJson != null) {
- authConfig.put("trustedJson", trustedJson);
- }
- config.put("shindig.auth", authConfig);
- }
- }
-
- private void addHasFeatureConfig(Gadget gadget, Map<String, Object> config) {
- // Add gadgets.util support. This is calculated dynamically based on
request inputs.
- ModulePrefs prefs = gadget.getSpec().getModulePrefs();
- Collection<Feature> features = prefs.getFeatures().values();
- Map<String, Map<String, Object>> featureMap =
Maps.newHashMapWithExpectedSize(features.size());
- for (Feature feature : features) {
-
- // Flatten out the multimap a bit for backwards compatibility: map keys
- // with just 1 value into the string, treat others as arrays
- Map<String, Object> paramFeaturesInConfig = Maps.newHashMap();
- for (String paramName : feature.getParams().keySet()) {
- Collection<String> paramValues = feature.getParams().get(paramName);
- if (paramValues.size() == 1) {
- paramFeaturesInConfig.put(paramName, paramValues.iterator().next());
- } else {
- paramFeaturesInConfig.put(paramName, paramValues);
+
+ // See if this feature has configuration data
+ ConfigContributor contributor = configContributors.get(name);
+ if (contributor != null) {
+ contributor.contribute(config, gadget);
}
}
-
- featureMap.put(feature.getName(), paramFeaturesInConfig);
}
- config.put("core.util", featureMap);
- }
- private void addOsapiSystemListMethodsConfig(String container, Map<String,
Object> config,
- String host) {
- if (rpcServiceLookup != null) {
- Multimap<String, String> endpoints =
rpcServiceLookup.getServicesFor(container, host);
- config.put("osapi.services", endpoints);
- }
+ return "gadgets.config.init(" + JsonSerializer.serialize(config) + ");\n";
}
/**
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsServlet.java
Sat Jun 12 00:50:28 2010
@@ -30,6 +30,7 @@ import org.apache.shindig.common.uri.Uri
import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.RenderingContext;
+import org.apache.shindig.gadgets.config.ConfigContributor;
import org.apache.shindig.gadgets.features.FeatureRegistry;
import org.apache.shindig.gadgets.features.FeatureResource;
import org.apache.shindig.gadgets.uri.JsUriManager;
@@ -77,6 +78,12 @@ public class JsServlet extends InjectedS
this.containerConfig = containerConfig;
}
+ private Map<String, ConfigContributor> configContributors;
+ @Inject
+ public void setConfigContributors(Map<String, ConfigContributor>
configContributors) {
+ this.configContributors = configContributors;
+ }
+
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
@@ -143,16 +150,21 @@ public class JsServlet extends InjectedS
if (context == RenderingContext.CONTAINER) {
// Append some container specific things
- Map<String, Object> features =
containerConfig.getMap(ctx.getContainer(), "gadgets.features");
+ Map<String, Object> features = containerConfig.getMap(container,
"gadgets.features");
Map<String, Object> config = Maps.newHashMapWithExpectedSize(features ==
null ? 2 : features.size() + 2);
if (features != null) {
// Discard what we don't care about.
for (String name : registry.getFeatures(needed)) {
Object conf = features.get(name);
+ // Add from containerConfig
if (conf != null) {
config.put(name, conf);
}
+ ConfigContributor contributor = configContributors.get(name);
+ if (contributor != null) {
+ contributor.contribute(config, container, req.getHeader("Host"));
+ }
}
jsData.append("gadgets.config.init(").append(JsonSerializer.serialize(config)).append(");\n");
}
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java?rev=953915&r1=953914&r2=953915&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
Sat Jun 12 00:50:28 2010
@@ -41,6 +41,9 @@ import org.apache.shindig.config.Abstrac
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.config.ConfigContributor;
+import org.apache.shindig.gadgets.config.CoreUtilConfigContributor;
+import org.apache.shindig.gadgets.config.XhrwrapperConfigContributor;
import org.apache.shindig.gadgets.features.FeatureRegistry;
import org.apache.shindig.gadgets.features.FeatureResource;
import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
@@ -105,8 +108,12 @@ public class RenderingGadgetRewriterTest
@Before
public void setUp() throws Exception {
featureRegistry = createMock(FeatureRegistry.class);
+ Map<String, ConfigContributor> configContributors =
ImmutableMap.<String,ConfigContributor>of(
+ "core.util", new CoreUtilConfigContributor(),
+ "shindig.xhrwrapper", new XhrwrapperConfigContributor()
+ );
rewriter
- = new RenderingGadgetRewriter(messageBundleFactory, config,
featureRegistry, jsUriManager, null);
+ = new RenderingGadgetRewriter(messageBundleFactory, config,
featureRegistry, jsUriManager, configContributors);
Injector injector = Guice.createInjector(new ParseModule(), new
PropertiesModule());
parser = injector.getInstance(GadgetHtmlParser.class);
}
@@ -546,6 +553,7 @@ public class RenderingGadgetRewriterTest
public void gadgetsUtilConfigInjected() throws Exception {
String gadgetXml =
"<Module><ModulePrefs title=''>" +
+ " <Require feature='core.util'/>" +
" <Require feature='foo'>" +
" <Param name='bar'>baz</Param>" +
" </Require>" +
@@ -659,7 +667,7 @@ public class RenderingGadgetRewriterTest
String gadgetXml =
"<Module><ModulePrefs title=''>" +
- " <Require feature='xhrwrapper' />" +
+ " <Require feature='shindig.xhrwrapper' />" +
oAuthBlock +
"</ModulePrefs>" +
"<Content type='html' href='http://foo.com/bar/baz.html'" + authzAttr +
" />" +