Author: lindner
Date: Tue Jun 23 19:59:30 2009
New Revision: 787808

URL: http://svn.apache.org/viewvc?rev=787808&view=rev
Log:
SHINDIG-1097 | Upgrade to Juel 2.1.2

Added:
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/cache/NullCache.java
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java
Modified:
    incubator/shindig/trunk/java/common/conf/shindig.properties
    incubator/shindig/trunk/java/common/pom.xml
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java
    
incubator/shindig/trunk/java/common/src/main/resources/org/apache/shindig/common/cache/ehcache/ehcacheConfig.xml
    
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java
    
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java
    
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java
    
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java
    incubator/shindig/trunk/java/gadgets/pom.xml
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetELResolverTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/MessageELResolverTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/RenderTagHandlerTest.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java
    incubator/shindig/trunk/java/server/pom.xml
    incubator/shindig/trunk/java/social-api/pom.xml
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java
    incubator/shindig/trunk/pom.xml

Modified: incubator/shindig/trunk/java/common/conf/shindig.properties
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/conf/shindig.properties?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/conf/shindig.properties (original)
+++ incubator/shindig/trunk/java/common/conf/shindig.properties Tue Jun 23 
19:59:30 2009
@@ -79,6 +79,7 @@
 # caches when using the LruCacheProvider.
 # It is highly recommended that the EhCache implementation be used instead of 
the LRU cache.
 shindig.cache.lru.default.capacity=1000
+shindig.cache.lru.expressions.capacity=1000
 shindig.cache.lru.gadgetSpecs.capacity=1000
 shindig.cache.lru.messageBundles.capacity=1000
 shindig.cache.lru.httpResponses.capacity=10000

Modified: incubator/shindig/trunk/java/common/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/pom.xml?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/pom.xml (original)
+++ incubator/shindig/trunk/java/common/pom.xml Tue Jun 23 19:59:30 2009
@@ -151,11 +151,11 @@
       <artifactId>ehcache</artifactId>
     </dependency>
     <dependency>
-      <groupId>juel</groupId>
+      <groupId>de.odysseus.juel</groupId>
       <artifactId>juel-impl</artifactId>
     </dependency>
     <dependency>
-      <groupId>juel</groupId>
+      <groupId>de.odysseus.juel</groupId>
       <artifactId>juel-api</artifactId>
       <scope>provided</scope>
     </dependency>

Added: 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/cache/NullCache.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/cache/NullCache.java?rev=787808&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/cache/NullCache.java
 (added)
+++ 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/cache/NullCache.java
 Tue Jun 23 19:59:30 2009
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.common.cache;
+
+/**
+ * Cache implementation that does nothing.
+ */
+public class NullCache<K, V> implements Cache<K, V>{
+
+  public void addElement(K key, V value) {
+  }
+
+  public long getCapacity() {
+    return 0;
+  }
+
+  public V getElement(K key) {
+    return null;
+  }
+
+  public long getSize() {
+    return 0;
+  }
+
+  public V removeElement(K key) {
+    return null;
+  }
+}

Modified: 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java
 Tue Jun 23 19:59:30 2009
@@ -18,22 +18,20 @@
  */
 package org.apache.shindig.expressions;
 
-import org.json.JSONArray;
+import org.apache.shindig.common.cache.Cache;
+import org.apache.shindig.common.cache.CacheProvider;
+import org.apache.shindig.common.cache.NullCache;
 
 import java.util.Map;
-import java.util.Properties;
-import java.util.StringTokenizer;
 
 import javax.el.ArrayELResolver;
 import javax.el.CompositeELResolver;
 import javax.el.ELContext;
-import javax.el.ELException;
 import javax.el.ELResolver;
 import javax.el.ExpressionFactory;
 import javax.el.FunctionMapper;
 import javax.el.ListELResolver;
 import javax.el.MapELResolver;
-import javax.el.PropertyNotWritableException;
 import javax.el.ValueExpression;
 import javax.el.VariableMapper;
 
@@ -42,28 +40,35 @@
 import com.google.inject.Singleton;
 
 import de.odysseus.el.ExpressionFactoryImpl;
+import de.odysseus.el.tree.Tree;
+import de.odysseus.el.tree.TreeCache;
+import de.odysseus.el.tree.TreeStore;
+import de.odysseus.el.tree.impl.Builder;
 
 /**
  * A facade to the expressions functionality.
  */
 @Singleton
 public class Expressions {
+  private static final String EXPRESSION_CACHE = "expressions";
+  
   private final ExpressionFactory factory;
   private final ELContext parseContext;
   private final ELResolver defaultELResolver;
   private final Functions functions;
 
-  /**
-   * Convenience constructor that doesn't require any Functions.
+  /** 
+   * Returns an instance of Expressions that doesn't require
+   * any functions or perform any caching.  Use only for testing.
    */
-  public Expressions() {
-    this(null);
+  public static Expressions forTesting() {
+    return new Expressions(null, null);
   }
   
   @Inject
-  public Expressions(Functions functions) {
+  public Expressions(Functions functions, CacheProvider cacheProvider) {
     this.functions = functions;
-    factory = newExpressionFactory();
+    factory = newExpressionFactory(cacheProvider);
     // Stub context with no FunctionMapper, used only to parse expressions
     parseContext = new Context(null);
     defaultELResolver = createDefaultELResolver();
@@ -91,11 +96,6 @@
    * @return a ValueExpression corresponding to the expression
    */
   public ValueExpression parse(String expression, Class<?> type) {
-    if (type == JSONArray.class) {
-      // TODO: the coming version of JUEL offers support for custom type 
converters.  Use it!
-      return new CustomCoerce(factory.createValueExpression(parseContext, 
expression, String.class),
-          type);
-    }
     return factory.createValueExpression(parseContext, expression, type);
   }
   
@@ -103,10 +103,33 @@
     return factory.createValueExpression(value, type);
   }
   
-  private ExpressionFactory newExpressionFactory() {
-    Properties properties = new Properties();
-    // TODO: configure cache size?
-    return new ExpressionFactoryImpl(properties);
+  /**
+   * Create a JUEL cache of expressions.
+   */
+  private TreeCache createTreeCache(CacheProvider cacheProvider) {
+    Cache<String, Tree> treeCache;
+    if (cacheProvider == null) {
+      treeCache = new NullCache<String, Tree>();
+    } else {
+      treeCache = cacheProvider.createCache(EXPRESSION_CACHE);
+    }
+
+    final Cache<String, Tree> resolvedTreeCache = treeCache;
+    return new TreeCache() {
+      public Tree get(String expression) {
+        return resolvedTreeCache.getElement(expression);
+      }
+
+      public void put(String expression, Tree tree) {
+        resolvedTreeCache.addElement(expression, tree);
+      }
+    };
+  }
+  
+  
+  private ExpressionFactory newExpressionFactory(CacheProvider cacheProvider) {
+    TreeStore store = new TreeStore(new Builder(), 
createTreeCache(cacheProvider));
+    return new ExpressionFactoryImpl(store, new ShindigTypeConverter());
   }
   
   /**
@@ -174,89 +197,4 @@
     }
     
   }
-  
-  /** 
-   * Class providing custom type coercion for getValue() where needed.
-   * This will be obsolete with JUEL 2.1.1.
-   */
-  static private class CustomCoerce extends ValueExpression {
-
-    private final ValueExpression base;
-    private final Class<?> type;
-
-    public CustomCoerce(ValueExpression base, Class<?> type) {
-      this.base = base;
-      this.type = type;
-    }
-
-    @Override
-    public Class<?> getExpectedType() {
-      return type;
-    }
-
-    @Override
-    public Class<?> getType(ELContext context) {
-      return type;
-    }
-
-    @Override
-    public Object getValue(ELContext context) {
-      Object value = base.getValue(context);
-      if (value == null) {
-        return null;
-      }
-      
-      if (type == JSONArray.class) {
-        JSONArray array = new JSONArray();
-        StringTokenizer tokenizer = new StringTokenizer(value.toString(), ",");
-        while (tokenizer.hasMoreTokens()) {
-          array.put(tokenizer.nextToken());
-        }
-
-        return array;
-      } else {
-        throw new ELException("Can't coerce to type " + type.getName());
-      }
-    }
-
-    @Override
-    public boolean isReadOnly(ELContext context) {
-      return true;
-    }
-
-    @Override
-    public void setValue(ELContext context, Object value) {
-      throw new PropertyNotWritableException();
-    }
-
-    @Override
-    public String getExpressionString() {
-      return base.getExpressionString();
-    }
-
-    @Override
-    public boolean isLiteralText() {
-      return base.isLiteralText();
-    }
-
-    @Override
-    public boolean equals(Object o) {
-      if (this == o) {
-        return true;
-      }
-      
-      if (!(o instanceof CustomCoerce)) {
-        return false;
-      }
-      
-      CustomCoerce that = (CustomCoerce) o;
-      return that.base.equals(this.base) && that.type.equals(this.type);
-    }
-
-    @Override
-    public int hashCode() {
-      return base.hashCode();
-    }
-    
-  }
 }

Added: 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java?rev=787808&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java
 (added)
+++ 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java
 Tue Jun 23 19:59:30 2009
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.expressions;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.StringTokenizer;
+
+import javax.el.ELException;
+
+import com.google.common.collect.ImmutableList;
+
+import de.odysseus.el.misc.TypeConverter;
+
+/**
+ * Custom type converter class that overrides the default EL coercion rules
+ * where necessary.  Specifically, Booleans are handled differently,
+ * and JSONArray is supported.
+ */
+class ShindigTypeConverter implements TypeConverter {
+
+  @SuppressWarnings("unchecked")
+  public <T> T convert(Object obj, Class<T> type) throws ELException {
+    // Handle boolean specially
+    if (type == Boolean.class || type == Boolean.TYPE) {
+      return (T) coerceToBoolean(obj);
+    }
+    
+    if (type == JSONArray.class) {
+      return (T) coerceToJsonArray(obj);
+    }
+    
+    if (type == Iterable.class) {
+      return (T) coerceToIterable(obj);
+    }
+    
+    // Otherwise, use the default
+    return TypeConverter.DEFAULT.convert(obj, type);
+  }
+
+  /**
+   * Coerce objects to iterables.  Iterables and JSONArrays have the obvious
+   * coercion.  JSONObjects are coerced to single-element lists, unless
+   * they have a "list" property that is in array, in which case that's used.
+   */
+  private Iterable<?> coerceToIterable(Object obj) {
+    if (obj == null) {
+      return ImmutableList.of();
+    }
+    
+    if (obj instanceof Iterable) {
+      return ((Iterable<?>) obj);
+    }
+    
+    if (obj instanceof JSONArray) {
+      final JSONArray array = (JSONArray) obj;
+      // TODO: Extract JSONArrayIterator class?
+      return new Iterable<Object>() {
+        public Iterator<Object> iterator() {
+          return new Iterator<Object>() {
+            private int i = 0;
+            
+            public boolean hasNext() {
+              return i < array.length();
+            }
+          
+            public Object next() {
+              if (i >= array.length()) {
+                throw new NoSuchElementException();
+              }
+              
+              try {
+                return array.get(i++);
+              } catch (Exception e) {
+                throw new ELException(e);
+              }
+            }
+          
+            public void remove() {
+              throw new UnsupportedOperationException();
+            }
+          };
+        }
+      };
+    }
+    
+    if (obj instanceof JSONObject) {
+      JSONObject json = (JSONObject) obj;
+      
+      // Does this object have a "list" property that is an array?
+      // TODO: add to specification
+      Object childList = json.opt("list");
+      if (childList != null && childList instanceof JSONArray) {
+        return coerceToIterable(childList);
+      }
+      
+      // A scalar JSON value is treated as a single element list.
+      return ImmutableList.of(json);
+    }
+    
+    return ImmutableList.of(obj);
+  }
+  
+  private JSONArray coerceToJsonArray(Object obj) {
+    if (obj == null) {
+      return null;
+    }
+    
+    if (obj instanceof JSONArray) {
+      return (JSONArray) obj;
+    }
+    
+    if (obj instanceof String) {
+      JSONArray array = new JSONArray();
+      StringTokenizer tokenizer = new StringTokenizer(obj.toString(), ",");
+      while (tokenizer.hasMoreTokens()) {
+        array.put(tokenizer.nextToken());
+      }
+
+      return array;
+    }
+    
+    throw new ELException("Could not coerce " + obj.getClass().getName() + " 
to JSONArray");
+  }
+
+  /**
+   * Coerce the following booleans:
+   * 
+   * null -> false
+   * empty string, and "false" -> false
+   * boolean false -> false
+   * number 0 -> false
+   * 
+   * All else is true.
+   */
+  private Boolean coerceToBoolean(Object obj) {
+    if (obj == null) {
+      return false;
+    }
+    
+    if (obj instanceof String) {
+      return !("".equals(obj) || "false".equals(obj));
+    }
+    
+    if (obj instanceof Boolean) {
+      return (Boolean) obj;
+    }
+    
+    if (obj instanceof Number) {
+      return 0 != ((Number) obj).intValue();
+    }
+    
+    return true;
+  }
+}

Modified: 
incubator/shindig/trunk/java/common/src/main/resources/org/apache/shindig/common/cache/ehcache/ehcacheConfig.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/resources/org/apache/shindig/common/cache/ehcache/ehcacheConfig.xml?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/resources/org/apache/shindig/common/cache/ehcache/ehcacheConfig.xml
 (original)
+++ 
incubator/shindig/trunk/java/common/src/main/resources/org/apache/shindig/common/cache/ehcache/ehcacheConfig.xml
 Tue Jun 23 19:59:30 2009
@@ -22,7 +22,7 @@
 
   <!--
     Mandatory Default Cache configuration. These settings will be applied to 
caches
-    created programmtically using CacheManager.add(String cacheName).
+    created programmatically using CacheManager.add(String cacheName).
     
     The defaultCache has an implicit name "default" which is a reserved cache 
name.
   -->
@@ -79,4 +79,12 @@
     overflowToDisk="false"
     diskPersistent="false"
     memoryStoreEvictionPolicy="LFU"/>
+
+  <!-- Used to cache parsed expressions based on their content -->
+  <cache name="expressions"
+    maxElementsInMemory="1000"
+    eternal="true"
+    overflowToDisk="false"
+    diskPersistent="false"
+    memoryStoreEvictionPolicy="LFU"/>
 </ehcache>

Modified: 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java
 Tue Jun 23 19:59:30 2009
@@ -83,7 +83,7 @@
   @Test
   public void parseBasicConfig() throws Exception {
     ContainerConfig config = new 
JsonContainerConfig(createDefaultContainer().getAbsolutePath(),
-        new Expressions());
+        Expressions.forTesting());
 
     assertEquals(1, config.getContainers().size());
     for (String container : config.getContainers()) {
@@ -108,7 +108,7 @@
     File childFile = createContainer(json);
 
     ContainerConfig config = new 
JsonContainerConfig(childFile.getAbsolutePath() +
-        JsonContainerConfig.FILE_SEPARATOR + parentFile.getAbsolutePath(), new 
Expressions());
+        JsonContainerConfig.FILE_SEPARATOR + parentFile.getAbsolutePath(), 
Expressions.forTesting());
 
     assertEquals(NESTED_VALUE, config.getString(CONTAINER_A, NESTED_KEY));
     assertEquals(NESTED_VALUE, config.getString(CONTAINER_B, NESTED_KEY));
@@ -130,7 +130,7 @@
     File childFile = createContainer(json);
     File parentFile = createDefaultContainer();
     ContainerConfig config = new 
JsonContainerConfig(childFile.getAbsolutePath() +
-        JsonContainerConfig.FILE_SEPARATOR + parentFile.getAbsolutePath(), new 
Expressions());
+        JsonContainerConfig.FILE_SEPARATOR + parentFile.getAbsolutePath(), 
Expressions.forTesting());
 
     String value = config.getString(CHILD_CONTAINER, TOP_LEVEL_NAME);
     assertEquals(TOP_LEVEL_VALUE, value);
@@ -157,7 +157,7 @@
   @Test
   public void invalidContainerReturnsNull() throws Exception {
     ContainerConfig config = new 
JsonContainerConfig(createDefaultContainer().getAbsolutePath(),
-        new Expressions());
+        Expressions.forTesting());
     assertNull("Did not return null for invalid container.", 
config.getString("fake", PARENT_KEY));
   }
 
@@ -168,12 +168,12 @@
     json.put(PARENT_KEY, "bad bad bad parent!");
     json.put(ARRAY_NAME, ARRAY_ALT_VALUE);
 
-    new JsonContainerConfig(createContainer(json).getAbsolutePath(), new 
Expressions());
+    new JsonContainerConfig(createContainer(json).getAbsolutePath(), 
Expressions.forTesting());
   }
 
   @Test
   public void pathQuery() throws Exception {
-    ContainerConfig config = new 
JsonContainerConfig(createDefaultContainer().getAbsolutePath(), new 
Expressions());
+    ContainerConfig config = new 
JsonContainerConfig(createDefaultContainer().getAbsolutePath(), 
Expressions.forTesting());
     String path = "${" + NESTED_KEY + "['" + NESTED_NAME + "']}";
     String data = config.getString(DEFAULT_CONTAINER, path);
     assertEquals(NESTED_VALUE, data);
@@ -187,7 +187,7 @@
     json.put("expression", "Hello, ${world}!");
     json.put("world", "Earth");
 
-    ContainerConfig config = new 
JsonContainerConfig(createContainer(json).getAbsolutePath(), new Expressions());
+    ContainerConfig config = new 
JsonContainerConfig(createContainer(json).getAbsolutePath(), 
Expressions.forTesting());
 
     assertEquals("Hello, Earth!", config.getString(DEFAULT_CONTAINER, 
"expression"));
   }
@@ -203,7 +203,7 @@
     File childFile = createContainer(json);
     File parentFile = createDefaultContainer();
     ContainerConfig config = new 
JsonContainerConfig(childFile.getAbsolutePath() +
-        JsonContainerConfig.FILE_SEPARATOR + parentFile.getAbsolutePath(), new 
Expressions());
+        JsonContainerConfig.FILE_SEPARATOR + parentFile.getAbsolutePath(), 
Expressions.forTesting());
 
     assertEquals(TOP_LEVEL_VALUE, config.getString(CHILD_CONTAINER, 
"parentExpression"));
   }

Modified: 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java
 Tue Jun 23 19:59:30 2009
@@ -19,7 +19,9 @@
 package org.apache.shindig.expressions;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import java.util.Map;
 
@@ -43,7 +45,7 @@
   
   @Before
   public void setUp() {
-    expressions = new Expressions();
+    expressions = Expressions.forTesting();
     variables = Maps.newHashMap();
     context = expressions.newELContext(new RootELResolver(variables));
   }
@@ -118,6 +120,105 @@
     assertNull(evaluate("${map.bar.baz}", Object.class));
   }
 
+  @Test
+  public void booleanCoercionOfBooleans() throws Exception{
+    addVariable("bool", false);
+    assertFalse(evaluate("${bool}", Boolean.class));
+    assertTrue(evaluate("${!bool}", Boolean.class));
+
+    addVariable("bool", true);
+    assertTrue(evaluate("${bool}", Boolean.class));
+    assertFalse(evaluate("${!bool}", Boolean.class));
+  }
+  
+  @Test
+  public void booleanCoercionOfNumbers() throws Exception{
+    addVariable("bool", 0);
+    assertFalse(evaluate("${bool}", Boolean.class));
+    assertTrue(evaluate("${!bool}", Boolean.class));
+
+    addVariable("bool", 1);
+    assertTrue(evaluate("${bool}", Boolean.class));
+    assertFalse(evaluate("${!bool}", Boolean.class));
+  }
+  
+  @Test
+  public void booleanCoercionOfNull() throws Exception{
+    addVariable("bool", null);
+    assertFalse(evaluate("${bool}", Boolean.class));
+    assertTrue(evaluate("${!bool}", Boolean.class));
+  }
+  
+  @Test
+  public void booleanCoercionOfStrings() throws Exception{
+    addVariable("bool", "");
+    assertFalse(evaluate("${bool}", Boolean.class));
+    assertTrue(evaluate("${!bool}", Boolean.class));
+
+    addVariable("bool", "false");
+    assertFalse(evaluate("${bool}", Boolean.class));
+    assertTrue(evaluate("${!bool}", Boolean.class));
+
+    // Case-sensitive coercion:  FALSE is true
+    addVariable("bool", "FALSE");
+    assertTrue(evaluate("${bool}", Boolean.class));
+    assertFalse(evaluate("${!bool}", Boolean.class));
+
+    addVariable("bool", "true");
+    assertTrue(evaluate("${bool}", Boolean.class));
+    assertFalse(evaluate("${!bool}", Boolean.class));
+    
+    addVariable("bool", "booga");
+    assertTrue(evaluate("${bool}", Boolean.class));
+    assertFalse(evaluate("${!bool}", Boolean.class));
+  }
+  
+  @Test
+  public void iterableCoercionOfScalar() throws Exception {
+    addVariable("iter", "foo");
+    assertEquals(ImmutableList.of("foo"),
+        evaluate("${iter}", Iterable.class));
+  }
+  
+  @Test
+  public void iterableCoercionOfNull() throws Exception {
+    addVariable("iter", null);
+    assertEquals(ImmutableList.of(),
+        evaluate("${iter}", Iterable.class));
+  }
+  
+  @Test
+  public void iterableCoercionOfCollection() throws Exception {
+    addVariable("iter", ImmutableList.of(1, 2, 3));
+    assertEquals(ImmutableList.of(1, 2, 3),
+        evaluate("${iter}", Iterable.class));
+  }
+  
+  @Test
+  @SuppressWarnings("unchecked")
+  public void iterableCoercionOfJSONArray() throws Exception {
+    addVariable("iter", new JSONArray("[1,2,3]"));
+    assertEquals(ImmutableList.of(1, 2, 3),
+        ImmutableList.copyOf(evaluate("${iter}", Iterable.class)));
+  }
+  
+  @Test
+  @SuppressWarnings("unchecked")
+  public void iterableCoercionOfJSONObjectWithListProperty() throws Exception {
+    addVariable("iter", new JSONObject("{list: [1,2,3]}"));
+    assertEquals(ImmutableList.of(1, 2, 3),
+        ImmutableList.copyOf(evaluate("${iter}", Iterable.class)));
+  }
+  
+  @Test
+  @SuppressWarnings("unchecked")
+  public void iterableCoercionOfJSONObjectWithoutListProperty() throws 
Exception {
+    JSONObject json = new JSONObject("{foo: [1,2,3]}");
+    addVariable("iter", json);
+    assertEquals(ImmutableList.of(json),
+        ImmutableList.copyOf(evaluate("${iter}", Iterable.class)));
+  }
+  
   private <T> T evaluate(String expression, Class<T> type) {
     ValueExpression expr = expressions.parse(expression, type);
     return type.cast(expr.getValue(context));

Modified: 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java
 Tue Jun 23 19:59:30 2009
@@ -64,7 +64,7 @@
   }
   
   public void testExpressionEvaluation() {
-    Expressions expressions = new Expressions(functions);
+    Expressions expressions = new Expressions(functions, null);
     ELContext context = expressions.newELContext();
     ValueExpression expression = expressions.parse("${other:bonjour()}", 
String.class);
     

Modified: 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java
 Tue Jun 23 19:59:30 2009
@@ -36,7 +36,7 @@
   @Override
   protected void setUp() {
     Functions functions = new Functions(OpensocialFunctions.class);
-    expressions = new Expressions(functions);
+    expressions = new Expressions(functions, null);
     context = expressions.newELContext(new RootELResolver(vars));
   }
   

Modified: incubator/shindig/trunk/java/gadgets/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/pom.xml?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/pom.xml (original)
+++ incubator/shindig/trunk/java/gadgets/pom.xml Tue Jun 23 19:59:30 2009
@@ -200,11 +200,11 @@
       <artifactId>xml-apis</artifactId>
     </dependency>
     <dependency>
-      <groupId>juel</groupId>
+      <groupId>de.odysseus.juel</groupId>
       <artifactId>juel-impl</artifactId>
     </dependency>
     <dependency>
-      <groupId>juel</groupId>
+      <groupId>de.odysseus.juel</groupId>
       <artifactId>juel-api</artifactId>
       <scope>provided</scope>
     </dependency>

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
 Tue Jun 23 19:59:30 2009
@@ -21,12 +21,17 @@
 import org.apache.shindig.expressions.Expressions;
 import org.apache.shindig.gadgets.GadgetELResolver;
 import org.apache.shindig.gadgets.parse.HtmlSerialization;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 import java.io.IOException;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.NoSuchElementException;
 import java.util.Set;
 import java.util.logging.Logger;
 
@@ -35,17 +40,6 @@
 import javax.el.ELResolver;
 import javax.el.ValueExpression;
 
-import org.json.JSONArray;
-import org.json.JSONObject;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
@@ -481,17 +475,8 @@
    */
   public <T> T evaluate(String expression, Class<T> type, T defaultValue) {
     try {
-      Object result;
-      // Coerce iterables specially
-      if (type == Iterable.class) {
-        ValueExpression expr = expressions.parse(expression, Object.class);
-        Object value = expr.getValue(elContext);
-        result = coerceToIterable(value);
-      } else {
-        ValueExpression expr = expressions.parse(expression, type);
-        result = expr.getValue(elContext);
-      }
-      
+      ValueExpression expr = expressions.parse(expression, type);
+      Object result = expr.getValue(elContext);
       return type.cast(result);
     } catch (ELException e) {
       logger.warning(e.getMessage());
@@ -499,69 +484,6 @@
     }
   }
 
-  /**
-   * Coerce objects to iterables.  Iterables and JSONArrays have the obvious
-   * coercion.  JSONObjects are coerced to single-element lists, unless
-   * they have a "list" property that is in array, in which case that's used.
-   */
-  private Iterable<?> coerceToIterable(Object value) {
-    if (value == null) {
-      return ImmutableList.of();
-    }
-    
-    if (value instanceof Iterable) {
-      return ((Iterable<?>) value);
-    }
-    
-    if (value instanceof JSONArray) {
-      final JSONArray array = (JSONArray) value;
-      // TODO: Extract JSONArrayIterator class?
-      return new Iterable<Object>() {
-        public Iterator<Object> iterator() {
-          return new Iterator<Object>() {
-            private int i = 0;
-            
-            public boolean hasNext() {
-              return i < array.length();
-            }
-          
-            public Object next() {
-              if (i >= array.length()) {
-                throw new NoSuchElementException();
-              }
-              
-              try {
-                return array.get(i++);
-              } catch (Exception e) {
-                throw new ELException(e);
-              }
-            }
-          
-            public void remove() {
-              throw new UnsupportedOperationException();
-            }
-          };
-        }
-      };
-    }
-    
-    if (value instanceof JSONObject) {
-      JSONObject json = (JSONObject) value;
-      
-      // Does this object have a "list" property that is an array?
-      // TODO: add to specification
-      Object childList = json.opt("list");
-      if (childList != null && childList instanceof JSONArray) {
-        return coerceToIterable(childList);
-      }
-      
-      // A scalar JSON value is treated as a single element list.
-      return ImmutableList.of(json);
-    }
-    
-    return ImmutableList.of(value);
-  }
-  
   private String getUniqueId() {
     return "ostid" + (uniqueIdCounter++);
   }

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetELResolverTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetELResolverTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetELResolverTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetELResolverTest.java
 Tue Jun 23 19:59:30 2009
@@ -58,7 +58,7 @@
     };
     
     resolver = new GadgetELResolver(gadgetContext);
-    expressions = new Expressions();
+    expressions = Expressions.forTesting();
     
     context = expressions.newELContext(resolver);
   }

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelineExecutorTest.java
 Tue Jun 23 19:59:30 2009
@@ -88,7 +88,7 @@
     control = EasyMock.createStrictControl();
     preloader = control.createMock(PipelinedDataPreloader.class);
     preloaderService = new 
ConcurrentPreloaderService(Executors.newSingleThreadExecutor(), null);
-    executor = new PipelineExecutor(preloader, preloaderService, new 
Expressions());
+    executor = new PipelineExecutor(preloader, preloaderService, 
Expressions.forTesting());
     
     context = new GadgetContext(){};
   }

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloaderTest.java
 Tue Jun 23 19:59:30 2009
@@ -55,7 +55,7 @@
  */
 public class PipelinedDataPreloaderTest extends PreloaderTestFixture {
   private ContainerConfig containerConfig;
-  private final Expressions expressions = new Expressions();
+  private final Expressions expressions = Expressions.forTesting();
 
   private static final String XML = "<Module xmlns:os=\"" + 
PipelinedData.OPENSOCIAL_NAMESPACE
       + "\">" + "<ModulePrefs title=\"Title\"/>"

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/process/ProcessorTest.java
 Tue Jun 23 19:59:30 2009
@@ -63,7 +63,7 @@
            "{aliased: {aliases: ['some-alias', 'alias']}}" +
          "}}}");
 
-    containerConfig = new JsonContainerConfig(config, new Expressions());
+    containerConfig = new JsonContainerConfig(config, 
Expressions.forTesting());
     processor = new Processor(gadgetSpecFactory, substituter, containerConfig, 
blacklist, null);
   }
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java
 Tue Jun 23 19:59:30 2009
@@ -51,7 +51,7 @@
     JSONObject config = createConfig();
 
     JsonContainerConfig containerConfig =
-        new JsonContainerConfig(config, new Expressions(new Functions()));
+        new JsonContainerConfig(config, new Expressions(new Functions(), 
null));
     mockFetcher = mock(HttpFetcher.class);
     fetcher = new DefaultServiceFetcher(containerConfig, mockFetcher);
   }
@@ -88,7 +88,7 @@
         getJSONObject(DefaultServiceFetcher.GADGETS_FEATURES_CONFIG)
         .remove(DefaultServiceFetcher.OSAPI_FEATURE_CONFIG);
     JsonContainerConfig containerConfig =
-        new JsonContainerConfig(config, new Expressions(new Functions()));
+        new JsonContainerConfig(config, new Expressions(new Functions(), 
null));
     fetcher = new DefaultServiceFetcher(containerConfig, mockFetcher);
 
     
EasyMock.expect(mockFetcher.fetch(EasyMock.isA(HttpRequest.class))).andReturn(

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/PipelineDataGadgetRewriterTest.java
 Tue Jun 23 19:59:30 2009
@@ -99,7 +99,7 @@
     preloader = control.createMock(PipelinedDataPreloader.class);
     preloaderService = new 
ConcurrentPreloaderService(Executors.newSingleThreadExecutor(), null);
     rewriter = new PipelineDataGadgetRewriter(new PipelineExecutor(preloader, 
preloaderService,
-        new Expressions()));
+        Expressions.forTesting()));
   }
 
   private void setupGadget(String gadgetXml) throws SpecParserException {
@@ -239,7 +239,7 @@
         rewriter.parsePipelinedData(gadget, content.getDocument());
     assertEquals(1, pipelines.size());
     PipelinedData pipeline = pipelines.keySet().iterator().next();
-    PipelinedData.Batch batch = pipeline.getBatch(new Expressions(), new 
RootELResolver());
+    PipelinedData.Batch batch = pipeline.getBatch(Expressions.forTesting(), 
new RootELResolver());
     Map<String, Object> preloads = batch.getSocialPreloads();
     
     JsonAssert.assertObjectEquals(

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/TemplateRewriterTest.java
 Tue Jun 23 19:59:30 2009
@@ -114,11 +114,11 @@
     rewriter = new TemplateRewriter(
         new Provider<TemplateProcessor>() {
           public TemplateProcessor get() {
-            return new DefaultTemplateProcessor(new Expressions());
+            return new DefaultTemplateProcessor(Expressions.forTesting());
           }
         },
         new FakeMessageBundleFactory(),
-        new Expressions(),
+        Expressions.forTesting(),
         new DefaultTagRegistry(handlers), 
         new FakeTemplateLibraryFactory(),
         new FakeContainerConfig());

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java
 Tue Jun 23 19:59:30 2009
@@ -54,7 +54,7 @@
   public void setUp() {
     elValues = Maps.newHashMap();
     elResolver = new RootELResolver(elValues);
-    expressions = new Expressions();
+    expressions = Expressions.forTesting();
   }
   
   @Test

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java
 Tue Jun 23 19:59:30 2009
@@ -224,7 +224,7 @@
         + "/></Content>";
     View view = new View("test", Arrays.asList(XmlUtil.parse(xml)), SPEC_URL);
     PipelinedData.Batch batch = view.getPipelinedData().getBatch(
-        new Expressions(), new RootELResolver());
+        Expressions.forTesting(), new RootELResolver());
     
     assertEquals(1, batch.getSocialPreloads().size());
     assertTrue(batch.getSocialPreloads().containsKey("key"));

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessorTest.java
 Tue Jun 23 19:59:30 2009
@@ -75,7 +75,7 @@
 
   @Before
   public void setUp() throws Exception {
-    expressions = new Expressions();
+    expressions = Expressions.forTesting();
     variables = Maps.newHashMap();
     singletonElementHandler = new SingletonElementHandler();
     Set<TagHandler> handlers = ImmutableSet.<TagHandler>of(

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/MessageELResolverTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/MessageELResolverTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/MessageELResolverTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/MessageELResolverTest.java
 Tue Jun 23 19:59:30 2009
@@ -50,7 +50,7 @@
   @Before
   public void setUp() throws Exception {
     messageBundle = new MessageBundle(XmlUtil.parse(MESSAGE_BUNDLE));
-    expressions = new Expressions();
+    expressions = Expressions.forTesting();
     context = expressions.newELContext(new MessageELResolver(expressions, 
messageBundle));
   }
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/RenderTagHandlerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/RenderTagHandlerTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/RenderTagHandlerTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/RenderTagHandlerTest.java
 Tue Jun 23 19:59:30 2009
@@ -63,7 +63,7 @@
   
   @Before
   public void setUp() throws Exception {
-    expressions = new Expressions();
+    expressions = Expressions.forTesting();
     variables = Maps.newHashMap();
     Set<TagHandler> handlers = ImmutableSet.of((TagHandler) new 
RenderTagHandler());
     registry = new DefaultTagRegistry(handlers);

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/XmlTemplateLibraryTest.java
 Tue Jun 23 19:59:30 2009
@@ -86,7 +86,7 @@
   @Test
   public void testAddedResources() {
     final TemplateContext context = new TemplateContext(null, 
ImmutableMap.<String, Object>of());
-    TemplateProcessor processor = new DefaultTemplateProcessor(new 
Expressions()) {
+    TemplateProcessor processor = new 
DefaultTemplateProcessor(Expressions.forTesting()) {
       @Override
       public TemplateContext getTemplateContext() {
         return context;

Modified: incubator/shindig/trunk/java/server/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/pom.xml?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- incubator/shindig/trunk/java/server/pom.xml (original)
+++ incubator/shindig/trunk/java/server/pom.xml Tue Jun 23 19:59:30 2009
@@ -183,7 +183,7 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>juel</groupId>
+      <groupId>de.odysseus.juel</groupId>
       <artifactId>juel-api</artifactId>
       <scope>test</scope>
     </dependency>

Modified: incubator/shindig/trunk/java/social-api/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/pom.xml?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/pom.xml (original)
+++ incubator/shindig/trunk/java/social-api/pom.xml Tue Jun 23 19:59:30 2009
@@ -176,7 +176,7 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>juel</groupId>
+      <groupId>de.odysseus.juel</groupId>
       <artifactId>juel-api</artifactId>
       <scope>test</scope>
     </dependency>

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
 Tue Jun 23 19:59:30 2009
@@ -75,5 +75,9 @@
         Names.named("shindig.containers.default"))
         .toInstance("res://containers/default/container.js");
     bind(ContainerConfig.class).to(JsonContainerConfig.class);
+    
+    bind(Integer.class).annotatedWith(
+        Names.named("shindig.cache.lru.default.capacity"))
+        .toInstance(10);
   }
 }

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java
 Tue Jun 23 19:59:30 2009
@@ -80,7 +80,7 @@
                "{supportedFields: {activity: ['id', 'title']}}" +
              "}}}");
 
-    containerConfig = new JsonContainerConfig(config, new Expressions());
+    containerConfig = new JsonContainerConfig(config, 
Expressions.forTesting());
     handler = new ActivityHandler(activityService, containerConfig);
     registry = new DefaultHandlerRegistry(null, converter,
         new HandlerExecutionListener.NoOpHandler());

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java
 Tue Jun 23 19:59:30 2009
@@ -89,7 +89,7 @@
                "{supportedFields: {person: ['id', {name: 'familyName'}]}}" +
              "}}}");
 
-    containerConfig = new JsonContainerConfig(config, new Expressions());
+    containerConfig = new JsonContainerConfig(config, 
Expressions.forTesting());
     handler = new PersonHandler(personService, containerConfig);
     registry = new DefaultHandlerRegistry(null, converter,
         new HandlerExecutionListener.NoOpHandler());

Modified: incubator/shindig/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/pom.xml?rev=787808&r1=787807&r2=787808&view=diff
==============================================================================
--- incubator/shindig/trunk/pom.xml (original)
+++ incubator/shindig/trunk/pom.xml Tue Jun 23 19:59:30 2009
@@ -1203,6 +1203,16 @@
       <id>jboss</id>
       <url>http://repository.jboss.com/maven2</url>
     </repository>
+    <repository>
+      <id>sakai repo temp for Juel</id>
+      <url>http://source.sakaiproject.org/maven2</url>
+      <releases>
+        <enabled>true</enabled>
+      </releases>
+      <snapshots>
+        <enabled>false</enabled>
+      </snapshots>
+    </repository>
   </repositories>
 
   <!-- ====================================================================== 
-->
@@ -1440,20 +1450,15 @@
         <artifactId>sanselan</artifactId>
         <version>0.97-incubator</version>
       </dependency>
-      <!--
-          Intentionally not using the juel-impl RC build because we care about
-          stability of that code.  juel-api only has an RC build available,
-          but is also simple enough I'm not too concerned about bugs.
-      -->
       <dependency>
-        <groupId>juel</groupId>
+        <groupId>de.odysseus.juel</groupId>
         <artifactId>juel-api</artifactId>
-        <version>2.1.1.RC2</version>
+        <version>2.1.2</version>
       </dependency>
       <dependency>
-        <groupId>juel</groupId>
+        <groupId>de.odysseus.juel</groupId>
         <artifactId>juel-impl</artifactId>
-        <version>2.1.0</version>
+        <version>2.1.2</version>
       </dependency>
       <dependency>
         <groupId>net.sf.ezmorph</groupId>


Reply via email to