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(