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());