You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by li...@apache.org on 2010/09/07 10:02:18 UTC

svn commit: r993268 [6/8] - in /shindig/branches/2.0.x: ./ config/ content/container/ content/samplecontainer/ content/sampledata/ extras/src/main/java/org/apache/shindig/extras/ extras/src/main/java/org/apache/shindig/extras/as/ extras/src/main/java/o...

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssSanitizerTest.java Tue Sep  7 08:02:11 2010
@@ -17,42 +17,84 @@
  */
 package org.apache.shindig.gadgets.parse.caja;
 
+import com.google.caja.parser.css.CssTree;
+import com.google.common.collect.ImmutableMap;
+
 import org.apache.shindig.common.EasyMockTestCase;
 import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.ContainerConfig;
+import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.render.SanitizingProxyUriManager;
-import org.apache.shindig.gadgets.uri.PassthruManager;
+import org.apache.shindig.gadgets.uri.DefaultProxyUriManager;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
-
-import com.google.caja.parser.css.CssTree;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
- *
+ * Tests for CajaCssSanitizer.
  */
 public class CajaCssSanitizerTest extends EasyMockTestCase {
-
   private CajaCssParser parser;
   private CajaCssSanitizer sanitizer;
   private final Uri DUMMY = Uri.parse("http://www.example.org/base");
-  private ProxyUriManager passthruManager;
   private SanitizingProxyUriManager importRewriter;
   private SanitizingProxyUriManager imageRewriter;
+  private GadgetContext gadgetContext;
+  public static final String MOCK_CONTAINER = "mockContainer";
+
+  private static class FakeContainerConfig extends AbstractContainerConfig {
+    private Map<String, Map<String, Object>> containers =
+        new HashMap<String, Map<String, Object>>();
+
+    private FakeContainerConfig() {
+      containers.put(ContainerConfig.DEFAULT_CONTAINER, ImmutableMap.<String, Object>builder()
+          .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.test.com")
+          .put(DefaultProxyUriManager.PROXY_PATH_PARAM, "/dir/proxy")
+          .build());
+      containers.put(MOCK_CONTAINER, ImmutableMap.<String, Object>builder()
+          .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
+          .build());
+    }
+
+    @Override
+    public Object getProperty(String container, String name) {
+      Map<String, Object> data = containers.get(container);
+
+      // Inherit from default if there is no value for this key. 
+      if (!data.containsKey(name)) {
+        data = containers.get(ContainerConfig.DEFAULT_CONTAINER);
+      }
+      return data.get(name);
+    }
+  }
 
   @Before
   public void setUp() throws Exception {
     parser = new CajaCssParser();
     sanitizer = new CajaCssSanitizer(parser);
-    passthruManager = new PassthruManager("test.com", "/proxy/path");
-    importRewriter = new SanitizingProxyUriManager(passthruManager, "text/css");
-    imageRewriter = new SanitizingProxyUriManager(passthruManager, "image/*");
+
+    ContainerConfig config = new FakeContainerConfig();
+    ProxyUriManager proxyUriManager = new DefaultProxyUriManager(config, null);
+
+    importRewriter = new SanitizingProxyUriManager(proxyUriManager, "text/css");
+    imageRewriter = new SanitizingProxyUriManager(proxyUriManager, "image/*");
+    gadgetContext = new GadgetContext() {
+      @Override
+      public String getContainer() {
+        return MOCK_CONTAINER;
+      }
+    };
   }
 
   @Test
   public void testPreserveSafe() throws Exception {
     String css = ".xyz { font: bold;} A { color: #7f7f7f}";
     CssTree.StyleSheet styleSheet = parser.parseDom(css);
-    sanitizer.sanitize(styleSheet, DUMMY, importRewriter, imageRewriter);
+    sanitizer.sanitize(styleSheet, DUMMY, gadgetContext, importRewriter, imageRewriter);
     assertStyleEquals(css, styleSheet);
   }
 
@@ -60,7 +102,7 @@ public class CajaCssSanitizerTest extend
   public void testSanitizeFunctionCall() throws Exception {
     String css = ".xyz { font : iamevil(bold); }";
     CssTree.StyleSheet styleSheet = parser.parseDom(css);
-    sanitizer.sanitize(styleSheet, DUMMY, importRewriter, imageRewriter);
+    sanitizer.sanitize(styleSheet, DUMMY, gadgetContext, importRewriter, imageRewriter);
     assertStyleEquals(".xyz {}", styleSheet);
   }
 
@@ -68,7 +110,7 @@ public class CajaCssSanitizerTest extend
    public void testSanitizeUnsafeProperties() throws Exception {
     String css = ".xyz { behavior: url('xyz.htc'); -moz-binding:url(\"http://ha.ckers.org/xssmoz.xml#xss\") }";
     CssTree.StyleSheet styleSheet = parser.parseDom(css);
-    sanitizer.sanitize(styleSheet, DUMMY, importRewriter, imageRewriter);
+    sanitizer.sanitize(styleSheet, DUMMY, gadgetContext, importRewriter, imageRewriter);
     assertStyleEquals(".xyz {}", styleSheet);
   }
 
@@ -76,7 +118,7 @@ public class CajaCssSanitizerTest extend
   public void testSanitizeScriptUrls() throws Exception {
     String css = ".xyz { background: url('javascript:doevill'); background : url(vbscript:moreevil); }";
     CssTree.StyleSheet styleSheet = parser.parseDom(css);
-    sanitizer.sanitize(styleSheet, DUMMY, importRewriter, imageRewriter);
+    sanitizer.sanitize(styleSheet, DUMMY, gadgetContext, importRewriter, imageRewriter);
     assertStyleEquals(".xyz {}", styleSheet);
   }
 
@@ -84,20 +126,41 @@ public class CajaCssSanitizerTest extend
   public void testProxyUrls() throws Exception {
     String css = ".xyz { background: url('http://www.example.org/img.gif');}";
     CssTree.StyleSheet styleSheet = parser.parseDom(css);
-    sanitizer.sanitize(styleSheet, DUMMY, importRewriter, imageRewriter);
-    assertStyleEquals(
-        ".xyz { background: url('http://test.com/proxy/path?url=" +
-        "http%3A%2F%2Fwww.example.org%2Fimg.gif" +
-        "&sanitize=1&rewriteMime=image%2F%2a');}", styleSheet);
+    sanitizer.sanitize(styleSheet, DUMMY, gadgetContext, importRewriter, imageRewriter);
+    assertStyleEquals(".xyz { " +
+        "background: url('//www.mock.com/dir/proxy?container=mockContainer&gadget=http%3A%2F%2Fwww.example.org%2Fbase" +
+        "&debug=0&nocache=0&url=http%3A%2F%2Fwww.example.org%2Fimg.gif&" +
+        "sanitize=1&rewriteMime=image%2F%2a');}", styleSheet);
+  }
+
+  @Test
+  public void testUrlEscapingMockContainer() throws Exception {
+    String css = ".xyz { background: url('http://www.example.org/img.gif');}";
+    CssTree.StyleSheet styleSheet = parser.parseDom(css);
+    sanitizer.sanitize(styleSheet, DUMMY, gadgetContext, importRewriter, imageRewriter);
+    assertEquals(".xyz{" +
+        "background:url('//www.mock.com/dir/proxy?container=mockContainer&gadget=http%3A%2F%2Fwww.example.org%2Fbase" +
+        "&debug=0&nocache=0&url=http%3A%2F%2Fwww.example.org%2Fimg.gif" +
+        "&sanitize=1&rewriteMime=image%2F%2a');}",
+        parser.serialize(styleSheet).replaceAll("\\s", ""));
   }
 
   @Test
-  public void testUrlEscaping() throws Exception {
+  public void testUrlEscapingDefaultContainer() throws Exception {
     String css = ".xyz { background: url('http://www.example.org/img.gif');}";
     CssTree.StyleSheet styleSheet = parser.parseDom(css);
-    sanitizer.sanitize(styleSheet, DUMMY, importRewriter, imageRewriter);
-    assertEquals(".xyz{background:url('http://test.com/proxy/path?url=http%3A%2F%2Fwww.example.org%2F" +
-        "img.gif&sanitize=1&rewriteMime=image%2F%2a');}",
+    GadgetContext gadgetContext = new GadgetContext() {
+      @Override
+      public String getContainer() {
+        return ContainerConfig.DEFAULT_CONTAINER;
+      }
+    };
+
+    sanitizer.sanitize(styleSheet, DUMMY, gadgetContext, importRewriter, imageRewriter);
+    assertEquals(".xyz{" +
+        "background:url('//www.test.com/dir/proxy?container=default&gadget=http%3A%2F%2Fwww.example.org%2Fbase" +
+        "&debug=0&nocache=0&url=http%3A%2F%2Fwww.example.org%2Fimg.gif" +
+        "&sanitize=1&rewriteMime=image%2F%2a');}",
         parser.serialize(styleSheet).replaceAll("\\s", ""));
   }
 

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java Tue Sep  7 08:02:11 2010
@@ -74,7 +74,7 @@ public class PipelinedDataPreloaderTest 
       + "refreshInterval=\"60\" method=\"POST\"/>" + "</Content></Module>";
 
   private static final String XML_WITH_VARIABLE = "<Module " +
-  		"xmlns:os=\"" + PipelinedData.OPENSOCIAL_NAMESPACE + "\" " +
+      "xmlns:os=\"" + PipelinedData.OPENSOCIAL_NAMESPACE + "\" " +
         "xmlns:osx=\"" + PipelinedData.EXTENSION_NAMESPACE + "\">"
     + "<ModulePrefs title=\"Title\"/>"
     + "<Content href=\"http://example.org/proxied.php\" view=\"profile\">"

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ConcatVisitorTest.java Tue Sep  7 08:02:11 2010
@@ -41,7 +41,7 @@ import java.util.List;
 import java.util.Map;
 
 public class ConcatVisitorTest extends DomWalkerTestBase {
-  private static final String JS1_URL_STR = "http://one.com/foo.js";
+  private static final String JS1_URL_STR = "http://one.com/foo.js?test=1&ui=2";
   private Node js1;
   
   private static final String JS2_URL_STR = "http://two.com/foo.js";
@@ -85,7 +85,16 @@ public class ConcatVisitorTest extends D
   
   private static final String CSS9_URL_STR = "http://nine.com/foo.js";
   private Node css9;
-  
+
+  private static final String CSS10_URL_STR = "http://ten.com/foo.js";
+  private Node css10;
+
+  private static final String CSS11_URL_STR = "http://eleven.com/foo.js";
+  private Node css11;
+
+  private static final String CSS12_URL_STR = "http://twelve.com/foo.js";
+  private Node css12;
+
   private static final Uri CONCAT_BASE_URI = Uri.parse("http://test.com/proxy");
   
   @Before
@@ -97,17 +106,18 @@ public class ConcatVisitorTest extends D
     js4 = elem("script", "src", JS4_URL_STR);
     js5 = elem("script", "src", JS5_URL_STR);
     js6 = elem("script", "src", JS6_URL_STR);
-    css1 = elem("link", "rel", "stylesheet", "type", "text/css", "href", CSS1_URL_STR);
+    css1 = elem("link", "rel", "Stylesheet", "type", "Text/css", "href", CSS1_URL_STR);
     css2 = elem("link", "rel", "stylesheet", "type", "text/css", "href", CSS2_URL_STR);
     css3 = elem("link", "rel", "stylesheet", "type", "text/css", "href", CSS3_URL_STR);
     css4 = elem("link", "rel", "stylesheet", "type", "text/css", "href", CSS4_URL_STR);
     css5 = elem("link", "rel", "stylesheet", "type", "text/css", "media", "print", "href", CSS5_URL_STR);
-    css6 = elem("link", "rel", "stylesheet", "type", "text/css", "media", "print", "href",
-    		    CSS6_URL_STR);
+    css6 = elem("link", "rel", "stylesheet", "type", "text/css", "media", "print", "href", CSS6_URL_STR);
     css7 = elem("link", "rel", "stylesheet", "type", "text/css", "media", "screen", "href", CSS7_URL_STR);
     css8 = elem("link", "rel", "stylesheet", "type", "text/css", "media", "screen", "href", CSS8_URL_STR);
     css9 = elem("link", "rel", "stylesheet", "type", "text/css", "href", CSS9_URL_STR);
-  
+    css10 = elem("link", "rel", "stylesheet", "type", "text/css", "media", "all", "href", CSS10_URL_STR);
+    css11 = elem("link", "rel", "stylesheet", "type", "text/css", "media", "all", "href", CSS11_URL_STR);
+    css12 = elem("link", "rel", "stylesheet", "type", "text/css", "media", "all", "href", CSS12_URL_STR);
   }
   
   @Test
@@ -161,19 +171,49 @@ public class ConcatVisitorTest extends D
     assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, sep2));
     assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js3));
   }
-  
+
+  @Test
+  public void visitValidCss() throws Exception {
+    Node textNode = doc.createTextNode("");
+    Node node = elem("link", "type", "text/css", "rel", "stylesheet", "href", CSS1_URL_STR);
+    seqNodes(node, textNode, css1);
+    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null));
+  }
+
+  @Test
+  public void dontVisitCssSeperatedByNonEmptyTextNode() throws Exception {
+    Node textNode = doc.createTextNode("Data\n");
+    Node node = elem("link", "type", "text/css", "rel", "stylesheet", "href", CSS1_URL_STR);
+    seqNodes(node, textNode, css1);
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
+  }
+
   @Test
-  public void visitRelFreeCss() throws Exception {
+  public void dontVisitRelFreeCss() throws Exception {
     Node node = elem("link", "type", "text/css", "href", CSS1_URL_STR);
     seqNodes(node, css1);
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
   }
   
   @Test
-  public void visitTypeCssFreeCss() throws Exception {
+  public void dontVisitTypeCssFreeCss() throws Exception {
     Node node = elem("link", "rel", "stylesheet", "href", CSS1_URL_STR);
     seqNodes(node, css1);
-    assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(node, null));
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
+  }
+
+  @Test
+  public void dontVisitTypeCssWrongRelAttributes() throws Exception {
+    Node node = elem("link", "rel", "alternate", "type", "text/css", "href", CSS1_URL_STR);
+    seqNodes(node, css1);
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
+  }
+
+  @Test
+  public void dontVisitTypeCssWrongTypeAttributes() throws Exception {
+    Node node = elem("link", "rel", "stylesheet", "type", "text/javascript", "href", CSS1_URL_STR);
+    seqNodes(node, css1);
+    assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null));
   }
   
   @Test
@@ -331,7 +371,7 @@ public class ConcatVisitorTest extends D
     assertEquals(CSS2_URL_STR, concatUri1.getQueryParameter("2"));
     assertNull(concatUri1.getQueryParameter("3"));
     
-    assertEquals(3, parent2.getChildNodes().getLength());
+    assertEquals(2, parent2.getChildNodes().getLength());
     Element cn2 = (Element)parent2.getChildNodes().item(0);
     Uri concatUri2 = Uri.parse(cn2.getAttribute("href").replace("&amp;", "&"));
     assertEquals(CONCAT_BASE_URI.getScheme(), concatUri2.getScheme());
@@ -339,8 +379,10 @@ public class ConcatVisitorTest extends D
     assertEquals(CONCAT_BASE_URI.getPath(), concatUri2.getPath());
     assertEquals(CSS3_URL_STR, concatUri2.getQueryParameter("1"));
     assertEquals(CSS4_URL_STR, concatUri2.getQueryParameter("2"));
-    assertEquals(CSS9_URL_STR, concatUri2.getQueryParameter("3"));
-    assertNull(concatUri2.getQueryParameter("4"));
+    assertEquals(CSS7_URL_STR, concatUri2.getQueryParameter("3"));
+    assertEquals(CSS8_URL_STR, concatUri2.getQueryParameter("4"));
+    assertEquals(CSS9_URL_STR, concatUri2.getQueryParameter("5"));
+    assertNull(concatUri2.getQueryParameter("6"));
     assertEquals("", cn2.getAttribute("media"));
     
     Element cn3 = (Element)parent2.getChildNodes().item(1);
@@ -352,18 +394,90 @@ public class ConcatVisitorTest extends D
     assertEquals(CSS6_URL_STR, concatUri3.getQueryParameter("2"));
     assertNull(concatUri3.getQueryParameter("3"));
     assertEquals("print", cn3.getAttribute("media"));
-  
-    Element cn4 = (Element)parent2.getChildNodes().item(2);
+  }
+
+  @Test
+  public void concatMultiBatchCssWithAllMediaTypeAndTitle() throws Exception {
+  List<Node> fullListCss = Lists.newArrayList();
+    // modify few node to have the title attriblue.
+    ((Element) css2).setAttribute("title", "one");
+    ((Element) css3).setAttribute("title", "two");
+    ((Element) css4).setAttribute("title", "two");
+    ((Element) css10).setAttribute("title", "two");
+    fullListCss.addAll(seqNodes(css1, css2, css3, css4, css10, css11, css12, css7, css8, css9));
+    Node parent1 = css1.getParentNode();
+    assertEquals(10, parent1.getChildNodes().getLength());
+
+    SimpleConcatUriManager mgr = simpleMgr();
+    ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false), mgr);
+    assertTrue(rewriter.revisit(gadget(), fullListCss));
+
+    // Should have been split across 'all' media type and then batches should be independently
+    // concatenated.
+    Element cn1 = (Element)parent1.getChildNodes().item(0);
+    Uri concatUri1 = Uri.parse(cn1.getAttribute("href").replace("&amp;", "&"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri1.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri1.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri1.getPath());
+    assertEquals(CSS1_URL_STR, concatUri1.getQueryParameter("1"));
+    assertNull(concatUri1.getQueryParameter("2"));
+    assertEquals("", cn1.getAttribute("media"));
+
+    Element cn2 = (Element)parent1.getChildNodes().item(1);
+    Uri concatUri2 = Uri.parse(cn2.getAttribute("href").replace("&amp;", "&"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri2.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri2.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri2.getPath());
+    assertEquals(CSS2_URL_STR, concatUri2.getQueryParameter("1"));
+    assertNull(concatUri2.getQueryParameter("2"));
+    assertEquals("", cn2.getAttribute("media"));
+    assertEquals("one", cn2.getAttribute("title"));
+
+    Element cn3 = (Element)parent1.getChildNodes().item(2);
+    Uri concatUri3 = Uri.parse(cn3.getAttribute("href").replace("&amp;", "&"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri3.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri3.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri3.getPath());
+    assertEquals(CSS3_URL_STR, concatUri3.getQueryParameter("1"));
+    assertEquals(CSS4_URL_STR, concatUri3.getQueryParameter("2"));
+    assertNull(concatUri3.getQueryParameter("3"));
+    assertEquals("", cn3.getAttribute("media"));
+    assertEquals("two", cn3.getAttribute("title"));
+
+    Element cn4 = (Element)parent1.getChildNodes().item(3);
     Uri concatUri4 = Uri.parse(cn4.getAttribute("href").replace("&amp;", "&"));
     assertEquals(CONCAT_BASE_URI.getScheme(), concatUri4.getScheme());
     assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri4.getAuthority());
     assertEquals(CONCAT_BASE_URI.getPath(), concatUri4.getPath());
-    assertEquals(CSS7_URL_STR, concatUri4.getQueryParameter("1"));
-    assertEquals(CSS8_URL_STR, concatUri4.getQueryParameter("2"));
-    assertNull(concatUri4.getQueryParameter("3"));
-    assertEquals("screen", cn4.getAttribute("media"));
+    assertEquals(CSS10_URL_STR, concatUri4.getQueryParameter("1"));
+    assertNull(concatUri4.getQueryParameter("2"));
+    assertEquals("all", cn4.getAttribute("media"));
+    assertEquals("two", cn4.getAttribute("title"));
+
+    Element cn5 = (Element)parent1.getChildNodes().item(4);
+    Uri concatUri5 = Uri.parse(cn5.getAttribute("href").replace("&amp;", "&"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri5.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri5.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri5.getPath());
+    assertEquals(CSS11_URL_STR, concatUri5.getQueryParameter("1"));
+    assertEquals(CSS12_URL_STR, concatUri5.getQueryParameter("2"));
+    assertNull(concatUri5.getQueryParameter("3"));
+    assertEquals("all", cn5.getAttribute("media"));
+    assertEquals("", cn5.getAttribute("title"));
+
+    Element cn6 = (Element)parent1.getChildNodes().item(5);
+    Uri concatUri6 = Uri.parse(cn6.getAttribute("href").replace("&amp;", "&"));
+    assertEquals(CONCAT_BASE_URI.getScheme(), concatUri6.getScheme());
+    assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri6.getAuthority());
+    assertEquals(CONCAT_BASE_URI.getPath(), concatUri6.getPath());
+    assertEquals(CSS7_URL_STR, concatUri6.getQueryParameter("1"));
+    assertEquals(CSS8_URL_STR, concatUri6.getQueryParameter("2"));
+    assertEquals(CSS9_URL_STR, concatUri6.getQueryParameter("3"));
+    assertNull(concatUri6.getQueryParameter("4"));
+    assertEquals("screen", cn6.getAttribute("media"));
+    assertEquals("", cn6.getAttribute("title"));
   }
-  
+
   @Test
   public void concatMultiBatchJsBadBatch() throws Exception {
     List<Node> fullListJs = Lists.newArrayList();

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssResponseRewriterTest.java Tue Sep  7 08:02:11 2010
@@ -17,15 +17,18 @@
  */
 package org.apache.shindig.gadgets.rewrite;
 
-import static org.junit.Assert.assertEquals;
-
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.ContainerConfig;
+import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
 import org.apache.shindig.gadgets.parse.caja.CajaCssParser;
-import org.apache.shindig.gadgets.uri.PassthruManager;
+import org.apache.shindig.gadgets.uri.DefaultProxyUriManager;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
 import org.easymock.EasyMock;
 import org.junit.Before;
@@ -33,17 +36,47 @@ import org.junit.Test;
 
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
-import com.google.common.collect.Lists;
+import static org.junit.Assert.assertEquals;
 
 /**
- *
+ * Tests for CssResponseRewriter.
  */
 public class CssResponseRewriterTest extends RewriterTestBase {
+  private static class FakeContainerConfig extends AbstractContainerConfig {
+    private Map<String, Map<String, Object>> containers = new HashMap<String, Map<String, Object>>();
+
+    private FakeContainerConfig() {
+      containers.put(ContainerConfig.DEFAULT_CONTAINER, ImmutableMap.<String, Object>builder()
+        .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.test.com")
+        .put(DefaultProxyUriManager.PROXY_PATH_PARAM, "/dir/proxy")
+        .build());
+
+      containers.put(MOCK_CONTAINER, ImmutableMap.<String, Object>builder()
+        .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
+        .build());
+    }
+
+    @Override
+    public Object getProperty(String container, String name) {
+      Map<String, Object> data = containers.get(container);
+
+      //if there is no value by this key inherit from default
+      if (!data.containsKey(name)) {
+        data = containers.get(ContainerConfig.DEFAULT_CONTAINER);
+      }
+
+      return data.get(name);
+    }
+  }
+
   private CssResponseRewriter rewriter;
   private CssResponseRewriter rewriterNoOverrideExpires;
   private Uri dummyUri;
+  private GadgetContext gadgetContext;
   private ProxyUriManager proxyUriManager;
   private ContentRewriterFeature.Factory factory;
 
@@ -60,7 +93,8 @@ public class CssResponseRewriterTest ext
             return overrideFeatureNoOverrideExpires;
           }
         };
-    proxyUriManager = new PassthruManager("www.test.com", "/dir/proxy");
+    ContainerConfig config = new FakeContainerConfig();
+    proxyUriManager = new DefaultProxyUriManager(config, null);
     rewriterNoOverrideExpires = new CssResponseRewriter(new CajaCssParser(),
         proxyUriManager, factoryNoOverrideExpires);
     final ContentRewriterFeature.Config overrideFeature =
@@ -75,6 +109,12 @@ public class CssResponseRewriterTest ext
     rewriter = new CssResponseRewriter(new CajaCssParser(),
         proxyUriManager, factory);
     dummyUri = Uri.parse("http://www.w3c.org");
+    gadgetContext = new GadgetContext() {
+      @Override
+      public Uri getUrl() {
+        return dummyUri;
+      }
+    };
   }
 
   @Test
@@ -120,7 +160,7 @@ public class CssResponseRewriterTest ext
         getResourceAsStream("org/apache/shindig/gadgets/rewrite/rewritebasic.css"));
     String expected = IOUtils.toString(this.getClass().getClassLoader().
         getResourceAsStream("org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css"));
-    expected = expected.replace("fp=1150739864", "fp=1150739864&nocache=1");
+    expected = expected.replace("nocache=0", "nocache=1");
     HttpRequest request = new HttpRequest(Uri.parse("http://www.example.org/path/rewritebasic.css"));
     request.setMethod("GET");
     request.setGadget(SPEC_URL);
@@ -141,7 +181,7 @@ public class CssResponseRewriterTest ext
     String expected = IOUtils.toString(this.getClass().getClassLoader().
         getResourceAsStream("org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css"));
     expected = replaceDefaultWithMockServer(expected);
-    proxyUriManager = new PassthruManager("www.mock.com", "/dir/proxy");
+    expected = expected.replace("container=default", "container=" + MOCK_CONTAINER);
     rewriter = new CssResponseRewriter(new CajaCssParser(),
         proxyUriManager, factory);
     
@@ -189,9 +229,13 @@ public class CssResponseRewriterTest ext
         "div {list-style-image:url('http://a.b.com/bullet.gif');list-style-position:outside;margin:5px;padding:0}\n" +
          ".someid {background-image:url(http://a.b.com/bigimg.png);float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
     String rewritten =
-        "div {list-style-image:url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fbullet.gif');\n"
+        "div {list-style-image:url('//www.test.com/dir/proxy?container=default"
+            + "&gadget=http%3A%2F%2Fwww.w3c.org&debug=0&nocache=0"
+            + "&url=http%3A%2F%2Fa.b.com%2Fbullet.gif');\n"
             + "list-style-position:outside;margin:5px;padding:0}\n"
-            + ".someid {background-image:url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fbigimg.png');\n"
+            + ".someid {background-image:url('//www.test.com/dir/proxy?container=default"
+            + "&gadget=http%3A%2F%2Fwww.w3c.org&debug=0&nocache=0" 
+            + "&url=http%3A%2F%2Fa.b.com%2Fbigimg.png');\n"
             + "float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
     validateRewritten(original, rewritten);
   }
@@ -210,7 +254,8 @@ public class CssResponseRewriterTest ext
     StringWriter sw = new StringWriter();
     List<String> stringList = rewriter
         .rewrite(new StringReader(original), dummyUri,
-          CssResponseRewriter.uriMaker(proxyUriManager, defaultRewriterFeature), sw, true);
+            CssResponseRewriter.uriMaker(proxyUriManager, defaultRewriterFeature), sw,
+            true, gadgetContext);
     assertEquals(StringUtils.deleteWhitespace(expected),
         StringUtils.deleteWhitespace(sw.toString()));
     assertEquals(Lists.newArrayList("www.example.org/some.css",
@@ -225,7 +270,8 @@ public class CssResponseRewriterTest ext
     StringWriter sw = new StringWriter();
     List<String> stringList = rewriter
         .rewrite(new StringReader(original), dummyUri,
-          CssResponseRewriter.uriMaker(proxyUriManager, defaultRewriterFeature), sw, true);
+            CssResponseRewriter.uriMaker(proxyUriManager, defaultRewriterFeature), sw,
+            true, gadgetContext);
     assertEquals(StringUtils.deleteWhitespace(expected),
         StringUtils.deleteWhitespace(sw.toString()));
     assertEquals(Lists.newArrayList("www.example.org/some.css"), stringList);

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitorTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitorTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingVisitorTest.java Tue Sep  7 08:02:11 2010
@@ -191,5 +191,10 @@ public class ProxyingVisitorTest extends
     assertEquals("^!,,|BLARGH", e2.getAttribute("src"));
     assertEquals(rewrittenUri.toString(), e3.getAttribute("src"));
     assertEquals(rewrittenUri.toString(), e4.getAttribute("src"));
+
+    // Test that the html tag context has been correctly filled.
+    assertEquals("script", cap.getValue().get(0).getHtmlTagContext());
+    assertEquals("img", cap.getValue().get(1).getHtmlTagContext());
+    assertEquals("script", cap.getValue().get(2).getHtmlTagContext());
   }
 }

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleAdjacencyVisitorTest.java Tue Sep  7 08:02:11 2010
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
+import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.rewrite.DomWalker.Visitor.VisitStatus;
 
 import org.w3c.dom.Node;
@@ -60,7 +61,7 @@ public class StyleAdjacencyVisitorTest e
   public void visitLinkCaseInsensitive() throws Exception {
     Node node = elem("lINK", "REL", "stYlEsheet");
     assertEquals(VisitStatus.RESERVE_TREE, visit(node));
-    node = elem("LINk", "tyPe", "csS");
+    node = elem("LINk", "tyPe", "text/csS");
     assertEquals(VisitStatus.RESERVE_TREE, visit(node));
   }
   
@@ -81,7 +82,13 @@ public class StyleAdjacencyVisitorTest e
     Node node = elem("link");
     assertEquals(VisitStatus.BYPASS, visit(node));
   }
-  
+
+  @Test
+  public void bypassLinkWithWrongAttribs() throws Exception {
+    Node node = elem("link", "type", "somecss");
+    assertEquals(VisitStatus.BYPASS, visit(node));
+  }
+
   @Test
   public void bypassText() throws Exception {
     Node node = doc.createTextNode("text");
@@ -110,7 +117,7 @@ public class StyleAdjacencyVisitorTest e
     
     // Reshuffling validation.
     assertEquals(4, head.getChildNodes().getLength());
-    assertSame(style, head.getChildNodes().item(3)); // Last.
+    assertSame(style, head.getChildNodes().item(0)); // First.
   }
   
   @Test
@@ -129,10 +136,37 @@ public class StyleAdjacencyVisitorTest e
     
     // Reshuffling validation.
     assertEquals(2, head.getChildNodes().getLength());
-    assertSame(style, head.getChildNodes().item(1)); // Last.
+    assertSame(style, head.getChildNodes().item(0)); // First.
     assertEquals(3, body.getChildNodes().getLength());
   }
-  
+
+  @Test
+  public void reshuffleMultipleStyleNodesWithNoChildernInHead() throws Exception {
+    Node style1 = elem("style");
+    Node style2 = elem("style");
+    Node style3 = elem("style");
+
+    // Some in head, some in body.
+    Node html = htmlDoc(new Node[] {}, elem("script"), style1, elem("foo"),
+        doc.createTextNode("text1"), style2, doc.createComment("comment"), elem("div"),
+        style3);
+    assertTrue(revisit(style1, style2, style3));
+
+    // Document structure sanity tests.
+    assertEquals(2, html.getChildNodes().getLength());
+    Node head = html.getFirstChild();
+    assertEquals("head", head.getNodeName());
+    Node body = html.getLastChild();
+    assertEquals("body", body.getNodeName());
+
+    // Reshuffling validation.
+    assertEquals(3, head.getChildNodes().getLength());
+    assertSame(style1, head.getChildNodes().item(0));
+    assertSame(style2, head.getChildNodes().item(1));
+    assertSame(style3, head.getChildNodes().item(2));
+    assertEquals(5, body.getChildNodes().getLength());
+  }
+
   @Test
   public void reshuffleMultipleStyleNodes() throws Exception {
     Node style1 = elem("style");
@@ -154,9 +188,9 @@ public class StyleAdjacencyVisitorTest e
     
     // Reshuffling validation.
     assertEquals(5, head.getChildNodes().getLength());
-    assertSame(style1, head.getChildNodes().item(2));
-    assertSame(style2, head.getChildNodes().item(3));
-    assertSame(style3, head.getChildNodes().item(4));
+    assertSame(style1, head.getChildNodes().item(0));
+    assertSame(style2, head.getChildNodes().item(1));
+    assertSame(style3, head.getChildNodes().item(2));
     assertEquals(3, body.getChildNodes().getLength());
   }
   
@@ -167,7 +201,7 @@ public class StyleAdjacencyVisitorTest e
     Node link3 = elem("link", "rel", "stylesheet");
     
     // Some in head, some in body.
-    Node html = htmlDoc(new Node[] { elem("script"), link1, elem("foo") },
+    Node html = htmlDoc(new Node[] { link1, elem("script"), elem("foo") },
         doc.createTextNode("text1"), link2, doc.createComment("comment"), elem("div"),
         link3);
     assertTrue(revisit(link1, link2, link3));
@@ -181,9 +215,9 @@ public class StyleAdjacencyVisitorTest e
     
     // Reshuffling validation.
     assertEquals(5, head.getChildNodes().getLength());
-    assertSame(link1, head.getChildNodes().item(2));
-    assertSame(link2, head.getChildNodes().item(3));
-    assertSame(link3, head.getChildNodes().item(4));
+    assertSame(link1, head.getChildNodes().item(0));
+    assertSame(link2, head.getChildNodes().item(1));
+    assertSame(link3, head.getChildNodes().item(2));
     assertEquals(3, body.getChildNodes().getLength());
   }
   
@@ -211,10 +245,10 @@ public class StyleAdjacencyVisitorTest e
     
     // Reshuffling validation.
     assertEquals(8, head.getChildNodes().getLength());
-    assertSame(style1, head.getChildNodes().item(4));
-    assertSame(link1, head.getChildNodes().item(5));
-    assertSame(style2, head.getChildNodes().item(6));
-    assertSame(link2, head.getChildNodes().item(7));
+    assertSame(style1, head.getChildNodes().item(0));
+    assertSame(link1, head.getChildNodes().item(1));
+    assertSame(style2, head.getChildNodes().item(2));
+    assertSame(link2, head.getChildNodes().item(3));
     assertEquals(0, div.getChildNodes().getLength());
     assertEquals(3, body.getChildNodes().getLength());
   }
@@ -234,7 +268,27 @@ public class StyleAdjacencyVisitorTest e
     assertEquals(1, html.getChildNodes().getLength());
     assertSame(body, html.getFirstChild());
   }
-  
+
+  @Test
+  public void singleStyleNodeInHead() throws Exception {
+    Node style = elem("style", "type", "text/css");
+    Node head = elem("head");
+    head.appendChild(style);
+
+    Node html = elem("html");
+    html.appendChild(head);
+    html.appendChild(elem("body"));
+    doc.appendChild(html);
+
+    assertTrue(revisit(style));
+
+    // Document structure sanity tests.
+    assertEquals(2, html.getChildNodes().getLength());
+    assertSame(head, html.getFirstChild());
+  }
+
+
+
   private VisitStatus visit(Node node) throws Exception {
     return new StyleAdjacencyVisitor().visit(gadget(), node);
   }

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagExtractorVisitorTest.java Tue Sep  7 08:02:11 2010
@@ -122,9 +122,9 @@ public class StyleTagExtractorVisitorTes
     List<String> extractedUrls1 = ImmutableList.of(urlStr1);
     String urlStr2 = "http://bar.com/1.css";
     List<String> extractedUrls2 = ImmutableList.of(urlStr2);
-    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls1).once();
-    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls2).once();
     replay(cssRewriter);
     
@@ -160,9 +160,9 @@ public class StyleTagExtractorVisitorTes
     List<String> extractedUrls1 = ImmutableList.of(urlStr1);
     String urlStr2 = "http://bar.com/1.css";
     List<String> extractedUrls2 = ImmutableList.of(urlStr2);
-    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls1).once();
-    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls2).once();
     replay(cssRewriter);
     
@@ -196,9 +196,9 @@ public class StyleTagExtractorVisitorTes
     Element elem2 = elem("elem2");
     List<String> extractedUrls1 = ImmutableList.of();
     List<String> extractedUrls2 = ImmutableList.of();
-    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem1), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls1).once();
-    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true)))
+    expect(cssRewriter.rewrite(eq(elem2), eq(base), isA(UriMaker.class), eq(true), eq(gadget.getContext())))
         .andReturn(extractedUrls2).once();
     replay(cssRewriter);
     

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/StyleTagProxyEmbeddedUrlsVisitorTest.java Tue Sep  7 08:02:11 2010
@@ -19,17 +19,22 @@
 package org.apache.shindig.gadgets.rewrite;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.PropertiesModule;
 import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.DefaultGuiceModule;
 import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.oauth.OAuthModule;
 import org.apache.shindig.gadgets.parse.ParseModule;
 import org.apache.shindig.gadgets.parse.caja.CajaHtmlParser;
 import org.apache.shindig.gadgets.parse.caja.CajaHtmlSerializer;
+import org.apache.shindig.gadgets.uri.DefaultProxyUriManager;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
 import org.easymock.EasyMock;
 import org.junit.Before;
@@ -37,15 +42,46 @@ import org.junit.Test;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import static org.junit.Assert.assertEquals;
 
 /**
  * Tests for StyleTagProxyEmbeddedUrlsVisitor.
  */
 public class StyleTagProxyEmbeddedUrlsVisitorTest extends DomWalkerTestBase {
+  protected static final String MOCK_CONTAINER = "mock";
+
+  private static class FakeContainerConfig extends AbstractContainerConfig {
+    private Map<String, Map<String, Object>> containers = new HashMap<String, Map<String, Object>>();
+
+    private FakeContainerConfig(ContainerConfig defaultContainerConfig) {
+      containers.put(ContainerConfig.DEFAULT_CONTAINER,
+          defaultContainerConfig.getProperties(ContainerConfig.DEFAULT_CONTAINER));
+
+      containers.put(MOCK_CONTAINER, ImmutableMap.<String, Object>builder()
+          .put(DefaultProxyUriManager.PROXY_HOST_PARAM, "www.mock.com")
+          .build());
+    }
+
+    @Override
+    public Object getProperty(String container, String name) {
+      Map<String, Object> data = containers.get(container);
+
+      //if there is no value by this key inherit from default
+      if (!data.containsKey(name)) {
+        data = containers.get(ContainerConfig.DEFAULT_CONTAINER);
+      }
+
+      return data.get(name);
+    }
+  }
+
   private Injector injector;
   private CajaHtmlParser htmlParser;
-  CajaHtmlSerializer serializer;
+  private CajaHtmlSerializer serializer;
+  private ProxyUriManager proxyUriManager;
 
   @Before
   public void setUp() {
@@ -56,33 +92,48 @@ public class StyleTagProxyEmbeddedUrlsVi
         new ParseModule.DOMImplementationProvider();
     htmlParser = new CajaHtmlParser(domImpl.get());
     serializer = new CajaHtmlSerializer();
+    ContainerConfig config = new FakeContainerConfig(injector.getInstance(ContainerConfig.class));
+    proxyUriManager = new DefaultProxyUriManager(config, null);
+  }
+
+  private static final String ORIGINAL = "<html><head>"
+      + "<style>"
+      + "@import url(/1.css);"
+      + "P {color:blue;}"
+      + "P {color:red;}"
+      + "A {background: url(/2.jpg);}"
+      + "</style>"
+      + "</head><body><a href=\"hello\">Hello</a>"
+      + "</body></html>";
+
+  private static final String EXPECTED = "<html><head>"
+      + "<style>"
+      + "@import url('//localhost:8080/gadgets/proxy?container=default&"
+      + "gadget=http%3A%2F%2F1.com%2F&debug=0&nocache=0"
+      + "&url=http%3A%2F%2F1.com%2F1.css');\n"
+      + "P {color:blue;}"
+      + "P {color:red;}"
+      + "A {background: url('//localhost:8080/gadgets/proxy?container=default"
+      + "&gadget=http%3A%2F%2F1.com%2F&debug=0&nocache=0"
+      + "&url=http%3A%2F%2F1.com%2F2.jpg');}"
+      + "</style></head>"
+      + "<body><a href=\"hello\">Hello</a>\n"
+      + "</body></html>";
+
+  @Test
+  public void testImportsAndBackgroundUrlsInStyleTagDefaultContainer() throws Exception {
+    testImportsAndBackgroundUrlsInStyleTag(ORIGINAL, EXPECTED, ContainerConfig.DEFAULT_CONTAINER);
   }
 
   @Test
-  public void testImportsAndBackgroundUrlsInStyleTag() throws Exception {
-    String html = "<html><head>"
-                  + "<style>"
-                  + "@import url(/1.css);"
-                  + "P {color:blue;}"
-                  + "P {color:red;}"
-                  + "A {background: url(/2.jpg);}"
-                  + "</style>"
-                  + "</head><body><a href=\"hello\">Hello</a>"
-                  + "</body></html>";
-    String expected =
-        "<html><head>"
-        + "<style>"
-        + "@import url('//localhost:8080/gadgets/proxy?container=default&"
-        + "gadget=http%3A%2F%2F1.com%2F&debug=0&nocache=0"
-        + "&url=http%3A%2F%2F1.com%2F1.css');\n"
-        + "P {color:blue;}"
-        + "P {color:red;}"
-        + "A {background: url('//localhost:8080/gadgets/proxy?container=default"
-        + "&gadget=http%3A%2F%2F1.com%2F&debug=0&nocache=0"
-        + "&url=http%3A%2F%2F1.com%2F2.jpg');}"
-        + "</style></head>"
-        + "<body><a href=\"hello\">Hello</a>\n"
-        + "</body></html>";
+  public void testImportsAndBackgroundUrlsInStyleTagMockContainer() throws Exception {
+    testImportsAndBackgroundUrlsInStyleTag(ORIGINAL, EXPECTED.replace(
+        "localhost:8080/gadgets/proxy?container=default", "www.mock.com/gadgets/proxy?container=mock"), 
+        MOCK_CONTAINER);
+  }
+  
+  private void testImportsAndBackgroundUrlsInStyleTag(String html, String expected, String container) 
+      throws Exception {
     Document doc = htmlParser.parseDom(html);
 
     ContentRewriterFeature.Config config = injector.getInstance(
@@ -90,10 +141,12 @@ public class StyleTagProxyEmbeddedUrlsVi
     EasyMock.replay();
 
     StyleTagProxyEmbeddedUrlsVisitor visitor = new StyleTagProxyEmbeddedUrlsVisitor(
-        config, injector.getInstance(ProxyUriManager.class),
+        config, proxyUriManager,
         injector.getInstance(CssResponseRewriter.class));
 
-    Gadget gadget = DomWalker.makeGadget(Uri.parse("http://1.com/"));
+    Gadget gadget = DomWalker.makeGadget(new HttpRequest(Uri.parse("http://1.com/")).setContainer(
+        container));
+
     NodeList list = doc.getElementsByTagName("style");
     visitor.revisit(gadget, ImmutableList.of(list.item(0)));
     EasyMock.verify();
@@ -101,4 +154,4 @@ public class StyleTagProxyEmbeddedUrlsVi
     assertEquals(StringUtils.deleteWhitespace(expected),
         StringUtils.deleteWhitespace(serializer.serialize(doc)));
   }
-}
+}
\ No newline at end of file

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.java Tue Sep  7 08:02:11 2010
@@ -37,7 +37,10 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
 import java.util.Map;
-import java.util.concurrent.Executor;
+import java.util.concurrent.AbstractExecutorService;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
 
 public class ConcatProxyServletTest extends ServletTestFixture {
   private static final String REQUEST_DOMAIN = "example.org";
@@ -58,19 +61,8 @@ public class ConcatProxyServletTest exte
   private final ConcatProxyServlet servlet = new ConcatProxyServlet();
   private TestConcatUriManager uriManager;
   
-  private final Executor sequentialExecutor = new Executor() {
-    public void execute(Runnable r) {
-      // Sequential version of 'execute'.
-      r.run();
-    }
-  }; 
-
-  private final Executor threadedExecutor = new Executor() {
-    public void execute(Runnable r) {
-      // Threaded version of 'execute'.
-      new Thread(r).start();
-    }
-  }; 
+  private final ExecutorService sequentialExecutor = Executors.newSingleThreadExecutor();
+  private final ExecutorService threadedExecutor = Executors.newCachedThreadPool();
 
   @Before
   public void setUp() throws Exception {
@@ -126,7 +118,7 @@ public class ConcatProxyServletTest exte
    * @param uris - list of uris to concat
    * @throws Exception
    */
-  private void runConcat(Executor exec, String result, String tok, Uri... uris)
+  private void runConcat(ExecutorService exec, String result, String tok, Uri... uris)
       throws Exception {
     expectRequestWithUris(Lists.newArrayList(uris), tok);
     

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetHandlerServiceTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetHandlerServiceTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetHandlerServiceTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetHandlerServiceTest.java Tue Sep  7 08:02:11 2010
@@ -18,20 +18,258 @@
  */
 package org.apache.shindig.gadgets.servlet;
 
+import com.google.common.collect.ImmutableList;
+
+import org.apache.shindig.auth.SecurityToken;
+import org.apache.shindig.auth.SecurityTokenCodec;
+import org.apache.shindig.auth.SecurityTokenException;
 import org.apache.shindig.common.EasyMockTestCase;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.process.ProcessingException;
 import org.apache.shindig.protocol.conversion.BeanDelegator;
+import org.apache.shindig.protocol.conversion.BeanFilter;
+import org.easymock.EasyMock;
+import org.junit.Before;
 import org.junit.Test;
 
+import java.util.List;
+import java.util.Map;
+
 public class GadgetHandlerServiceTest extends EasyMockTestCase {
 
+  private static final String TOKEN = "<token data>";
+  private static final String OWNER = "<owner>";
+  private static final String VIEWER = "<viewer>";
+  private static final String CONTAINER = "container";
+
+  private final BeanDelegator delegator = new BeanDelegator(
+    GadgetsHandlerService.apiClasses, GadgetsHandlerService.enumConversionMap);
+
+  private final FakeProcessor processor = new FakeProcessor();
+  private final FakeIframeUriManager urlGenerator = new FakeIframeUriManager();
+
+  private FakeSecurityTokenCodec tokenCodec;
+  private GadgetsHandlerService gadgetHandler;
+
+  @Before
+  public void setUp() {
+    tokenCodec = new FakeSecurityTokenCodec();
+    gadgetHandler = new GadgetsHandlerService(processor, urlGenerator,
+        tokenCodec, new BeanFilter());
+  }
+
   // Next test verify that the API data classes are configured correctly.
   // The mapping is done using reflection in runtime, so this test verify mapping is complete
   // this test will prevent from not intended change to the API.
   // DO NOT REMOVE TEST
   @Test
   public void testHandlerDataDelegation() throws Exception {
-    BeanDelegator delegator = new BeanDelegator(
-        GadgetsHandlerService.apiClasses, GadgetsHandlerService.enumConversionMap);
     delegator.validate();
   }
+
+
+  @Test
+  public void testGetMetadata() throws Exception {
+    GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
+        FakeProcessor.SPEC_URL, CONTAINER, "view",
+        createTokenData(null, null), ImmutableList.of("*"));
+    replay();
+    GadgetsHandlerApi.MetadataResponse response = gadgetHandler.getMetadata(request);
+    assertEquals(FakeIframeUriManager.DEFAULT_IFRAME_URI.toString(), response.getIframeUrl());
+    assertEquals(1, response.getViews().size());
+    assertTrue(response.getViews().get("default").getContent().contains("Hello, world" ));
+    assertEquals(FakeProcessor.SPEC_TITLE, response.getModulePrefs().getTitle());
+    assertEquals(FakeProcessor.LINK_HREF,
+        response.getModulePrefs().getLinks().get(FakeProcessor.LINK_REL).getHref().toString());
+    assertEquals(FakeProcessor.LINK_REL,
+        response.getModulePrefs().getLinks().get(FakeProcessor.LINK_REL).getRel());
+    assertEquals(1, response.getUserPrefs().size());
+    assertEquals("up_one", response.getUserPrefs().get("up_one").getDisplayName());
+    assertEquals(4, response.getUserPrefs().get("up_one").getEnumValues().size());
+    verify();
+  }
+
+  @Test
+  public void testGetMetadataOnlyView() throws Exception {
+    GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
+        FakeProcessor.SPEC_URL, CONTAINER, null,
+        createTokenData(null, null), ImmutableList.of("views.*"));
+    replay();
+    GadgetsHandlerApi.MetadataResponse response = gadgetHandler.getMetadata(request);
+    assertNull(response.getIframeUrl());
+    assertNull(response.getUserPrefs());
+    assertNull(response.getModulePrefs());
+    assertEquals(FakeProcessor.SPEC_URL, response.getUrl());
+    assertEquals(1, response.getViews().size());
+    assertTrue(response.getViews().get("default").getContent().contains("Hello, world" ));
+    verify();
+  }
+
+
+  @Test(expected = ProcessingException.class)
+  public void testGetMetadataNoContainer() throws Exception {
+    GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
+        FakeProcessor.SPEC_URL, null, null,
+        createTokenData(null, null), ImmutableList.of("*"));
+    replay();
+    GadgetsHandlerApi.MetadataResponse response = gadgetHandler.getMetadata(request);
+  }
+
+
+  @Test(expected = ProcessingException.class)
+  public void testGetMetadataNoUrl() throws Exception {
+    GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
+        null, CONTAINER, null,
+        createTokenData(null, null), ImmutableList.of("*"));
+    replay();
+    GadgetsHandlerApi.MetadataResponse response = gadgetHandler.getMetadata(request);
+  }
+
+  @Test(expected = ProcessingException.class)
+  public void testGetMetadataNoFields() throws Exception {
+    GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
+        FakeProcessor.SPEC_URL, CONTAINER, null,
+        createTokenData(null, null), null);
+    replay();
+    GadgetsHandlerApi.MetadataResponse response = gadgetHandler.getMetadata(request);
+  }
+
+  @Test(expected = ProcessingException.class)
+  public void testGetMetadataBadGadget() throws Exception {
+    GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
+        Uri.parse("unknown"), CONTAINER, null,
+        createTokenData(null, null), null);
+    replay();
+    GadgetsHandlerApi.MetadataResponse response = gadgetHandler.getMetadata(request);
+  }
+
+  @Test
+  public void testGetMetadataNoToken() throws Exception {
+    GadgetsHandlerApi.MetadataRequest request = createMetadataRequest(
+        FakeProcessor.SPEC_URL, CONTAINER, "view", null, ImmutableList.of("*"));
+    replay();
+    GadgetsHandlerApi.MetadataResponse response = gadgetHandler.getMetadata(request);
+    assertEquals(FakeIframeUriManager.DEFAULT_IFRAME_URI.toString(), response.getIframeUrl());
+    verify();
+  }
+
+  @Test
+  public void testGetToken() throws Exception {
+    GadgetsHandlerApi.TokenRequest request = createTokenRequest(
+        FakeProcessor.SPEC_URL, CONTAINER,
+        createTokenData(OWNER, VIEWER), ImmutableList.of("*"));
+    replay();
+    tokenCodec.encodedToken = TOKEN;
+    GadgetsHandlerApi.TokenResponse response = gadgetHandler.getToken(request);
+    assertEquals(TOKEN, response.getToken());
+    assertEquals(OWNER, tokenCodec.tokenData.getOwnerId());
+    assertEquals(VIEWER, tokenCodec.tokenData.getViewerId());
+    assertEquals(CONTAINER, tokenCodec.tokenData.getContainer());
+    verify();
+  }
+
+  @Test(expected = ProcessingException.class)
+  public void testGetTokenNoContainer() throws Exception {
+    GadgetsHandlerApi.TokenRequest request = createTokenRequest(
+        FakeProcessor.SPEC_URL, null,
+        createTokenData(OWNER, VIEWER), ImmutableList.of("*"));
+    replay();
+    GadgetsHandlerApi.TokenResponse response = gadgetHandler.getToken(request);
+  }
+
+  @Test(expected = ProcessingException.class)
+  public void testGetTokenNoUrl() throws Exception {
+    GadgetsHandlerApi.TokenRequest request = createTokenRequest(
+        null, CONTAINER,
+        createTokenData(OWNER, VIEWER), ImmutableList.of("*"));
+    replay();
+    GadgetsHandlerApi.TokenResponse response = gadgetHandler.getToken(request);
+  }
+
+  @Test(expected = ProcessingException.class)
+  public void testGetTokenNoFields() throws Exception {
+    GadgetsHandlerApi.TokenRequest request = createTokenRequest(
+        FakeProcessor.SPEC_URL, CONTAINER,
+        createTokenData(OWNER, VIEWER), null);
+    replay();
+    GadgetsHandlerApi.TokenResponse response = gadgetHandler.getToken(request);
+  }
+
+  @Test(expected = SecurityTokenException.class)
+  public void testGetTokenException() throws Exception {
+    GadgetsHandlerApi.TokenRequest request = createTokenRequest(
+        FakeProcessor.SPEC_URL, CONTAINER,
+        createTokenData(OWNER, VIEWER), ImmutableList.of("*"));
+    replay();
+    tokenCodec.exc = new SecurityTokenException("bad data");
+    GadgetsHandlerApi.TokenResponse response = gadgetHandler.getToken(request);
+  }
+
+  @Test
+  public void testGetTokenNoToken() throws Exception {
+    GadgetsHandlerApi.TokenRequest request = createTokenRequest(
+        FakeProcessor.SPEC_URL, CONTAINER,
+        null, ImmutableList.of("*"));
+    replay();
+    tokenCodec.encodedToken = TOKEN;
+    GadgetsHandlerApi.TokenResponse response = gadgetHandler.getToken(request);
+    assertEquals(TOKEN, response.getToken());
+    assertNull(CONTAINER, tokenCodec.tokenData);
+    verify();
+  }
+
+  private GadgetsHandlerApi.TokenData createTokenData(String ownerId, String viewerId) {
+    GadgetsHandlerApi.TokenData token = mock(GadgetsHandlerApi.TokenData.class);
+    if (ownerId != null) {
+      EasyMock.expect(token.getOwnerId()).andReturn(ownerId).once();
+    }
+    if (viewerId != null) {
+      EasyMock.expect(token.getViewerId()).andReturn(viewerId).once();
+    }
+    return token;
+  }
+
+  private GadgetsHandlerApi.MetadataRequest createMetadataRequest(Uri url, String container,
+      String view, GadgetsHandlerApi.TokenData token, List<String> fields) {
+    GadgetsHandlerApi.MetadataRequest request = mock(GadgetsHandlerApi.MetadataRequest.class);
+    EasyMock.expect(request.getFields()).andReturn(fields).anyTimes();
+    EasyMock.expect(request.getView()).andReturn(view).once();
+    EasyMock.expect(request.getUrl()).andReturn(url).anyTimes();
+    EasyMock.expect(request.getContainer()).andReturn(container).anyTimes();
+    EasyMock.expect(request.getToken()).andReturn(token).once();
+    return request;
+  }
+
+  private GadgetsHandlerApi.TokenRequest createTokenRequest(Uri url, String container,
+      GadgetsHandlerApi.TokenData token, List<String> fields) {
+    GadgetsHandlerApi.TokenRequest request = mock(GadgetsHandlerApi.TokenRequest.class);
+    EasyMock.expect(request.getFields()).andReturn(fields).anyTimes();
+    EasyMock.expect(request.getUrl()).andReturn(url).anyTimes();
+    EasyMock.expect(request.getContainer()).andReturn(container).anyTimes();
+    EasyMock.expect(request.getToken()).andReturn(token).once();
+    return request;
+  }
+
+  private class FakeSecurityTokenCodec implements SecurityTokenCodec {
+    public SecurityTokenException exc = null;
+    public SecurityToken tokenData = null;
+    public String encodedToken = null;
+
+    public String encodeToken(SecurityToken token) throws SecurityTokenException {
+      tokenData = token;
+      if (exc != null) {
+        throw exc;
+      }
+      return encodedToken;
+    }
+
+    public SecurityToken createToken(Map<String, String> tokenParameters)
+        throws SecurityTokenException {
+      if (exc != null) {
+        throw exc;
+      }
+      return tokenData;
+    }
+  }
 }
+

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java Tue Sep  7 08:02:11 2010
@@ -282,8 +282,8 @@ public class PipelinedDataTest {
   @Test
   public void testBatching() throws Exception {
     String xml = "<Content xmlns=\"" + PipelinedData.OPENSOCIAL_NAMESPACE + "\">"
-    		+ "<PeopleRequest key=\"key\" userId=\"${userId}\"/>"
-            + "<HttpRequest key=\"key2\" href=\"${key}\"/>"
+        + "<PeopleRequest key=\"key\" userId=\"${userId}\"/>"
+        + "<HttpRequest key=\"key2\" href=\"${key}\"/>"
         + "</Content>";
 
     PipelinedData socialData = new PipelinedData(XmlUtil.parse(xml), GADGET_URI);

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java Tue Sep  7 08:02:11 2010
@@ -97,7 +97,7 @@ public class DefaultTemplateProcessorTes
     variables.put("toys", new JSONObject("{ list: [{name: 'Ball'}, {name: 'Car'}]}"));
     variables.put("countries", new JSONArray("['Ireland','France']"));
     variables.put("xss", new JSONObject("{ script: '<script>alert();</script>'," +
-    		"quote:'\"><script>alert();</script>'}"));
+        "quote:'\"><script>alert();</script>'}"));
   }
 
   @Test
@@ -210,7 +210,7 @@ public class DefaultTemplateProcessorTes
   @Test
   public void testBooleanAttributes() throws Exception {
     String output = executeTemplate("<input class=\"${1 == 2}\" readonly=\"${1 == 2}\"" +
-    		"disabled=\"${1 == 1}\">");
+        "disabled=\"${1 == 1}\">");
     assertEquals("<input class=\"false\" disabled=\"disabled\">", output);
   }
 

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java Tue Sep  7 08:02:11 2010
@@ -106,8 +106,8 @@ public class XmlTemplateLibraryTest {
     // with the first tag for the whole library
     handlerWithNoResources.process(result, tag, processor);
     assertEquals("<STYLE>libstyle\nlibstyle2</STYLE>" +
-    		"<JAVASCRIPT>libscript\nlibscript2</JAVASCRIPT>",
-    		serializeResources(context));
+                 "<JAVASCRIPT>libscript\nlibscript2</JAVASCRIPT>",
+                 serializeResources(context));
 
     // Now script and style elements for the tag should get registered
     handlerWithResources.process(result, tag, processor);

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultAccelUriManagerTest.java Tue Sep  7 08:02:11 2010
@@ -19,31 +19,40 @@
 package org.apache.shindig.gadgets.uri;
 
 import com.google.common.collect.ImmutableMap;
-
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.config.AbstractContainerConfig;
 import org.apache.shindig.config.ContainerConfig;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.apache.shindig.gadgets.http.HttpRequest;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.util.Map;
 
+import static org.junit.Assert.*;
+
 /**
  * Tests for DefaultAccelUriManager.
  */
 public class DefaultAccelUriManagerTest {
   private static class FakeContainerConfig extends AbstractContainerConfig {
-    protected final Map<String, Object> data = ImmutableMap.<String, Object>builder()
+    protected final Map<String, Object> defaultConfig = ImmutableMap.<String, Object>builder()
+        .put(AccelUriManager.PROXY_HOST_PARAM, "apache.org")
+        .put(AccelUriManager.PROXY_PATH_PARAM, "/gadgets/proxy")
+        .build();
+    protected final Map<String, Object> accelConfig = ImmutableMap.<String, Object>builder()
         .put(AccelUriManager.PROXY_HOST_PARAM, "apache.org")
         .put(AccelUriManager.PROXY_PATH_PARAM, "/gadgets/accel")
         .build();
 
+    protected final Map<String, Map<String, Object>> data =
+        ImmutableMap.<String, Map<String, Object>>builder()
+            .put("default", defaultConfig)
+            .put("accel", accelConfig)
+            .build();
+
     @Override
     public Object getProperty(String container, String name) {
-      return data.get(name);
+      return data.get(container) != null ? data.get(container).get(name) : null;
     }
   }
 
@@ -59,28 +68,39 @@ public class DefaultAccelUriManagerTest 
   @Test
   public void testParseAndNormalizeNonAccelUri() throws Exception {
     Uri uri = Uri.parse("http://www.example.org/index.html");
-    assertEquals(Uri.parse("//apache.org/gadgets/accel?container=default"
+    HttpRequest req = new HttpRequest(uri);
+    assertEquals(Uri.parse("//apache.org/gadgets/proxy?container=default"
+                 + "&gadget=http%3A%2F%2Fwww.example.org%2Findex.html"
+                 + "&debug=0&nocache=0&refresh=0"
+                 + "&url=http%3A%2F%2Fwww.example.org%2Findex.html"),
+                 uriManager.parseAndNormalize(req));
+
+    uri = Uri.parse("http://www.example.org/index.html");
+    req = new HttpRequest(uri);
+    req.setContainer("accel");
+    assertEquals(Uri.parse("//apache.org/gadgets/accel?container=accel"
                  + "&gadget=http%3A%2F%2Fwww.example.org%2Findex.html"
                  + "&debug=0&nocache=0&refresh=0"
                  + "&url=http%3A%2F%2Fwww.example.org%2Findex.html"),
-                 uriManager.parseAndNormalize(uri));
+                 uriManager.parseAndNormalize(req));
   }
 
   @Test
   public void testParseAndNormalizeAccelUri() throws Exception {
-    Uri uri = Uri.parse("http://apache.org/gadgets/accel?container=proxy"
+    Uri uri = Uri.parse("http://apache.org/gadgets/accel?container=accel"
                         + "&gadget=http%3A%2F%2Fwww.1.com%2Fa.html"
                         + "&url=http%3A%2F%2Fwww.example.org%2Findex.html");
-    assertEquals(Uri.parse("//apache.org/gadgets/accel?container=proxy"
+    HttpRequest req = new HttpRequest(uri);
+    assertEquals(Uri.parse("//apache.org/gadgets/accel?container=accel"
                  + "&gadget=http%3A%2F%2Fwww.1.com%2Fa.html"
                  + "&debug=0&nocache=0&refresh=0"
                  + "&url=http%3A%2F%2Fwww.example.org%2Findex.html"),
-                 uriManager.parseAndNormalize(uri));
+                 uriManager.parseAndNormalize(req));
   }
 
   @Test
   public void testLooksLikeAccelUri() throws Exception {
-    Uri uri = Uri.parse("http://apache.org/gadgets/accel?container=proxy"
+    Uri uri = Uri.parse("http://apache.org/gadgets/accel?container=accel"
                         + "&gadget=http%3A%2F%2Fwww.1.com%2Fa.html"
                         + "&url=http%3A%2F%2Fwww.example.org%2Findex.html");
     assertTrue(uriManager.looksLikeAccelUri(uri));

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultProxyUriManagerTest.java Tue Sep  7 08:02:11 2010
@@ -18,29 +18,24 @@
  */
 package org.apache.shindig.gadgets.uri;
 
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.uri.ProxyUriManager.ProxyUri;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
 import org.junit.Test;
 
 import java.util.List;
 
+import static org.easymock.EasyMock.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
 public class DefaultProxyUriManagerTest extends UriManagerTestBase {
   private static final Uri RESOURCE_1 = Uri.parse("http://example.com/one.dat?param=value");
   private static final Uri RESOURCE_2 = Uri.parse("http://gadgets.com/two.dat");
@@ -383,6 +378,27 @@ public class DefaultProxyUriManagerTest 
     manager.process(testUri);
   }
 
+  @Test
+  public void testHtmlTagContext() throws Exception {
+    String host = "host.com";
+    String path = "/proxy/path";
+    DefaultProxyUriManager manager = makeManager(host, path, null);
+    Uri testUri = new UriBuilder().setAuthority(host).setPath(path)
+        .addQueryParameter(Param.CONTAINER.getKey(), CONTAINER)
+        .addQueryParameter(Param.URL.getKey(), "http://www.example.org/")
+        .addQueryParameter(Param.HTML_TAG_CONTEXT.getKey(), "htmlTag")
+        .toUri();
+    ProxyUri proxyUri = manager.process(testUri);
+    assertEquals("htmlTag", proxyUri.getHtmlTagContext());
+
+    Uri targetUri = Uri.parse("http://www.example2.org/");
+    HttpRequest req = proxyUri.makeHttpRequest(targetUri);
+    assertEquals("htmlTag", req.getParam(Param.HTML_TAG_CONTEXT.getKey()));
+
+    UriBuilder builder = proxyUri.makeQueryParams(1, "2");
+    assertEquals("htmlTag", builder.getQueryParameter(Param.HTML_TAG_CONTEXT.getKey()));
+  }
+
   private List<Uri> makeAndGet(String host, String path, boolean debug, boolean noCache,
       List<Uri> resources, String... version) {
     return makeAndGetWithRefresh(host, path, debug, noCache, resources, 123, version);

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/PassthruManager.java Tue Sep  7 08:02:11 2010
@@ -63,8 +63,10 @@ public class PassthruManager implements 
 
   public ProxyUri process(Uri uri) throws GadgetException {
     String proxied = uri.getQueryParameter(Param.URL.getKey());
-    return new ProxyUri(expectStatus,
+    ProxyUri proxyUri = new ProxyUri(expectStatus,
         proxied != null ? Uri.parse(proxied) : null, uri);
+    proxyUri.setHtmlTagContext(uri.getQueryParameter(Param.HTML_TAG_CONTEXT.getKey()));
+    return proxyUri;
   }
   
   public void expectStatus(UriStatus status) {

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriUtilsTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriUtilsTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriUtilsTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriUtilsTest.java Tue Sep  7 08:02:11 2010
@@ -18,8 +18,6 @@
  */
 package org.apache.shindig.gadgets.uri;
 
-import static org.junit.Assert.assertEquals;
-
 import com.google.inject.internal.ImmutableList;
 import com.google.inject.internal.ImmutableMap;
 import org.apache.shindig.common.uri.Uri;
@@ -30,6 +28,8 @@ import org.junit.Test;
 
 import java.util.*;
 
+import static org.junit.Assert.assertEquals;
+
 /**
  * Tests for UriUtils.
  */
@@ -252,4 +252,20 @@ public class UriUtilsTest {
 
     assertEquals(data, req.getPostBodyAsString());
   }
+
+  @Test
+  public void testGetContentTypeWithoutCharset() {
+    assertEquals("text/html",
+                 UriUtils.getContentTypeWithoutCharset("text/html"));
+    assertEquals("text/html;",
+                 UriUtils.getContentTypeWithoutCharset("text/html;"));
+    assertEquals("text/html",
+                 UriUtils.getContentTypeWithoutCharset("text/html; charset=hello"));
+    assertEquals("text/html; hello=world",
+                 UriUtils.getContentTypeWithoutCharset("text/html; charset=hello; hello=world"));
+    assertEquals("text/html; pharset=hello; hello=world",
+                 UriUtils.getContentTypeWithoutCharset("text/html; pharset=hello; hello=world"));
+    assertEquals("text/html; charsett=utf; hello=world",
+                 UriUtils.getContentTypeWithoutCharset("text/html; charsett=utf; ; hello=world"));
+  }
 }

Modified: shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/variables/VariableSubstituterTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/variables/VariableSubstituterTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/variables/VariableSubstituterTest.java (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/java/org/apache/shindig/gadgets/variables/VariableSubstituterTest.java Tue Sep  7 08:02:11 2010
@@ -84,10 +84,10 @@ public class VariableSubstituterTest {
   @Test
   public void userPrefsSubstituted() throws Exception {
     String xml = "<Module>" +
-    		         "<ModulePrefs title='I heart __UP_foo__'/>" +
-    		         "<UserPref name='foo'/>" +
-    		         "<Content/>" +
-    		         "</Module>";
+                 "<ModulePrefs title='I heart __UP_foo__'/>" +
+                 "<UserPref name='foo'/>" +
+                 "<Content/>" +
+                 "</Module>";
     GadgetSpec spec = new GadgetSpec(Uri.parse("#"), xml);
     GadgetContext context = new GadgetContext() {
       @Override

Modified: shindig/branches/2.0.x/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css (original)
+++ shindig/branches/2.0.x/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css Tue Sep  7 08:02:11 2010
@@ -1,8 +1,8 @@
-@import url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.example.org%2Fother1.css');
-@import url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.example.org%2Fpath%2Frelative%2Fother2.css');
+@import url('//www.test.com/dir/proxy?container=default&gadget=http%3A%2F%2Fwww.example.org%2Fpath%2Frewritebasic.css&debug=0&nocache=0&url=http%3A%2F%2Fwww.example.org%2Fother1.css');
+@import url('//www.test.com/dir/proxy?container=default&gadget=http%3A%2F%2Fwww.example.org%2Fpath%2Frewritebasic.css&debug=0&nocache=0&url=http%3A%2F%2Fwww.example.org%2Fpath%2Frelative%2Fother2.css');
 @import url('http://www.example.org/hostrelative/excluded/other1.css');
 
 DiV {
   font: arial;
-  background-image : url('http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.some.site%2Fimage.gif');
+  background-image : url('//www.test.com/dir/proxy?container=default&gadget=http%3A%2F%2Fwww.example.org%2Fpath%2Frewritebasic.css&debug=0&nocache=0&url=http%3A%2F%2Fwww.some.site%2Fimage.gif');
 }

Modified: shindig/branches/2.0.x/java/samples/src/test/java/org/apache/shindig/social/opensocial/jpa/spi/integration/JpaRestfulJsonActivityTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/samples/src/test/java/org/apache/shindig/social/opensocial/jpa/spi/integration/JpaRestfulJsonActivityTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/samples/src/test/java/org/apache/shindig/social/opensocial/jpa/spi/integration/JpaRestfulJsonActivityTest.java (original)
+++ shindig/branches/2.0.x/java/samples/src/test/java/org/apache/shindig/social/opensocial/jpa/spi/integration/JpaRestfulJsonActivityTest.java Tue Sep  7 08:02:11 2010
@@ -41,19 +41,19 @@ public class JpaRestfulJsonActivityTest 
    * 
    * @throws Exception the exception
    */
-	@Before
-	public void setUp() throws Exception {
+  @Before
+  public void setUp() throws Exception {
 
-		// Init config
-		Injector injector = JpaRestfulTestConfigHelper.init();
-		this.setServlet(JpaRestfulTestConfigHelper.getDataServiceServlet(injector));
-		
-		// Bootstrap hibernate and associated test db, and setup db with test data
-		this.bootstrap = injector.getInstance(SpiDatabaseBootstrap.class);
+    // Init config
+    Injector injector = JpaRestfulTestConfigHelper.init();
+    this.setServlet(JpaRestfulTestConfigHelper.getDataServiceServlet(injector));
+    
+    // Bootstrap hibernate and associated test db, and setup db with test data
+    this.bootstrap = injector.getInstance(SpiDatabaseBootstrap.class);
     this.bootstrap.init();
-	}
-	
-	@After
+  }
+  
+  @After
   public void tearDown() throws Exception {
     this.bootstrap.tearDown();
   }

Modified: shindig/branches/2.0.x/java/samples/src/test/java/org/apache/shindig/social/opensocial/jpa/spi/integration/JpaRestfulJsonPeopleTest.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/samples/src/test/java/org/apache/shindig/social/opensocial/jpa/spi/integration/JpaRestfulJsonPeopleTest.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/samples/src/test/java/org/apache/shindig/social/opensocial/jpa/spi/integration/JpaRestfulJsonPeopleTest.java (original)
+++ shindig/branches/2.0.x/java/samples/src/test/java/org/apache/shindig/social/opensocial/jpa/spi/integration/JpaRestfulJsonPeopleTest.java Tue Sep  7 08:02:11 2010
@@ -55,6 +55,6 @@ public class JpaRestfulJsonPeopleTest ex
   @After
   public void tearDown() throws Exception {
     this.bootstrap.tearDown();
-  }	
+  }
   
 }

Modified: shindig/branches/2.0.x/java/server/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/server/src/main/webapp/WEB-INF/web.xml?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/server/src/main/webapp/WEB-INF/web.xml (original)
+++ shindig/branches/2.0.x/java/server/src/main/webapp/WEB-INF/web.xml Tue Sep  7 08:02:11 2010
@@ -43,6 +43,30 @@
     </param-value>
   </context-param>
 
+  <!-- 
+  Syntax: <key>=<value> separated by a newline
+  
+  system.properties specifies the environmental variables that will be set to the JVM System Properties at server startup time.
+  Alternatively, you may add these values in your app server (ex: Tomcat) as
+  VM arguments like this: -Dshindig.host="my.production.shindig.server.com".
+  
+  Here are a few properties that can be set for Shindig:
+  shindig.host: the server name that Shindig is deployed and running on
+  shindig.port: the port number of shindig.host server
+  
+  Make sure you escape all HTML values for the web.xml to be parsed correctly.
+  -->
+   <context-param>
+  	<param-name>system.properties</param-name>
+     <param-value>
+    	shindig.host=localhost
+    	
+    	aKey=/shindig/gadgets/proxy?container=default&amp;url=
+    	shindig.port=
+    	
+     </param-value>
+  </context-param>  
+
     <filter>
         <filter-name>ShiroFilter</filter-name>
         <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>
@@ -56,9 +80,7 @@
                 [main]
                 shindigSampleRealm = org.apache.shindig.sample.shiro.SampleShiroRealm
                 securityManager.realm = $shindigSampleRealm
-
-                [filters]
-                shiro.loginUrl = /login.jsp
+                authc.loginUrl = /login.jsp
 
                 [urls]
                 # The /login.jsp is not restricted to authenticated users (otherwise no one could log in!), but

Modified: shindig/branches/2.0.x/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java (original)
+++ shindig/branches/2.0.x/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java Tue Sep  7 08:02:11 2010
@@ -18,6 +18,9 @@
 
 package org.apache.shindig.social.core.config;
 
+import java.util.List;
+import java.util.Set;
+
 import org.apache.shindig.auth.AnonymousAuthenticationHandler;
 import org.apache.shindig.auth.AuthenticationHandler;
 import org.apache.shindig.common.servlet.ParameterFetcher;
@@ -30,13 +33,12 @@ import org.apache.shindig.social.core.oa
 import org.apache.shindig.social.core.util.BeanXStreamAtomConverter;
 import org.apache.shindig.social.core.util.xstream.XStream081Configuration;
 import org.apache.shindig.social.opensocial.service.ActivityHandler;
+import org.apache.shindig.social.opensocial.service.AlbumHandler;
 import org.apache.shindig.social.opensocial.service.AppDataHandler;
+import org.apache.shindig.social.opensocial.service.MediaItemHandler;
 import org.apache.shindig.social.opensocial.service.MessageHandler;
 import org.apache.shindig.social.opensocial.service.PersonHandler;
 
-import java.util.List;
-import java.util.Set;
-
 import com.google.common.collect.ImmutableSet;
 import com.google.inject.AbstractModule;
 import com.google.inject.TypeLiteral;
@@ -83,6 +85,6 @@ public class SocialApiGuiceModule extend
    */
   protected Set<Class<?>> getHandlers() {
     return ImmutableSet.<Class<?>>of(ActivityHandler.class, AppDataHandler.class,
-        PersonHandler.class, MessageHandler.class);
+        PersonHandler.class, MessageHandler.class, AlbumHandler.class, MediaItemHandler.class);
   }
 }

Modified: shindig/branches/2.0.x/java/social-api/src/main/java/org/apache/shindig/social/core/model/AccountImpl.java
URL: http://svn.apache.org/viewvc/shindig/branches/2.0.x/java/social-api/src/main/java/org/apache/shindig/social/core/model/AccountImpl.java?rev=993268&r1=993267&r2=993268&view=diff
==============================================================================
--- shindig/branches/2.0.x/java/social-api/src/main/java/org/apache/shindig/social/core/model/AccountImpl.java (original)
+++ shindig/branches/2.0.x/java/social-api/src/main/java/org/apache/shindig/social/core/model/AccountImpl.java Tue Sep  7 08:02:11 2010
@@ -19,6 +19,9 @@ package org.apache.shindig.social.core.m
 
 import org.apache.shindig.social.opensocial.model.Account;
 
+/**
+ * Default Implementation of an {@link org.apache.shindig.social.opensocial.model.Account}
+ */
 public class AccountImpl implements Account {
   private String domain;
   private String userId;
@@ -36,6 +39,7 @@ public class AccountImpl implements Acco
     return domain;
   }
 
+  /** {@inheritDoc} */
   public void setDomain(String domain) {
     this.domain = domain;
   }
@@ -44,6 +48,7 @@ public class AccountImpl implements Acco
     return userId;
   }
 
+  /** {@inheritDoc} */
   public void setUserId(String userId) {
     this.userId = userId;
   }
@@ -52,6 +57,7 @@ public class AccountImpl implements Acco
     return username;
   }
 
+  /** {@inheritDoc} */
   public void setUsername(String username) {
     this.username = username;
   }