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