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);
+ }
+ }
}