Author: johnh
Date: Tue May 26 21:57:30 2009
New Revision: 778905

URL: http://svn.apache.org/viewvc?rev=778905&view=rev
Log:
Inject JsFeatureLoader. This also makes it possible to override with a custom 
JsFeatureLoader should one choose to extend feature capability (eg. feature 
experiments, dynamic code updates, request-tailored JS, etc.)


Modified:
    
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/JsFeatureLoader.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsLibrary.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetFeatureRegistryTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/JsFeatureLoaderTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java

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=778905&r1=778904&r2=778905&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
 Tue May 26 21:57:30 2009
@@ -67,13 +67,12 @@
    */
   @Inject
   public GadgetFeatureRegistry(@Named("shindig.features.default") String 
featureFiles,
-      HttpFetcher httpFetcher) throws GadgetException {
+      HttpFetcher httpFetcher, JsFeatureLoader loader) throws GadgetException {
 
     features = Maps.newHashMap();
     core = Maps.newHashMap();
 
     if (featureFiles != null) {
-      JsFeatureLoader loader = new JsFeatureLoader(httpFetcher);
       loader.loadFeatures(featureFiles, this);
     }
   }

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsFeatureLoader.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsFeatureLoader.java?rev=778905&r1=778904&r2=778905&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsFeatureLoader.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsFeatureLoader.java
 Tue May 26 21:57:30 2009
@@ -20,6 +20,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.google.inject.Inject;
 
 import org.apache.shindig.common.util.ResourceLoader;
 import org.apache.shindig.common.xml.XmlException;
@@ -62,6 +63,14 @@
       = Logger.getLogger("org.apache.shindig.gadgets");
 
   /**
+   * @param fetcher
+   */
+  @Inject
+  public JsFeatureLoader(HttpFetcher fetcher) {
+    this.fetcher = fetcher;
+  }
+  
+  /**
    * Loads all of the gadgets in the directory specified by path. Invalid
    * features will not cause this to fail, but passing an invalid path will.
    *
@@ -299,19 +308,17 @@
           type = JsLibrary.Type.FILE;
         }
       }
-      JsLibrary library = JsLibrary.create(
+      JsLibrary library = createJsLibrary(
           type, content, feature.name, inlineOk ? fetcher : null);
       for (String cont : container.split(",")) {
         feature.addLibrary(renderingContext, cont.trim(), library);
       }
     }
   }
-
-  /**
-   * @param fetcher
-   */
-  public JsFeatureLoader(HttpFetcher fetcher) {
-    this.fetcher = fetcher;
+  
+  protected JsLibrary createJsLibrary(JsLibrary.Type type, String content, 
String feature,
+      HttpFetcher fetcher) throws GadgetException {
+    return JsLibrary.create(type, content, feature, fetcher);
   }
 }
 

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=778905&r1=778904&r2=778905&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
 Tue May 26 21:57:30 2009
@@ -34,7 +34,7 @@
  * Represents a javascript library, either as an external resource (url)
  * or as an inline script.
  */
-public final class JsLibrary {
+public class JsLibrary {
   private final Type type;
   public Type getType() {
     return type;
@@ -73,9 +73,9 @@
   @Override
   public String toString() {
     if (type == Type.URL) {
-      return "<script src=\"" + content + "\"></script>";
+      return "<script src=\"" + getContent() + "\"></script>";
     } else {
-      return "<script><!--\n" + content + "\n--></script>";
+      return "<script><!--\n" + getContent() + "\n--></script>";
     }
   }
 
@@ -124,14 +124,11 @@
     switch (type) {
       case FILE:
       case RESOURCE:
-        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;
-        }
+        StringBuffer opt = new StringBuffer();
+        StringBuffer dbg = new StringBuffer();
+        loadOptimizedAndDebugData(content, type, opt, dbg);
+        optimizedContent = opt.toString();
+        debugContent = dbg.toString();
         break;
       case URL:
         if (fetcher == null) {
@@ -148,6 +145,22 @@
     }
     return new JsLibrary(feature, type, optimizedContent, debugContent);
   }
+  
+  /**
+   * Helper method to load debug and optimized content from a path and type.
+   * Only supports types FILE and RESOURCE.
+   */
+  protected static void loadOptimizedAndDebugData(String content, Type type, 
StringBuffer opt,
+      StringBuffer dbg) {
+    if (content.endsWith(".js")) {
+      opt.append(loadData(
+          content.substring(0, content.length() - 3) + ".opt.js", type));
+    }
+    dbg.append(loadData(content, type));
+    if (opt.length() == 0) {
+      opt.append(dbg.toString());
+    }
+  }
 
   /**
    * Loads an external resource.
@@ -155,7 +168,7 @@
    * @param type
    * @return The contents of the file or resource named by @code name.
    */
-  private static String loadData(String name, Type type) {
+  protected static String loadData(String name, Type type) {
     if (logger.isLoggable(Level.FINE)) logger.fine("Loading js from: " + name 
+ " type: " + type.toString());
     if (type == Type.FILE) {
       return loadFile(name);
@@ -262,7 +275,7 @@
    * @param content
    * @param debugContent
    */
-  private JsLibrary(String feature, Type type, String content,
+  protected JsLibrary(String feature, Type type, String content,
       String debugContent) {
     this.feature = feature;
     this.type = type;

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetFeatureRegistryTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetFeatureRegistryTest.java?rev=778905&r1=778904&r2=778905&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetFeatureRegistryTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetFeatureRegistryTest.java
 Tue May 26 21:57:30 2009
@@ -52,7 +52,7 @@
   @Before
   public void setUp() throws Exception {
     // TODO: Add a mock fetcher here and add tests for retrieving remote files
-    registry = new GadgetFeatureRegistry(null, null);
+    registry = new GadgetFeatureRegistry(null, null, null);
     registry.register(makeFeature(CORE_NAME, CORE_CONTENT, null));
   }
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/JsFeatureLoaderTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/JsFeatureLoaderTest.java?rev=778905&r1=778904&r2=778905&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/JsFeatureLoaderTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/JsFeatureLoaderTest.java
 Tue May 26 21:57:30 2009
@@ -53,7 +53,7 @@
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    registry = new GadgetFeatureRegistry(null, fetcher);
+    registry = new GadgetFeatureRegistry(null, fetcher, loader);
   }
 
   private JsLibrary getJsLib(GadgetFeature feature) {

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java?rev=778905&r1=778904&r2=778905&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
 Tue May 26 21:57:30 2009
@@ -770,7 +770,7 @@
     }
 
     public FakeGadgetFeatureRegistry() throws GadgetException {
-      super(null, null);
+      super(null, null, null);
     }
 
     @Override


Reply via email to