Author: hlship
Date: Wed May 26 00:40:39 2010
New Revision: 948276
URL: http://svn.apache.org/viewvc?rev=948276&view=rev
Log:
Change F to use the new Mapper interface instead of Coercion (to make it easier
to combine mappers together).
Added:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractMapper.java
(with props)
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Mapper.java
(with props)
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ObjectComponentEventResultProcessor.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/DateFieldStack.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/JavascriptStackPathConstructorImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MultiZoneUpdateInsideForm.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/F.java
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java?rev=948276&r1=948275&r2=948276&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/TapestryInternalUtils.java
Wed May 26 00:40:39 2010
@@ -34,8 +34,9 @@ import org.apache.tapestry5.ioc.Resource
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.Defense;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.ioc.services.Coercion;
+import org.apache.tapestry5.ioc.util.func.AbstractMapper;
import org.apache.tapestry5.ioc.util.func.F;
+import org.apache.tapestry5.ioc.util.func.Mapper;
import org.apache.tapestry5.services.javascript.StylesheetLink;
/**
@@ -561,13 +562,13 @@ public class TapestryInternalUtils
}
/**
- * Common coercion, used primarily with {...@link F#map(Coercion,
java.util.Collection)}
+ * Common mapper, used primarily with {...@link F#map(Mapper,
java.util.Collection)}
*
* @since 5.2.0
*/
- public static Coercion<Asset, StylesheetLink> assetToStylesheetLink = new
Coercion<Asset, StylesheetLink>()
+ public static Mapper<Asset, StylesheetLink> assetToStylesheetLink = new
AbstractMapper<Asset, StylesheetLink>()
{
- public StylesheetLink coerce(Asset input)
+ public StylesheetLink map(Asset input)
{
return new StylesheetLink(input);
};
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ObjectComponentEventResultProcessor.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ObjectComponentEventResultProcessor.java?rev=948276&r1=948275&r2=948276&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ObjectComponentEventResultProcessor.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ObjectComponentEventResultProcessor.java
Wed May 26 00:40:39 2010
@@ -19,9 +19,9 @@ import java.util.Collection;
import java.util.List;
import org.apache.tapestry5.ioc.services.ClassFabUtils;
-import org.apache.tapestry5.ioc.services.Coercion;
import org.apache.tapestry5.ioc.util.AvailableValues;
import org.apache.tapestry5.ioc.util.UnknownValueException;
+import org.apache.tapestry5.ioc.util.func.AbstractMapper;
import org.apache.tapestry5.ioc.util.func.F;
import org.apache.tapestry5.services.ComponentEventResultProcessor;
@@ -40,9 +40,9 @@ public class ObjectComponentEventResultP
public void processResultValue(Object value) throws IOException
{
- List<String> names = F.map(new Coercion<Class, String>()
+ List<String> names = F.map(new AbstractMapper<Class, String>()
{
- public String coerce(Class input)
+ public String map(Class input)
{
return ClassFabUtils.toJavaClassName(input);
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/DateFieldStack.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/DateFieldStack.java?rev=948276&r1=948275&r2=948276&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/DateFieldStack.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/DateFieldStack.java
Wed May 26 00:40:39 2010
@@ -23,9 +23,10 @@ import org.apache.tapestry5.Asset;
import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.internal.TapestryInternalUtils;
import org.apache.tapestry5.ioc.annotations.Symbol;
-import org.apache.tapestry5.ioc.services.Coercion;
import org.apache.tapestry5.ioc.services.ThreadLocale;
+import org.apache.tapestry5.ioc.util.func.AbstractMapper;
import org.apache.tapestry5.ioc.util.func.F;
+import org.apache.tapestry5.ioc.util.func.Mapper;
import org.apache.tapestry5.json.JSONArray;
import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.services.AssetSource;
@@ -48,16 +49,16 @@ public class DateFieldStack implements J
this.threadLocale = threadLocale;
this.compactJSON = compactJSON;
- Coercion<String, Asset> pathToAsset = new Coercion<String, Asset>()
+ Mapper<String, Asset> pathToAsset = new AbstractMapper<String, Asset>()
{
- public Asset coerce(String path)
+ public Asset map(String path)
{
return assetSource.getExpandedAsset(path);
}
};
- Coercion<String, StylesheetLink> pathToStylesheetLink =
F.combine(pathToAsset,
- TapestryInternalUtils.assetToStylesheetLink);
+ Mapper<String, StylesheetLink> pathToStylesheetLink = pathToAsset
+ .combine(TapestryInternalUtils.assetToStylesheetLink);
javascriptStack = F.map(pathToAsset,
"${tapestry.datepicker}/js/datepicker.js",
"org/apache/tapestry5/corelib/components/datefield.js");
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/JavascriptStackPathConstructorImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/JavascriptStackPathConstructorImpl.java?rev=948276&r1=948275&r2=948276&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/JavascriptStackPathConstructorImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/JavascriptStackPathConstructorImpl.java
Wed May 26 00:40:39 2010
@@ -21,9 +21,10 @@ import org.apache.tapestry5.SymbolConsta
import org.apache.tapestry5.internal.services.RequestConstants;
import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.services.Coercion;
import org.apache.tapestry5.ioc.services.ThreadLocale;
+import org.apache.tapestry5.ioc.util.func.AbstractMapper;
import org.apache.tapestry5.ioc.util.func.F;
+import org.apache.tapestry5.ioc.util.func.Mapper;
import org.apache.tapestry5.services.assets.AssetPathConstructor;
import org.apache.tapestry5.services.javascript.JavascriptStack;
import org.apache.tapestry5.services.javascript.JavascriptStackSource;
@@ -38,9 +39,9 @@ public class JavascriptStackPathConstruc
private final boolean combineScripts;
- private final Coercion<Asset, String> toPath = new Coercion<Asset,
String>()
+ private final Mapper<Asset, String> toPath = new AbstractMapper<Asset,
String>()
{
- public String coerce(Asset input)
+ public String map(Asset input)
{
return input.toClientURL();
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java?rev=948276&r1=948275&r2=948276&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ImportWorker.java
Wed May 26 00:40:39 2010
@@ -23,8 +23,8 @@ import org.apache.tapestry5.ComponentRes
import org.apache.tapestry5.annotations.Import;
import org.apache.tapestry5.annotations.SetupRender;
import org.apache.tapestry5.ioc.Resource;
-import org.apache.tapestry5.ioc.services.Coercion;
import org.apache.tapestry5.ioc.services.SymbolSource;
+import org.apache.tapestry5.ioc.util.func.AbstractMapper;
import org.apache.tapestry5.ioc.util.func.AbstractWorker;
import org.apache.tapestry5.ioc.util.func.F;
import org.apache.tapestry5.ioc.util.func.Worker;
@@ -206,9 +206,9 @@ public class ImportWorker implements Com
private List<Asset> convertPathsToAssets(final Resource baseResource,
final Locale locale, String[] assetPaths)
{
- return F.map(new Coercion<String, Asset>()
+ return F.map(new AbstractMapper<String, Asset>()
{
- public Asset coerce(String assetPath)
+ public Asset map(String assetPath)
{
return assetSource.getAsset(baseResource, assetPath, locale);
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MultiZoneUpdateInsideForm.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MultiZoneUpdateInsideForm.java?rev=948276&r1=948275&r2=948276&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MultiZoneUpdateInsideForm.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/MultiZoneUpdateInsideForm.java
Wed May 26 00:40:39 2010
@@ -30,7 +30,7 @@ import org.apache.tapestry5.annotations.
import org.apache.tapestry5.corelib.components.Select;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.ioc.services.Coercion;
+import org.apache.tapestry5.ioc.util.func.AbstractMapper;
import org.apache.tapestry5.ioc.util.func.F;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.util.AbstractSelectModel;
@@ -104,9 +104,9 @@ public class MultiZoneUpdateInsideForm
public List<OptionModel> getOptions()
{
- return F.map(new Coercion<SelectObj, OptionModel>()
+ return F.map(new AbstractMapper<SelectObj, OptionModel>()
{
- public OptionModel coerce(final SelectObj input)
+ public OptionModel map(final SelectObj input)
{
return new AbstractOptionModel()
{
Added:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractMapper.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractMapper.java?rev=948276&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractMapper.java
(added)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractMapper.java
Wed May 26 00:40:39 2010
@@ -0,0 +1,34 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed 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.tapestry5.ioc.util.func;
+
+public abstract class AbstractMapper<S, T> implements Mapper<S, T>
+{
+ public <X> Mapper<S, X> combine(final Mapper<T, X> other)
+ {
+ final Mapper<S, T> stMapper = this;
+
+ return new AbstractMapper<S, X>()
+ {
+ public X map(S value)
+ {
+
+ T tValue = stMapper.map(value);
+
+ return other.map(tValue);
+ }
+ };
+ }
+}
Propchange:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/AbstractMapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/F.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/F.java?rev=948276&r1=948275&r2=948276&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/F.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/F.java
Wed May 26 00:40:39 2010
@@ -37,10 +37,10 @@ public class F
/**
* Functional map (i.e., transform operation) from a Collection<S>
to List<T>.
*/
- public static <S, T> List<T> map(Coercion<S, T> coercion, Collection<S>
source)
+ public static <S, T> List<T> map(Mapper<S, T> mapper, Collection<S> source)
{
Defense.notNull(source, "source");
- Defense.notNull(coercion, "coercion");
+ Defense.notNull(mapper, "mapper");
if (source.isEmpty())
return Collections.emptyList();
@@ -49,7 +49,7 @@ public class F
for (S s : source)
{
- T t = coercion.coerce(s);
+ T t = mapper.map(s);
result.add(t);
}
@@ -57,25 +57,23 @@ public class F
return result;
}
- public static <S, T> List<T> map(Coercion<S, T> coercion, S... source)
+ public static <S, T> List<T> map(Mapper<S, T> mapper, S... source)
{
Defense.notNull(source, "source");
- return map(coercion, Arrays.asList(source));
+ return map(mapper, Arrays.asList(source));
}
- public static <S, T1, T2> Coercion<S, T2> combine(final Coercion<S, T1>
first, final Coercion<T1, T2> second)
+ public static <S, T> Mapper<S, T> toMapper(final Coercion<S, T> coercion)
{
- Defense.notNull(first, "first");
- Defense.notNull(second, "second");
+ Defense.notNull(coercion, "coercion");
- return new Coercion<S, T2>()
+ return new AbstractMapper<S, T>()
{
- public T2 coerce(S input)
- {
- T1 intermediate = first.coerce(input);
- return second.coerce(intermediate);
+ public T map(S value)
+ {
+ return coercion.coerce(value);
}
};
}
@@ -91,6 +89,17 @@ public class F
}
}
+ /**
+ * Performs an operation on each of the values.
+ */
+ public static <T> void each(Worker<T> operation, T... values)
+ {
+ for (T t : values)
+ {
+ operation.work(t);
+ }
+ }
+
/** Returns a new list containing only those elements for which the
predicate evaluates to true. */
public static <T> List<T> filter(Predicate<? super T> predicate, List<T>
source)
{
@@ -222,11 +231,11 @@ public class F
return invert(isNull);
}
- public static <S, T> Coercion<S, T> always(final T fixedResult)
+ public static <S, T> Mapper<S, T> always(final T fixedResult)
{
- return new Coercion<S, T>()
+ return new AbstractMapper<S, T>()
{
- public T coerce(S input)
+ public T map(S input)
{
return fixedResult;
}
@@ -234,8 +243,8 @@ public class F
}
/**
- * Coercion factory that combines a Predicate with two coercions;
evaluating the predicate selects one of the
- * two coercions.
+ * Coercion factory that combines a Predicate with two {...@link Mapper}s;
evaluating the predicate selects one of the
+ * two mappers.
*
* @param predicate
* evaluated to selected a coercion
@@ -244,43 +253,43 @@ public class F
* @param ifRejected
* used when predicate evaluates to false
*/
- public static <S, T> Coercion<S, T> select(final Predicate<? super S>
predicate, final Coercion<S, T> ifAccepted,
- final Coercion<S, T> ifRejected)
+ public static <S, T> Mapper<S, T> select(final Predicate<? super S>
predicate, final Mapper<S, T> ifAccepted,
+ final Mapper<S, T> ifRejected)
{
- return new Coercion<S, T>()
+ return new AbstractMapper<S, T>()
{
- public T coerce(S input)
+ public T map(S input)
{
- Coercion<S, T> active = predicate.accept(input) ? ifAccepted :
ifRejected;
+ Mapper<S, T> active = predicate.accept(input) ? ifAccepted :
ifRejected;
- return active.coerce(input);
+ return active.map(input);
}
};
}
/**
- * Override of {...@link #select(Predicate, Coercion, Coercion)} where
rejected values are replaced with null.
+ * Override of {...@link #select(Predicate, Mapper, Mapper)} where
rejected values are replaced with null.
*/
- public static <S, T> Coercion<S, T> select(Predicate<? super S> predicate,
Coercion<S, T> ifAccepted)
+ public static <S, T> Mapper<S, T> select(Predicate<? super S> predicate,
Mapper<S, T> ifAccepted)
{
return select(predicate, ifAccepted, (T) null);
}
/**
- * Override of {...@link #select(Predicate, Coercion)} where rejected
values are replaced with a fixed value.
+ * Override of {...@link #select(Predicate, Mapper)} where rejected values
are replaced with a fixed value.
*/
- public static <S, T> Coercion<S, T> select(Predicate<? super S> predicate,
Coercion<S, T> ifAccepted, T ifRejected)
+ public static <S, T> Mapper<S, T> select(Predicate<? super S> predicate,
Mapper<S, T> ifAccepted, T ifRejected)
{
- Coercion<S, T> rejectedCoercion = always(ifRejected);
+ Mapper<S, T> rejectedMapper = always(ifRejected);
- return select(predicate, ifAccepted, rejectedCoercion);
+ return select(predicate, ifAccepted, rejectedMapper);
}
- public static <S> Coercion<S, S> identity()
+ public static <S> Mapper<S, S> identity()
{
- return new Coercion<S, S>()
+ return new AbstractMapper<S, S>()
{
- public S coerce(S input)
+ public S map(S input)
{
return input;
}
@@ -288,13 +297,13 @@ public class F
}
/** Allows Coercion to boolean to be used as a Predicate. */
- public static <S> Predicate<S> toPredicate(final Coercion<S, Boolean>
coercion)
+ public static <S> Predicate<S> toPredicate(final Mapper<S, Boolean> mapper)
{
return new Predicate<S>()
{
public boolean accept(S object)
{
- return coercion.coerce(object);
+ return mapper.map(object);
};
};
}
Added:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Mapper.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Mapper.java?rev=948276&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Mapper.java
(added)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Mapper.java
Wed May 26 00:40:39 2010
@@ -0,0 +1,27 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed 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.tapestry5.ioc.util.func;
+
+public interface Mapper<S, T>
+{
+ /** Maps a source value to a target value. */
+ T map(S value);
+
+ /*
+ * Combines this mapper (S -->T) with another mapper (T -->X) to form
+ * a composite mapper (S --> X).
+ */
+ <X> Mapper<S, X> combine(Mapper<T, X> other);
+}
Propchange:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/util/func/Mapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java?rev=948276&r1=948275&r2=948276&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/util/func/FuncTest.java
Wed May 26 00:40:39 2010
@@ -25,17 +25,17 @@ import org.testng.annotations.Test;
public class FuncTest extends TestBase
{
- private Coercion<String, Integer> stringToLength = new Coercion<String,
Integer>()
+ private Mapper<String, Integer> stringToLength = new
AbstractMapper<String, Integer>()
{
- public Integer coerce(String input)
+ public Integer map(String input)
{
return input.length();
}
};
- private Coercion<Integer, Boolean> toEven = new Coercion<Integer,
Boolean>()
+ private Mapper<Integer, Boolean> toEven = new AbstractMapper<Integer,
Boolean>()
{
- public Boolean coerce(Integer input)
+ public Boolean map(Integer input)
{
return evenp.accept(input);
}
@@ -60,9 +60,9 @@ public class FuncTest extends TestBase
}
@Test
- public void combine_coercions()
+ public void combine_mappers()
{
- List<Boolean> even = F.map(F.combine(stringToLength, toEven), "Mary",
"had", "a", "little", "lamb");
+ List<Boolean> even = F.map(stringToLength.combine(toEven), "Mary",
"had", "a", "little", "lamb");
assertListsEquals(even, true, false, false, true, true);
}
@@ -103,8 +103,6 @@ public class FuncTest extends TestBase
@Test
public void combine_workers()
{
- List<String> source = Arrays.asList("Mary", "had", "a", "little",
"lamb");
-
final StringBuffer buffer = new StringBuffer();
Worker<String> appendWorker = new AbstractWorker<String>()
@@ -128,12 +126,27 @@ public class FuncTest extends TestBase
}
};
- F.each(appendWorker.combine(appendLength), source);
+ F.each(appendWorker.combine(appendLength), "Mary", "had", "a",
"little", "lamb");
assertEquals(buffer.toString(), "Mary(4) had(3) a(1) little(6)
lamb(4)");
}
@Test
+ public void wrap_coercion_as_mapper()
+ {
+ Coercion<String, String> toUpper = new Coercion<String, String>()
+ {
+ public String coerce(String input)
+ {
+ return input.toUpperCase();
+ }
+ };
+
+ assertListsEquals(F.map(F.toMapper(toUpper), "Mary", "had", "a",
"little", "lamb"), "MARY", "HAD", "A",
+ "LITTLE", "LAMB");
+ }
+
+ @Test
public void filter()
{
List<Integer> input = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
@@ -188,16 +201,16 @@ public class FuncTest extends TestBase
@Test
public void select_and_filter()
{
- List<String> source = Arrays.asList("Mary", "had", "a", "little",
"lamb");
+ Predicate<String> combinedp =
F.toPredicate(stringToLength.combine(toEven));
- Predicate<String> combinedp = F.toPredicate(F.combine(stringToLength,
toEven));
- Coercion<String, String> identity = F.identity();
+ Mapper<String, String> identity = F.identity();
Predicate<String> isNull = F.isNull();
// Converting to null and then filtering out nulls is the hard way to
do filter or remove,
// but exercises the code we want to test.
- List<String> filtered = F.remove(isNull, F.map(F.select(combinedp,
identity), source));
+ List<String> filtered = F.remove(isNull, F.map(F.select(combinedp,
identity), "Mary", "had", "a", "little",
+ "lamb"));
assertListsEquals(filtered, "Mary", "little", "lamb");
}