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/01/18 21:37:04 UTC

svn commit: r613261 - in /incubator/shindig/trunk: features/ java/gadgets/src/main/java/org/apache/shindig/gadgets/ java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ java/gadgets/src/main/webapp/WEB-INF/

Author: etnu
Date: Fri Jan 18 12:37:03 2008
New Revision: 613261

URL: http://svn.apache.org/viewvc?rev=613261&view=rev
Log:
Streamlined the feature loading mechanism so that the constructor for GadgetFeatureRegistry can load all features at once (and correctly resolve dependencies). Also fixed some feature-loading related bugs with the experimental libs= override.


Added:
    incubator/shindig/trunk/features/README
Modified:
    incubator/shindig/trunk/features/features.txt
    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/http/GadgetRenderingServlet.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java
    incubator/shindig/trunk/java/gadgets/src/main/webapp/WEB-INF/web.xml

Added: incubator/shindig/trunk/features/README
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/features/README?rev=613261&view=auto
==============================================================================
--- incubator/shindig/trunk/features/README (added)
+++ incubator/shindig/trunk/features/README Fri Jan 18 12:37:03 2008
@@ -0,0 +1,30 @@
+You can automatically include new features into your shindig server by adding them to this directory. Features should exist in a self-contained directory with the following structure:
+
+features
+  |_your-feature-name
+   |_feature.xml
+   |_code-to-run-inside-gadget.js
+   |_code-to-run-inside-container.js
+
+The structure of feature.xml is as follows: TODO: link to xml schema for feature.xml
+<?xml version="1.0"?>
+<feature>
+  <name>your-feature-name (required)</name>
+  <dependency>any dependency you have (optional, may have multiple)</dependency>
+  <gadget> (optional)
+    <script src="code-to-run-inside-gadget.js"/> (optional, may have multiple, may use web resources as well but we strongly encourage bundling your javascript with the xml)
+  </gadget>
+  <container> (optional)
+    <script src="code-to-run-inside-container.js"> (same as for <gadget>)
+  </container>
+</feature>
+
+Please always make sure that all files you provide are encoded as utf8. 
+
+When adding new features, your javascript should conform to shindig javascript coding conventions. This means that you should not be producing new globals and your feature should be compatible with Caja.
+
+When committing a new feature, you should update the features.txt file by running the following script in a unix-like environment:
+
+ls -R1a features/**/*.xml > features/features.txt
+
+TODO: Instructions for regenerating features.txt for other operating system environments.

Modified: incubator/shindig/trunk/features/features.txt
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/features/features.txt?rev=613261&r1=613260&r2=613261&view=diff
==============================================================================
--- incubator/shindig/trunk/features/features.txt (original)
+++ incubator/shindig/trunk/features/features.txt Fri Jan 18 12:37:03 2008
@@ -1,10 +1,10 @@
 features/analytics/feature.xml
 features/caja/feature.xml
 features/core/feature.xml
+features/dynamic-height/feature.xml
+features/flash/feature.xml
 features/ifpc/feature.xml
 features/opensocial-reference/feature.xml
 features/opensocial-samplecontainer/feature.xml
 features/setprefs/feature.xml
-features/dynamic-height/feature.xml
 features/settitle/feature.xml
-features/flash/feature.xml

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=613261&r1=613260&r2=613261&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 Fri Jan 18 12:37:03 2008
@@ -64,14 +64,16 @@
    * @param featurePath Path to the directory that contains feature xml files.
    */
   public void registerFeatures(String featurePath) throws GadgetException {
-    if (featurePath == null) return;
+    if (featurePath == null) {
+      return;
+    }
 
     List<String> coreDeps = new LinkedList<String>();
     JsFeatureLoader loader = new JsFeatureLoader();
-    List<Entry> coreJs = loader.loadFeatures(featurePath, this);
+    List<Entry> jsFeatures = loader.loadFeatures(featurePath, this);
 
     if (!coreDone) {
-      for (Entry entry : coreJs) {
+      for (Entry entry : jsFeatures) {
         if (entry.name.startsWith("core")) {
           coreDeps.add(entry.getName());
           core.put(entry.getName(), entry);
@@ -87,6 +89,14 @@
           register(FEAT_MODULE, coreDeps, new ModuleSubstituter()));
       core.put(FEAT_USER_PREF_SUBST,
           register(FEAT_USER_PREF_SUBST, coreDeps, new UserPrefSubstituter()));
+
+      // Make sure non-core features depend on core.
+      for (Entry entry : jsFeatures) {
+        if (!entry.name.startsWith("core")) {
+          entry.deps.addAll(core.values());
+        }
+      }
+
       coreDone = true;
     }
   }

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=613261&r1=613260&r2=613261&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 Fri Jan 18 12:37:03 2008
@@ -23,7 +23,6 @@
 import org.apache.shindig.gadgets.GadgetServer;
 import org.apache.shindig.gadgets.GadgetSpec;
 import org.apache.shindig.gadgets.GadgetView;
-import org.apache.shindig.gadgets.JsFeatureLoader;
 import org.apache.shindig.gadgets.JsLibrary;
 import org.apache.shindig.gadgets.MessageBundle;
 import org.apache.shindig.gadgets.ProcessingOptions;
@@ -79,20 +78,15 @@
   @SuppressWarnings("unchecked")
   public void init(ServletConfig config) {
     ServletContext context = config.getServletContext();
-    String coreFeatures = context.getInitParameter("core-js-features");
-    String otherFeatures = context.getInitParameter("other-js-features");
+    String features = context.getInitParameter("features");
     String jsPath = context.getInitParameter("js-service-path");
     if (jsPath == null) {
       jsPath = DEFAULT_JS_SERVICE_PATH;
     }
     jsServicePath = jsPath;
     try {
-      registry = new GadgetFeatureRegistry(coreFeatures);
+      registry = new GadgetFeatureRegistry(features);
       gadgetServer.setGadgetFeatureRegistry(registry);
-      if (otherFeatures != null) {
-        JsFeatureLoader jsLoader = new JsFeatureLoader();
-        jsLoader.loadFeatures(otherFeatures, registry);
-      }
     } catch (GadgetException e) {
       e.printStackTrace();
       System.exit(1);
@@ -229,17 +223,24 @@
     String externFmt = "<script src=\"%s\"></script>\n";
 
     for (JsLibrary library : gadget.getJsLibraries()) {
-      if (library.getType() == JsLibrary.Type.URL) {
+      JsLibrary.Type type = library.getType();
+      if (type == JsLibrary.Type.URL) {
         // TODO: This case needs to be handled more gracefully by the js
         // servlet. We should probably inline external JS as well.
         externJs.append(String.format(externFmt, library.getContent()));
-      } else if (options.forceJsLibs == null) {
+      } else if (type == JsLibrary.Type.INLINE) {
         inlineJs.append(library.getContent()).append("\n");
+      } else {
+        // FILE or RESOURCE
+        if (options.forceJsLibs == null) {
+          inlineJs.append(library.getContent()).append("\n");
+        } // otherwise it was already included by options.forceJsLibs.
       }
     }
 
+    // Forced libs first.
     if (options.forceJsLibs != null) {
-      externJs.append(String.format(externFmt,
+      markup.append(String.format(externFmt,
           DEFAULT_JS_SERVICE_PATH + options.forceJsLibs + JS_FILE_SUFFIX));
     }
 

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=613261&r1=613260&r2=613261&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 Fri Jan 18 12:37:03 2008
@@ -16,7 +16,6 @@
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.GadgetFeatureFactory;
 import org.apache.shindig.gadgets.GadgetFeatureRegistry;
-import org.apache.shindig.gadgets.JsFeatureLoader;
 import org.apache.shindig.gadgets.JsLibrary;
 import org.apache.shindig.gadgets.JsLibraryFeatureFactory;
 import org.apache.shindig.gadgets.RenderingContext;
@@ -42,15 +41,10 @@
   @Override
   public void init(ServletConfig config) {
     ServletContext context = config.getServletContext();
-    String coreFeatures = context.getInitParameter("core-js-features");
-    String otherFeatures = context.getInitParameter("other-js-features");
+    String features = context.getInitParameter("features");
     String jsPath = context.getInitParameter("js-service-path");
     try {
-      registry = new GadgetFeatureRegistry(coreFeatures);
-      if (otherFeatures != null) {
-        JsFeatureLoader jsLoader = new JsFeatureLoader();
-        jsLoader.loadFeatures(otherFeatures, registry);
-      }
+      registry = new GadgetFeatureRegistry(features);
     } catch (GadgetException e) {
       e.printStackTrace();
       throw new RuntimeException(e);

Modified: incubator/shindig/trunk/java/gadgets/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/webapp/WEB-INF/web.xml?rev=613261&r1=613260&r2=613261&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/webapp/WEB-INF/web.xml (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/webapp/WEB-INF/web.xml Fri Jan 18 12:37:03 2008
@@ -21,11 +21,7 @@
 <web-app>
   <!-- configuration -->
   <context-param>
-    <param-name>core-js-features</param-name>
-    <param-value>res://features/core-features.txt</param-value>
-  </context-param>
-  <context-param>
-    <param-name>other-js-features</param-name>
+    <param-name>features</param-name>
     <param-value>res://features/features.txt</param-value>
   </context-param>
   <!-- Render a Gadget -->