Author: etnu
Date: Wed Sep 24 12:10:29 2008
New Revision: 698689

URL: http://svn.apache.org/viewvc?rev=698689&view=rev
Log:
Restored view aliasing to Renderer.


Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java?rev=698689&r1=698688&r2=698689&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java
 Wed Sep 24 12:10:29 2008
@@ -18,6 +18,7 @@
  */
 package org.apache.shindig.gadgets.render;
 
+import org.apache.shindig.common.ContainerConfig;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
@@ -33,6 +34,9 @@
 
 import com.google.inject.Inject;
 
+import org.json.JSONArray;
+import org.json.JSONException;
+
 /**
  * Handles producing output markup for a gadget based on the provided context.
  */
@@ -40,14 +44,17 @@
   private final GadgetSpecFactory gadgetSpecFactory;
   private final ContentFetcherFactory fetcher;
   private final PreloaderService preloader;
+  private final ContainerConfig containerConfig;
 
   @Inject
   public Renderer(GadgetSpecFactory gadgetSpecFactory,
                   ContentFetcherFactory fetcher,
-                  PreloaderService preloader) {
+                  PreloaderService preloader,
+                  ContainerConfig containerConfig) {
     this.gadgetSpecFactory = gadgetSpecFactory;
     this.fetcher = fetcher;
     this.preloader = preloader;
+    this.containerConfig = containerConfig;
   }
 
   /**
@@ -73,7 +80,13 @@
 
       // TODO: Move Gadget.getView into a utility method so that the correct 
view can be pulled from
       // the gadget with aliasing done automatically.
-      View view = spec.getView(context.getView());
+      View view = getView(context, spec);
+
+      if (view == null) {
+        throw new RenderingException("Unable to locate an appropriate view in 
this gadget. " +
+            "Requested: '" + context.getView() + "' Available: " + 
spec.getViews().keySet());
+      }
+
       if (view.getType() == View.ContentType.URL) {
         throw new RenderingException("Attempted to render a url-type gadget.");
       }
@@ -97,4 +110,34 @@
       throw new RenderingException(e);
     }
   }
+
+  /**
+   * Attempts to extract the "current" view for the given gadget.
+   */
+  private View getView(GadgetContext context, GadgetSpec spec) {
+    String viewName = context.getView();
+    View view = spec.getView(viewName);
+    if (view == null) {
+      JSONArray aliases = containerConfig.getJsonArray(context.getContainer(),
+          "gadgets.features/views/" + viewName + "/aliases");
+      if (aliases != null) {
+        try {
+          for (int i = 0, j = aliases.length(); i < j; ++i) {
+            viewName = aliases.getString(i);
+            view = spec.getView(viewName);
+            if (view != null) {
+              break;
+            }
+          }
+        } catch (JSONException e) {
+          view = null;
+        }
+      }
+
+      if (view == null) {
+        view = spec.getView(GadgetSpec.DEFAULT_VIEW);
+      }
+    }
+    return view;
+  }
 }

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=698689&r1=698688&r2=698689&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 Sep 24 12:10:29 2008
@@ -23,6 +23,8 @@
 
 import org.apache.shindig.auth.AnonymousSecurityToken;
 import org.apache.shindig.auth.SecurityToken;
+import org.apache.shindig.common.ContainerConfig;
+import org.apache.shindig.common.ContainerConfigException;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
@@ -36,9 +38,13 @@
 
 import com.google.common.collect.Maps;
 
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.junit.Before;
 import org.junit.Test;
 
 import java.net.URI;
+import java.util.Arrays;
 import java.util.Map;
 
 /**
@@ -57,14 +63,20 @@
       " <Content view='proxied-signed' authz='signed' href='" + 
PROXIED_HTML_HREF + "'/>" +
       " <Content view='proxied-oauth' authz='oauth' href='" + 
PROXIED_HTML_HREF + "'/>" +
       " <Content view='url' type='url' 
href='http://example.org/always/an/error.html'/>" +
+      " <Content view='alias' type='html'>" + BASIC_HTML_CONTENT + 
"</Content>" +
       "</Module>";
 
   private final FakeGadgetSpecFactory specFactory = new 
FakeGadgetSpecFactory();
-
   private final FakeContentFetcherFactory fetcher = new 
FakeContentFetcherFactory();
-
   private final FakePreloaderService preloaderService = new 
FakePreloaderService();
-  private final Renderer renderer = new Renderer(specFactory, fetcher, 
preloaderService);
+  private FakeContainerConfig containerConfig;
+  private Renderer renderer;
+
+  @Before
+  public void setUp() throws Exception {
+    containerConfig = new FakeContainerConfig();
+    renderer = new Renderer(specFactory, fetcher, preloaderService, 
containerConfig);
+  }
 
   private GadgetContext makeContext(final String view, final Uri specUrl) {
     return new GadgetContext() {
@@ -128,6 +140,19 @@
     assertEquals(PROXIED_HTML_CONTENT, content);
   }
 
+  @Test
+  public void doViewAliasing() throws Exception {
+    JSONArray aliases = new JSONArray(Arrays.asList("alias"));
+    containerConfig.json.put("gadgets.features/views/aliased/aliases", 
aliases);
+    String content = renderer.render(makeContext("alias", SPEC_URL));
+    assertEquals(BASIC_HTML_CONTENT, content);
+  }
+
+  @Test(expected = RenderingException.class)
+  public void noSupportedViewThrows() throws RenderingException {
+    renderer.render(makeContext("not-real-view", SPEC_URL));
+  }
+
   private static class FakeGadgetSpecFactory implements GadgetSpecFactory {
     public GadgetSpec getGadgetSpec(GadgetContext context) throws 
GadgetException {
       return new GadgetSpec(context.getUrl(), GADGET);
@@ -196,4 +221,17 @@
       return null;
     }
   }
+
+  private static class FakeContainerConfig extends ContainerConfig {
+    private final JSONObject json = new JSONObject();
+
+    public FakeContainerConfig() throws ContainerConfigException {
+      super(null);
+    }
+
+    @Override
+    public Object getJson(String container, String parameter) {
+      return json.opt(parameter);
+    }
+  }
 }


Reply via email to