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/25 08:32:34 UTC

svn commit: r630749 - in /incubator/shindig/trunk/java/gadgets: ./ src/main/java/org/apache/shindig/gadgets/ src/main/java/org/apache/shindig/gadgets/http/ src/main/java/org/apache/shindig/util/

Author: etnu
Date: Sun Feb 24 23:32:31 2008
New Revision: 630749

URL: http://svn.apache.org/viewvc?rev=630749&view=rev
Log:
Added support for viewing both debug and optimized versions of static javascript.

By default, JsServlet and GadgetRenderingServlet will return optimized content, but this can now be set to return unmodified versions of scripts by passing debug=1 in the query string.

Additionally, all other static resources will be produced in duplicate; file.opt.js will be the optimized version of a file, and file.js will be the normal, debug version. This means that all sample pages (files served from files/) will revert to serving "debug" code by default, and you must conciously choose to use the optimized version for these pages, or when doing your own deployment.


Modified:
    incubator/shindig/trunk/java/gadgets/pom.xml
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetFeatureRegistry.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsLibrary.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.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/HttpProcessingOptions.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/ResourceLoader.java

Modified: incubator/shindig/trunk/java/gadgets/pom.xml
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/pom.xml?rev=630749&r1=630748&r2=630749&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/pom.xml (original)
+++ incubator/shindig/trunk/java/gadgets/pom.xml Sun Feb 24 23:32:31 2008
@@ -131,7 +131,7 @@
           </execution>
         </executions>
         <configuration>
-          <nosuffix>true</nosuffix>
+          <suffix>.opt</suffix>
           <excludes>
             <!-- don't bother with other file types. -->
             <exclude>**/*.xml</exclude>
@@ -141,8 +141,6 @@
             <exclude>**/*.png</exclude>
             <!-- Syndicator files are JSON, not javascript -->
             <exclude>**/*syndicator*.js</exclude>
-            <!-- open social files produce too many warnings -->
-            <exclude>**/opensocial-*/*</exclude>
 						<!-- Caja has some bugs too -->
 						<exclude>**/caja/*.js</exclude>
           </excludes>

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetFeatureRegistry.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetFeatureRegistry.java?rev=630749&r1=630748&r2=630749&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetFeatureRegistry.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetFeatureRegistry.java Sun Feb 24 23:32:31 2008
@@ -181,6 +181,7 @@
       resultsFound.addAll(cache);
       return true;
     } else {
+      resultsFound.addAll(core.values());
       for (String featureName : needed) {
         Entry entry = features.get(featureName);
         if (entry == null) {

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsLibrary.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsLibrary.java?rev=630749&r1=630748&r2=630749&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsLibrary.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsLibrary.java Sun Feb 24 23:32:31 2008
@@ -30,15 +30,20 @@
  * or inline scripts.
  */
 public final class JsLibrary {
-  private Type type;
+  private final Type type;
   public Type getType() {
     return type;
   }
-  private String content;
+  private final String content;
   public String getContent() {
     return content;
   }
 
+  private final String debugContent;
+  public String getDebugContent() {
+    return debugContent;
+  }
+
   private static final Logger logger
       = Logger.getLogger("org.apache.shindig.gadgets");
 
@@ -78,14 +83,28 @@
    *
    * @param type If FILE or RESOURCE, the content will be loaded from disk.
    *     if URL or INLINE, the content will be handled the same as html <script>
+   * @param content If FILE or RESOURCE, we will also look for a file
+   *     named file.opt.ext for every file.ext, and if present we will
+   *     use that as the standard content and file.ext as the debug content.
    * @return The newly created library.
    */
   public static JsLibrary create(Type type, String content) {
+    String optimizedContent = null;
+    String debugContent;
     if (type == Type.FILE || type == Type.RESOURCE) {
-      logger.info("Loading js from: " + content);
-      content = loadData(content, type);
+      if (content.endsWith(".js")) {
+        optimizedContent = loadData(
+            content.substring(0, content.length() - 3) + ".opt.js", type);
+      }
+      debugContent = loadData(content, type);
+      if (optimizedContent == null || optimizedContent.length() == 0) {
+        optimizedContent = debugContent;
+      }
+    } else {
+      debugContent = content;
+      optimizedContent = content;
     }
-    return new JsLibrary(type, content);
+    return new JsLibrary(type, optimizedContent, debugContent);
   }
 
   /**
@@ -95,6 +114,7 @@
    * @return The contents of the file or resource named by @code name.
    */
   private static String loadData(String name, Type type) {
+    logger.info("Loading js from: " + name + " type: " + type.toString());
     if (type == Type.FILE) {
       return loadFile(name);
     } else if (type == Type.RESOURCE) {
@@ -132,8 +152,8 @@
     try {
       return ResourceLoader.getContent(file);
     } catch (IOException e) {
-      throw new RuntimeException(
-          String.format("Error reading file %s", fileName), e);
+      logger.warning("Error reading file: " + fileName);
+      return null;
     }
   }
 
@@ -146,8 +166,8 @@
      try {
        return ResourceLoader.getContent(name);
      } catch (IOException e) {
-       throw new RuntimeException(
-           String.format("Could not find resource %s", name), e);
+       logger.warning("Could not find resource: " + name);
+       return null;
      }
   }
 
@@ -157,8 +177,9 @@
    * @param type
    * @param content
    */
-  private JsLibrary(Type type, String content) {
+  private JsLibrary(Type type, String content, String debugContent) {
     this.type = type;
     this.content = content;
+    this.debugContent = debugContent;
   }
 }

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java?rev=630749&r1=630748&r2=630749&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java Sun Feb 24 23:32:31 2008
@@ -52,4 +52,11 @@
   public String getSyndicator() {
     return SyndicatorConfig.DEFAULT_SYNDICATOR;
   }
+
+  /**
+   * @return Whether or not to show debug output.
+   */
+  public boolean getDebug() {
+    return true;
+  }
 }

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=630749&r1=630748&r2=630749&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 Sun Feb 24 23:32:31 2008
@@ -128,7 +128,7 @@
    * {@inheritDoc}
    */
   @Override
-  public String getJsUrl(String[] features, ProcessingOptions opts) {
+  public String getJsUrl(String[] features, ProcessingOptions options) {
     StringBuilder buf = new StringBuilder();
     buf.append(jsPath);
     if (features == null || features.length == 0) {
@@ -147,7 +147,9 @@
     buf.append(".js?v=")
        .append(jsCacheParam)
        .append("&synd=")
-       .append(opts.getSyndicator());
+       .append(options.getSyndicator())
+       .append("&debug=")
+       .append(options.getDebug() ? "1" : "0");
     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=630749&r1=630748&r2=630749&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 Sun Feb 24 23:32:31 2008
@@ -199,11 +199,15 @@
         // servlet. We should probably inline external JS as well.
         externJs.append(String.format(externFmt, library.getContent()));
       } else if (type == JsLibrary.Type.INLINE) {
-        inlineJs.append(library.getContent()).append('\n');
+        inlineJs.append(library.getContent());
       } else {
         // FILE or RESOURCE
         if (forcedLibs == null) {
-          inlineJs.append(library.getContent()).append('\n');
+          if (options.getDebug()) {
+            inlineJs.append(library.getDebugContent());
+          } else {
+            inlineJs.append(library.getContent());
+          }
         } // otherwise it was already included by options.forceJsLibs.
       }
     }

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpProcessingOptions.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpProcessingOptions.java?rev=630749&r1=630748&r2=630749&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpProcessingOptions.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpProcessingOptions.java Sun Feb 24 23:32:31 2008
@@ -30,11 +30,13 @@
   private final boolean ignoreCache;
   private final String forceJsLibs;
   private final String syndicator;
+  private final boolean debug;
 
   public HttpProcessingOptions(HttpServletRequest req) {
     ignoreCache = getIgnoreCache(req);
     forceJsLibs = getForceJsLibs(req);
     syndicator = getSyndicator(req);
+    debug = getDebug(req);
   }
 
   /** {@inheritDoc} */
@@ -58,6 +60,12 @@
     return syndicator;
   }
 
+  /** {@inheritDoc} */
+  @Override
+  public boolean getDebug() {
+    return debug;
+  }
+
   /**
    * @param req
    * @return Whether or not to ignore the cache.
@@ -84,5 +92,13 @@
    */
   protected static String getSyndicator(HttpServletRequest req) {
     return req.getParameter("synd");
+  }
+
+  /**
+   * @param req
+   * @return True if the debug parameter is set.
+   */
+  protected static boolean getDebug(HttpServletRequest req) {
+    return "1".equals(req.getParameter("debug"));
   }
 }

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=630749&r1=630748&r2=630749&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 Sun Feb 24 23:32:31 2008
@@ -108,7 +108,11 @@
             for (JsLibrary lib : feature.getJsLibraries(context, opts)) {
               // TODO: type url js files fail here.
               if (lib.getType() != JsLibrary.Type.URL) {
-                jsData.append(lib.getContent());
+                if (opts.getDebug()) {
+                  jsData.append(lib.getDebugContent());
+                } else {
+                  jsData.append(lib.getContent());
+                }
               }
             }
           }
@@ -139,7 +143,7 @@
       }
 
       setCachingHeaders(resp);
-      resp.setContentType("text/javascript");
+      resp.setContentType("text/javascript; charset=utf-8");
       resp.setContentLength(jsData.length());
       resp.getOutputStream().write(jsData.toString().getBytes());
     } else {

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/ResourceLoader.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/ResourceLoader.java?rev=630749&r1=630748&r2=630749&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/ResourceLoader.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/ResourceLoader.java Sun Feb 24 23:32:31 2008
@@ -44,7 +44,7 @@
   public static String getContent(String resource)
       throws IOException, FileNotFoundException {
     ClassLoader cl = ResourceLoader.class.getClassLoader();
-    InputStream is = cl.getResourceAsStream(resource);
+    InputStream is = cl.getResourceAsStream(resource.trim());
     if (is == null) {
       throw new FileNotFoundException("Can not locate resource: " + resource);
     }