You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by et...@apache.org on 2008/02/19 01:53:29 UTC
svn commit: r628939 - in /incubator/shindig/trunk: config/
java/gadgets/src/main/java/org/apache/shindig/gadgets/http/
Author: etnu
Date: Mon Feb 18 16:53:28 2008
New Revision: 628939
URL: http://svn.apache.org/viewvc?rev=628939&view=rev
Log:
Ensured that syndicator config gets propagated through all JS loading points to deal with type=url and forced libs.
Modified:
incubator/shindig/trunk/config/syndicator.js
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CrossServletState.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultCrossServletState.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java
Modified: incubator/shindig/trunk/config/syndicator.js
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/config/syndicator.js?rev=628939&r1=628938&r2=628939&view=diff
==============================================================================
--- incubator/shindig/trunk/config/syndicator.js (original)
+++ incubator/shindig/trunk/config/syndicator.js Mon Feb 18 16:53:28 2008
@@ -66,6 +66,6 @@
"rpc" : {
// This should never be on the same host in a production environment!
// Only use this for TESTING!
- "parentRelayUrl" : "files/container/rpc_relay.html"
+ "parentRelayUrl" : "files/container/rpc_relay.html",
},
}}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CrossServletState.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CrossServletState.java?rev=628939&r1=628938&r2=628939&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CrossServletState.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/CrossServletState.java Mon Feb 18 16:53:28 2008
@@ -22,6 +22,7 @@
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetServer;
import org.apache.shindig.gadgets.GadgetSigner;
+import org.apache.shindig.gadgets.ProcessingOptions;
import java.util.logging.Logger;
@@ -90,7 +91,7 @@
* @param features
* @return The url to retrieve the appropriate JS.
*/
- public abstract String getJsUrl(String[] features);
+ public abstract String getJsUrl(String[] features, ProcessingOptions opts);
/**
* Constructs a url for generating an iframe for the given gadget.
@@ -100,7 +101,7 @@
* context object). A better choice would probably be to add the view params
* to ProcessingOptions and pass that here.
*/
- public abstract String getIframeUrl(Gadget gadget, HttpServletRequest req);
+ public abstract String getIframeUrl(Gadget gadget, ProcessingOptions opts);
/**
* Initializes this handler using the provided implementation.
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultCrossServletState.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultCrossServletState.java?rev=628939&r1=628938&r2=628939&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultCrossServletState.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultCrossServletState.java Mon Feb 18 16:53:28 2008
@@ -34,6 +34,7 @@
import org.apache.shindig.gadgets.JsLibrary;
import org.apache.shindig.gadgets.MessageBundle;
import org.apache.shindig.gadgets.OpenSocialFeatureFactory;
+import org.apache.shindig.gadgets.ProcessingOptions;
import org.apache.shindig.gadgets.RenderingContext;
import org.apache.shindig.gadgets.SyndicatorConfig;
import org.apache.shindig.gadgets.UserPrefs;
@@ -84,7 +85,7 @@
* {@inheritDoc}
*/
@Override
- public String getIframeUrl(Gadget gadget, HttpServletRequest req) {
+ public String getIframeUrl(Gadget gadget, ProcessingOptions opts) {
// We don't have any meaningful data in the current request anyway, so
// we'll just do this statically.
StringBuilder buf = new StringBuilder();
@@ -107,6 +108,7 @@
}
buf.append("mid=").append(gadget.getId().getModuleId());
+ buf.append("&synd=").append(opts.getSyndicator());
UserPrefs prefs = gadget.getUserPrefValues();
for (Map.Entry<String, String> entry : prefs.getPrefs().entrySet()) {
@@ -128,7 +130,7 @@
* {@inheritDoc}
*/
@Override
- public String getJsUrl(String[] features) {
+ public String getJsUrl(String[] features, ProcessingOptions opts) {
StringBuilder buf = new StringBuilder();
buf.append(jsPath);
if (features == null || features.length == 0) {
@@ -144,7 +146,10 @@
buf.append(feature);
}
}
- buf.append(".js?v=").append(jsCacheParam);
+ buf.append(".js?v=")
+ .append(jsCacheParam)
+ .append("&synd=")
+ .append(opts.getSyndicator());
return buf.toString();
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java?rev=628939&r1=628938&r2=628939&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java Mon Feb 18 16:53:28 2008
@@ -201,18 +201,12 @@
}
// Forced libs first.
-
- Set<String> reqs;
-
if (forcedLibs != null) {
String[] libs = forcedLibs.split(":");
- reqs = new HashSet<String>();
- for (String l : libs) {
- reqs.add(l);
- }
- markup.append(String.format(externFmt, servletState.getJsUrl(libs)));
+ String jsUrl = servletState.getJsUrl(libs, options);
+ markup.append(String.format(externFmt, jsUrl));
} else {
- reqs = gadget.getRequires().keySet();
+ appendJsConfig(options, gadget.getRequires().keySet(), inlineJs);
}
if (inlineJs.length() > 0) {
@@ -224,45 +218,6 @@
markup.append(externJs);
}
- // One more thing -- we have to output the gadgets js config.
- // config *should* be handled by a feature, but unfortunately there's
- // no way to make this feature always be the last item in the output.
- // oh well.
-
- GadgetServerConfigReader serverConfig
- = servletState.getGadgetServer().getConfig();
- SyndicatorConfig syndConf = serverConfig.getSyndicatorConfig();
- JSONObject syndFeatures = syndConf.getJsonObject(options.getSyndicator(),
- "gadgets.features");
-
- if (syndFeatures != null) {
- // now we just want configuration for the features that we actually use.
- // TODO: this is too much manual work, and we should probably just
- // modify the gadget object to keep the list of transitive dependencies
- Set<Entry> found = new HashSet<Entry>();
-
- // Nothing can ever be missing at this point since that would have
- // thrown an exception already.
- Set<String> empty = Collections.emptySet();
- serverConfig.getFeatureRegistry().getIncludedFeatures(reqs, found, empty);
-
- Set<String> features = new HashSet<String>(found.size());
- for (Entry entry : found) {
- features.add(entry.getName());
- }
- String[] featArray = features.toArray(new String[features.size()]);
-
- try {
- JSONObject featureConfig = new JSONObject(syndFeatures, featArray);
- markup.append("<script><!--\ngadgets.config.init(")
- .append(featureConfig.toString())
- .append(");\n-->\n</script>");
- } catch (JSONException e) {
- // shouldn't ever happen since we've already validated our JSON output.
- throw new RuntimeException(e);
- }
- }
-
List<GadgetException> gadgetExceptions = new LinkedList<GadgetException>();
String content = gadget.getContentData(view);
if (content == null) {
@@ -313,7 +268,7 @@
} else {
libs = forcedLibs.split(":");
}
- appendLibsToQuery(libs, query);
+ appendLibsToQuery(libs, query, options);
try {
redirURI = new URI(redirURI.getScheme(),
@@ -385,12 +340,14 @@
* Appends libs to the query string.
* @param libs
* @param query
+ * @param opts
*/
- private void appendLibsToQuery(String[] libs, StringBuilder query) {
+ private void appendLibsToQuery(
+ String[] libs, StringBuilder query, ProcessingOptions opts) {
query.append("&")
.append(LIBS_PARAM_NAME)
.append("=")
- .append(servletState.getJsUrl(libs));
+ .append(servletState.getJsUrl(libs, opts));
}
/**
@@ -400,5 +357,50 @@
protected boolean getUseCaja(HttpServletRequest req) {
String cajaParam = req.getParameter(CAJA_PARAM);
return "1".equals(cajaParam);
+ }
+
+ /**
+ * @param options
+ * @param reqs The features you require.
+ * @param js Existing js, to which the configuration will be appended.
+ */
+ private void appendJsConfig(
+ ProcessingOptions options, Set<String> reqs, StringBuilder js) {
+ // config *should* be handled by a feature, but unfortunately there's
+ // no way to make this feature always be the last item in the output.
+ // oh well.
+
+ GadgetServerConfigReader serverConfig
+ = servletState.getGadgetServer().getConfig();
+ SyndicatorConfig syndConf = serverConfig.getSyndicatorConfig();
+ JSONObject syndFeatures = syndConf.getJsonObject(options.getSyndicator(),
+ "gadgets.features");
+ if (syndFeatures != null) {
+ // now we just want configuration for the features that we actually use.
+ // TODO: this is too much manual work, and we should probably just
+ // modify the gadget object to keep the list of transitive dependencies
+ Set<Entry> found = new HashSet<Entry>();
+
+ // Nothing can ever be missing at this point since that would have
+ // thrown an exception already.
+ Set<String> empty = Collections.emptySet();
+ serverConfig.getFeatureRegistry().getIncludedFeatures(reqs, found, empty);
+
+ Set<String> features = new HashSet<String>(found.size());
+ for (Entry entry : found) {
+ features.add(entry.getName());
+ }
+ String[] featArray = features.toArray(new String[features.size()]);
+
+ try {
+ JSONObject featureConfig = new JSONObject(syndFeatures, featArray);
+ js.append("gadgets.config.init(")
+ .append(featureConfig.toString())
+ .append(");");
+ } catch (JSONException e) {
+ // shouldn't ever happen since we've already validated our JSON output.
+ throw new RuntimeException(e);
+ }
+ }
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java?rev=628939&r1=628938&r2=628939&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java Mon Feb 18 16:53:28 2008
@@ -20,9 +20,13 @@
import org.apache.shindig.gadgets.GadgetFeature;
import org.apache.shindig.gadgets.GadgetFeatureFactory;
import org.apache.shindig.gadgets.GadgetFeatureRegistry;
+import org.apache.shindig.gadgets.GadgetServerConfigReader;
import org.apache.shindig.gadgets.JsLibrary;
import org.apache.shindig.gadgets.ProcessingOptions;
import org.apache.shindig.gadgets.RenderingContext;
+import org.apache.shindig.gadgets.SyndicatorConfig;
+import org.json.JSONException;
+import org.json.JSONObject;
import java.io.IOException;
import java.util.Arrays;
@@ -96,12 +100,14 @@
= new HashSet<GadgetFeatureRegistry.Entry>();
ProcessingOptions opts = new HttpProcessingOptions(req);
+ Set<String> features = new HashSet<String>(found.size());
// TODO: This doesn't work correctly under JDK 1.5, but it does under 1.6
do {
for (GadgetFeatureRegistry.Entry entry : found) {
if (!done.contains(entry) &&
done.containsAll(entry.getDependencies())) {
+ features.add(entry.getName());
GadgetFeatureFactory factory = entry.getFeature();
GadgetFeature feature = factory.create();
for (JsLibrary lib : feature.getJsLibraries(context, opts)) {
@@ -119,6 +125,25 @@
resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
+
+ GadgetServerConfigReader serverConfig
+ = servletState.getGadgetServer().getConfig();
+ SyndicatorConfig syndConf = serverConfig.getSyndicatorConfig();
+ JSONObject syndFeatures = syndConf.getJsonObject(opts.getSyndicator(),
+ "gadgets.features");
+
+ if (syndFeatures != null) {
+ String[] featArray = features.toArray(new String[features.size()]);
+ try {
+ JSONObject featureConfig = new JSONObject(syndFeatures, featArray);
+ jsData.append("gadgets.config.init(")
+ .append(featureConfig.toString())
+ .append(");");
+ } catch (JSONException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
setCachingHeaders(resp);
resp.setContentType("text/javascript");
resp.setContentLength(jsData.length());