You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2009/04/16 00:25:50 UTC

svn commit: r765398 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/process/ test/java/org/apache/shindig/gadgets/ test/java/org/apache/shindig/gadgets/process/ test/java/org/ap...

Author: johnh
Date: Wed Apr 15 22:25:50 2009
New Revision: 765398

URL: http://svn.apache.org/viewvc?rev=765398&view=rev
Log:
Adding a convenience method getAllFeatures() to Gadget, which returns a dependency-ordered list, in "ascending" (root dependencies first) order. Will assist in making it possible for gadgets to include transitive dependencies and have them pull in dependent functionality when such functionality isn't JS-based (eg. locked-domain). Resolves SHINDIG-969.


Modified:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/process/Processor.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java?rev=765398&r1=765397&r2=765398&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java Wed Apr 15 22:25:50 2009
@@ -23,10 +23,12 @@
 import org.apache.shindig.gadgets.spec.LocaleSpec;
 import org.apache.shindig.gadgets.spec.View;
 
+import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -34,6 +36,7 @@
  * of a single gadget request.
  */
 public class Gadget {
+  private GadgetFeatureRegistry gadgetFeatureRegistry;
   private GadgetContext context;
   private GadgetSpec spec;
   private Collection<PreloadedData> preloads;
@@ -54,6 +57,15 @@
   }
 
   /**
+   * @param registry The gadget feature registry to use to find dependent
+   *                 features.
+   */
+  public Gadget setGadgetFeatureRegistry(GadgetFeatureRegistry registry) {
+    this.gadgetFeatureRegistry = registry;
+    return this;
+  }
+
+  /**
    * @param spec The spec for the gadget that is being processed.
    */
   public Gadget setSpec(GadgetSpec spec) {
@@ -77,6 +89,24 @@
     return preloads;
   }
 
+  /**
+   * List of all features this spec depends on (including all transitive
+   * dependencies).
+   */
+  private List<String> allGadgetFeatures;
+  public synchronized List<String> getAllFeatures() {
+    if (allGadgetFeatures == null && gadgetFeatureRegistry != null) {
+      allGadgetFeatures = Lists.newArrayList();
+      for (GadgetFeature gadgetFeature :
+             gadgetFeatureRegistry.getFeatures(this.spec.getModulePrefs().getFeatures().keySet())) {
+        allGadgetFeatures.add(gadgetFeature.getName());
+      }
+      // now all features are in reverse order of dependency. So reverse the list.
+      Collections.reverse(allGadgetFeatures);
+    }
+    return allGadgetFeatures;
+  }
+
   public Gadget setCurrentView(View currentView) {
     this.currentView = currentView;
     return this;
@@ -142,4 +172,4 @@
         getCurrentView().getType() == View.ContentType.HTML_SANITIZED) ||
         "1".equals(getContext().getParameter(ProxyBase.SANITIZE_CONTENT_PARAM));
   }
-}
\ No newline at end of file
+}

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/process/Processor.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/process/Processor.java?rev=765398&r1=765397&r2=765398&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/process/Processor.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/process/Processor.java Wed Apr 15 22:25:50 2009
@@ -23,6 +23,7 @@
 import org.apache.shindig.gadgets.GadgetBlacklist;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.GadgetFeatureRegistry;
 import org.apache.shindig.gadgets.GadgetSpecFactory;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.View;
@@ -43,16 +44,19 @@
   private final VariableSubstituter substituter;
   private final ContainerConfig containerConfig;
   private final GadgetBlacklist blacklist;
+  private final GadgetFeatureRegistry gadgetFeatureRegistry;
 
   @Inject
   public Processor(GadgetSpecFactory gadgetSpecFactory,
                    VariableSubstituter substituter,
                    ContainerConfig containerConfig,
-                   GadgetBlacklist blacklist) {
+                   GadgetBlacklist blacklist,
+                   GadgetFeatureRegistry gadgetFeatureRegistry) {
     this.gadgetSpecFactory = gadgetSpecFactory;
     this.substituter = substituter;
     this.blacklist = blacklist;
     this.containerConfig = containerConfig;
+    this.gadgetFeatureRegistry = gadgetFeatureRegistry;
   }
 
   /**
@@ -83,6 +87,7 @@
 
       return new Gadget()
           .setContext(context)
+          .setGadgetFeatureRegistry(gadgetFeatureRegistry)
           .setSpec(spec)
           .setCurrentView(getView(context, spec));
     } catch (GadgetException e) {

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java?rev=765398&r1=765397&r2=765398&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetTest.java Wed Apr 15 22:25:50 2009
@@ -18,18 +18,29 @@
  */
 package org.apache.shindig.gadgets;
 
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+
 import static org.junit.Assert.assertEquals;
 
+import org.apache.shindig.common.EasyMockTestCase;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.LocaleSpec;
 
 import org.junit.Test;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
 /**
  * Tests for Gadget
  */
-public class GadgetTest {
+public class GadgetTest extends EasyMockTestCase {
   private final static String SPEC_URL = "http://example.org/gadget.xml";
   private final static String SPEC_XML
       = "<Module>" +
@@ -56,6 +67,51 @@
     assertEquals("VALUE", localeSpec.getMessageBundle().getMessages().get("name"));
   }
 
+  private GadgetFeature makeFeature(String name, List<String> deps)
+      throws GadgetException {
+    JsLibrary lib = JsLibrary.create(JsLibrary.Type.INLINE, name, name, null);
+    if (deps == null) {
+      deps = Lists.newArrayList();
+    }
+    return new GadgetFeature(name, Arrays.asList(lib), deps);
+  }
+
+  @Test
+  public void testGetFeatures() throws Exception {
+    String xml = "<Module>" +
+                 "<ModulePrefs title=\"hello\">" +
+                 "<Require feature=\"required1\"/>" +
+                 "<Require feature=\"required2\"/>" +
+                 "</ModulePrefs>" +
+                 "<Content type=\"html\"/>" +
+                 "</Module>";
+    List<GadgetFeature> features = Lists.newArrayList(
+        makeFeature("required1", Lists.newArrayList("required2", "required3")),
+        makeFeature("required2", Lists.newArrayList("required3", "required4", "required5")),
+        makeFeature("required3", Lists.newArrayList("required4", "required5")),
+        makeFeature("required4", null),
+        makeFeature("required4", null));
+    GadgetFeatureRegistry registry = mock(GadgetFeatureRegistry.class);
+    Gadget gadget = new Gadget()
+        .setContext(context)
+        .setGadgetFeatureRegistry(registry)
+        .setSpec(new GadgetSpec(Uri.parse(SPEC_URL), xml));
+    Set<String> needed = Sets.newHashSet("required1", "required2");
+    expect(registry.getFeatures(needed)).andReturn(features).anyTimes();
+    replay(registry);
+    List<String> requiredFeatures = gadget.getAllFeatures();
+    assertEquals(5, requiredFeatures.size());
+    // make sure the dependencies are in order.
+    assertTrue(requiredFeatures.get(0).equals("required4") || requiredFeatures.get(0).equals("required5"));
+    assertTrue(requiredFeatures.get(1).equals("required4") || requiredFeatures.get(0).equals("required5"));
+    assertEquals("required3", requiredFeatures.get(2));
+    assertEquals("required2", requiredFeatures.get(3));
+    assertEquals("required1", requiredFeatures.get(4));
+    // make sure we do the registry.getFeatures only once
+    assertTrue(requiredFeatures == gadget.getAllFeatures());
+  }
+
+
   private static class DummyContext extends GadgetContext {
     public String view = super.getView();
     public String container = super.getContainer();

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java?rev=765398&r1=765397&r2=765398&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java Wed Apr 15 22:25:50 2009
@@ -64,7 +64,7 @@
          "}}}");
 
     containerConfig = new JsonContainerConfig(config, new Expressions());
-    processor = new Processor(gadgetSpecFactory, substituter, containerConfig, blacklist);
+    processor = new Processor(gadgetSpecFactory, substituter, containerConfig, blacklist, null);
   }
 
   private GadgetContext makeContext(final String view, final Uri specUrl) {
@@ -187,5 +187,3 @@
     }
   }
 }
-
-

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java?rev=765398&r1=765397&r2=765398&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java Wed Apr 15 22:25:50 2009
@@ -200,7 +200,7 @@
     protected ProcessingException exception;
 
     public FakeProcessor() {
-      super(null, null, null, null);
+      super(null, null, null, null, null);
     }
 
     @Override

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java?rev=765398&r1=765397&r2=765398&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java Wed Apr 15 22:25:50 2009
@@ -231,7 +231,7 @@
     protected final Map<Uri, String> gadgets = Maps.newHashMap();
 
     public FakeProcessor() {
-      super(null, null, null, null);
+      super(null, null, null, null, null);
     }
 
     @Override