Author: awiner
Date: Fri Jun 26 19:29:58 2009
New Revision: 788826

URL: http://svn.apache.org/viewvc?rev=788826&view=rev
Log:
Inject ShindigTypeConverter into Expressions instead of manually creating.
No use cases at hand at the moment, but this lets containers provide customized 
coercion rules if needed, and is just the right thing to do in general.

Modified:
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.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/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java

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=788826&r1=788825&r2=788826&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
 Fri Jun 26 19:29:58 2009
@@ -40,6 +40,7 @@
 import com.google.inject.Singleton;
 
 import de.odysseus.el.ExpressionFactoryImpl;
+import de.odysseus.el.misc.TypeConverter;
 import de.odysseus.el.tree.Tree;
 import de.odysseus.el.tree.TreeCache;
 import de.odysseus.el.tree.TreeStore;
@@ -56,18 +57,21 @@
   private final ELContext parseContext;
   private final ELResolver defaultELResolver;
   private final Functions functions;
+  private final TypeConverter typeConverter;
 
   /** 
    * Returns an instance of Expressions that doesn't require
    * any functions or perform any caching.  Use only for testing.
    */
   public static Expressions forTesting() {
-    return new Expressions(null, null);
+    return new Expressions(null, null, new ShindigTypeConverter());
   }
   
   @Inject
-  public Expressions(Functions functions, CacheProvider cacheProvider) {
+  public Expressions(Functions functions, CacheProvider cacheProvider,
+      ShindigTypeConverter typeConverter) {
     this.functions = functions;
+    this.typeConverter = typeConverter;
     factory = newExpressionFactory(cacheProvider);
     // Stub context with no FunctionMapper, used only to parse expressions
     parseContext = new Context(null);
@@ -129,7 +133,7 @@
   
   private ExpressionFactory newExpressionFactory(CacheProvider cacheProvider) {
     TreeStore store = new TreeStore(new Builder(), 
createTreeCache(cacheProvider));
-    return new ExpressionFactoryImpl(store, new ShindigTypeConverter());
+    return new ExpressionFactoryImpl(store, typeConverter);
   }
   
   /**
@@ -151,9 +155,8 @@
   }
 
   /**
-   * ELContext implementation.  SimpleContext from JUEL would be
-   * sufficient if not for:
-   * 
https://sourceforge.net/tracker2/?func=detail&aid=2590830&group_id=165179&atid=834616
+   * ELContext implementation, like SimpleContext but using an injected
+   * FunctionMapper.
    */
   private class Context extends ELContext {
     private final ELResolver resolver;

Modified: 
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=788826&r1=788825&r2=788826&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java
 Fri Jun 26 19:29:58 2009
@@ -28,6 +28,7 @@
 import javax.el.ELException;
 
 import com.google.common.collect.ImmutableList;
+import com.google.inject.Inject;
 
 import de.odysseus.el.misc.TypeConverter;
 
@@ -36,8 +37,12 @@
  * where necessary.  Specifically, Booleans are handled differently,
  * and JSONArray is supported.
  */
-class ShindigTypeConverter implements TypeConverter {
+public class ShindigTypeConverter implements TypeConverter {
 
+  @Inject
+  public ShindigTypeConverter() {  
+  }
+  
   @SuppressWarnings("unchecked")
   public <T> T convert(Object obj, Class<T> type) throws ELException {
     // Handle boolean specially

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=788826&r1=788825&r2=788826&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
 Fri Jun 26 19:29:58 2009
@@ -64,7 +64,7 @@
   }
   
   public void testExpressionEvaluation() {
-    Expressions expressions = new Expressions(functions, null);
+    Expressions expressions = new Expressions(functions, null, new 
ShindigTypeConverter());
     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=788826&r1=788825&r2=788826&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
 Fri Jun 26 19:29:58 2009
@@ -36,7 +36,7 @@
   @Override
   protected void setUp() {
     Functions functions = new Functions(OpensocialFunctions.class);
-    expressions = new Expressions(functions, null);
+    expressions = new Expressions(functions, null, new ShindigTypeConverter());
     context = expressions.newELContext(new RootELResolver(vars));
   }
   

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=788826&r1=788825&r2=788826&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
 Fri Jun 26 19:29:58 2009
@@ -22,6 +22,7 @@
 import org.apache.shindig.config.JsonContainerConfig;
 import org.apache.shindig.expressions.Expressions;
 import org.apache.shindig.expressions.Functions;
+import org.apache.shindig.expressions.ShindigTypeConverter;
 import org.apache.shindig.gadgets.http.HttpFetcher;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
@@ -51,7 +52,7 @@
     JSONObject config = createConfig();
 
     JsonContainerConfig containerConfig =
-        new JsonContainerConfig(config, new Expressions(new Functions(), 
null));
+        new JsonContainerConfig(config, new Expressions(new Functions(), null, 
new ShindigTypeConverter()));
     mockFetcher = mock(HttpFetcher.class);
     fetcher = new DefaultServiceFetcher(containerConfig, mockFetcher);
   }
@@ -88,7 +89,8 @@
         getJSONObject(DefaultServiceFetcher.GADGETS_FEATURES_CONFIG)
         .remove(DefaultServiceFetcher.OSAPI_FEATURE_CONFIG);
     JsonContainerConfig containerConfig =
-        new JsonContainerConfig(config, new Expressions(new Functions(), 
null));
+        new JsonContainerConfig(config,
+            new Expressions(new Functions(), null, new 
ShindigTypeConverter()));
     fetcher = new DefaultServiceFetcher(containerConfig, mockFetcher);
 
     
EasyMock.expect(mockFetcher.fetch(EasyMock.isA(HttpRequest.class))).andReturn(


Reply via email to