[picocontainer-scm] [5616] java/2.x/trunk/pico/distribution/src/site/content: Refactor step of Converting/converters
rimovm-yCVjj/[email protected]
| Newsgroups | gmane.comp.java.picocontainer.cvs |
|---|---|
| Message-ID | <[email protected]> |
Revision 5616
Author rimovm
Date 2010-02-17 03:29:13 -0600 (Wed, 17 Feb 2010)
Log Message
Refactor step of Converting/converters
Added support for primitives types in BuiltInConverter
And as Paul would say.... "More Words" :)
Modified Paths
- java/2.x/trunk/pico/container/src/java/org/picocontainer/Converting.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/classname/DefaultClassLoadingPicoContainer.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingPicoContainer.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/CompositePicoContainer.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/EmptyPicoContainer.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/ImmutablePicoContainer.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/BooleanConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/BuiltInConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/ByteConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/CharacterConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/DoubleConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/FileConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/FloatConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/IntegerConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/LongConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/NewInstanceConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/ShortConverter.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/parameters/BasicComponentParameter.java
- java/2.x/trunk/pico/container/src/test/org/picocontainer/converters/BuiltInConverterTestCase.java
- java/2.x/trunk/pico/container/src/test/org/picocontainer/converters/ConverterTestCase.java
- java/2.x/trunk/pico/distribution/src/site/content/converters.html
- java/2.x/trunk/pico/gems/src/java/org/picocontainer/gems/containers/CommonsLoggingTracingContainerDecorator.java
- java/2.x/trunk/pico/gems/src/java/org/picocontainer/gems/containers/Log4jTracingContainerDecorator.java
Added Paths
- java/2.x/trunk/pico/container/src/java/org/picocontainer/ConverterSet.java
- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/Converter.java
Diff
Added: java/2.x/trunk/pico/container/src/java/org/picocontainer/ConverterSet.java (0 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/ConverterSet.java (rev 0)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/ConverterSet.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -0,0 +1,33 @@
+/*****************************************************************************
+ * Copyright (C) PicoContainer Organization. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * The software in this package is published under the terms of the BSD *
+ * style license a copy of which has been included with this distribution in *
+ * the LICENSE.txt file. *
+ *****************************************************************************/
+package org.picocontainer;
+
+import java.lang.reflect.Type;
+
+/**
+ * A facade for a collection of converters that provides string-to-type conversions.
+ * @author Paul Hammant, Michael Rimov
+ */
+public interface ConverterSet {
+
+ /**
+ * Returns true if the set of converters can convert between strings and the target
+ * type.
+ * @param type
+ * @return true if the target type can convert.
+ */
+ boolean canConvert(Type type);
+
+ /**
+ * Converts a particular string value into the target type.
+ * @param paramValue
+ * @param type
+ * @return the target object.
+ */
+ Object convert(String paramValue, Type type);
+}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/Converting.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/Converting.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/Converting.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,14 +1,17 @@
package org.picocontainer;
-import java.lang.reflect.Type;
+/**
+ * Interface for containers that can handle string-to-object conversion in object parameters.
+ * @author Paul Hammant
+ */
public interface Converting {
- Converter getConverter();
-
- public static interface Converter {
- boolean canConvert(Type type);
- Object convert(String paramValue, Type type);
- }
+ /**
+ * Retrieve the set of converters for transforming string parameters
+ * into objects.
+ * @return converter set instance.
+ */
+ ConverterSet getConverter();
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/DefaultPicoContainer.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -133,7 +133,7 @@
private transient IntoThreadLocal intoThreadLocal = new IntoThreadLocal();
- private Converting.Converter converter;
+ private ConverterSet converter;
/**
@@ -1073,11 +1073,12 @@
this.name = name;
}
+ @Override
public String toString() {
return String.format("%s:%d<%s", (name != null ? name : super.toString()), this.componentAdapters.size(), (parent != null ? parent.toString() : "|"));
}
- public synchronized Converting.Converter getConverter() {
+ public synchronized ConverterSet getConverter() {
if (converter == null) {
if (parent == null || (parent instanceof Converting && ((Converting) parent).getConverter() instanceof EmptyPicoContainer.NullConverter)) {
converter = new BuiltInConverter();
@@ -1105,7 +1106,8 @@
}
@Override
- public MutablePicoContainer as(Properties... properties) {
+ @SuppressWarnings("unused")
+ public MutablePicoContainer as( Properties... props) {
throw new PicoCompositionException("Syntax 'as(FOO).as(BAR)' not allowed, do 'as(FOO, BAR)' instead");
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/classname/DefaultClassLoadingPicoContainer.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/classname/DefaultClassLoadingPicoContainer.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/classname/DefaultClassLoadingPicoContainer.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -495,15 +495,15 @@
}
public void start() {
-
+ //This implementation does nothing on lifecycle triggers.
}
public void stop() {
-
+ //This implementation does nothing on lifecycle triggers.
}
public void dispose() {
-
+ //This implementation does nothing on lifecycle triggers.
}
public void setName(String name) {
@@ -514,7 +514,7 @@
DefaultClassLoadingPicoContainer.this.setLifecycleState(lifecycleState);
}
- public Converting.Converter getConverter() {
+ public ConverterSet getConverter() {
return DefaultClassLoadingPicoContainer.this.getConverter();
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingPicoContainer.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingPicoContainer.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingPicoContainer.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -14,6 +14,7 @@
* @author k.pribluda
*
*/
+@SuppressWarnings("serial")
public abstract class AbstractDelegatingPicoContainer implements PicoContainer, Converting, Serializable{
private PicoContainer delegate;
@@ -32,7 +33,8 @@
}
- public boolean equals(Object obj) {
+ @Override
+ public boolean equals(Object obj) {
// required to make it pass on both jdk 1.3 and jdk 1.4. Btw, what about
// overriding hashCode()? (AH)
return delegate.equals(obj) || this == obj;
@@ -97,11 +99,12 @@
return delegate.getParent();
}
+ @Override
public String toString() {
return "D<" + delegate.toString();
}
- public Converter getConverter() {
+ public ConverterSet getConverter() {
if (delegate instanceof Converting) {
return ((Converting) delegate).getConverter();
} else {
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/CompositePicoContainer.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/CompositePicoContainer.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/CompositePicoContainer.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -26,9 +26,9 @@
public class CompositePicoContainer implements PicoContainer, Converting, Serializable {
private final PicoContainer[] containers;
- private CompositeConverter compositeConverter = new CompositeConverter();
+ private ConverterSet compositeConverter = new CompositeConverterSet();
- public class CompositeConverter implements Converting.Converter {
+ public class CompositeConverterSet implements ConverterSet {
public boolean canConvert(Type type) {
for (PicoContainer container : containers) {
if (container instanceof Converting && ((Converting) container).getConverter().canConvert(type)) {
@@ -41,7 +41,7 @@
public Object convert(String paramValue, Type type) {
for (PicoContainer container : containers) {
if (container instanceof Converting) {
- Converting.Converter converter = ((Converting) container).getConverter();
+ ConverterSet converter = ((Converting) container).getConverter();
if (converter.canConvert(type)) {
return converter.convert(paramValue, type);
}
@@ -146,7 +146,7 @@
public void accept(PicoVisitor visitor) {
}
- public Converting.Converter getConverter() {
+ public ConverterSet getConverter() {
return compositeConverter;
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/EmptyPicoContainer.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/EmptyPicoContainer.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/EmptyPicoContainer.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -19,8 +19,8 @@
import java.lang.reflect.Type;
/**
- * empty pico container serving as recoil damper in situations where you
- * do not like to check whether container reference suplpied to you
+ * Empty pico container serving as recoil damper in situations where you
+ * do not like to check whether container reference supplied to you
* is null or not
*
* @author Konstantin Pribluda
@@ -28,18 +28,22 @@
@SuppressWarnings("serial")
public class EmptyPicoContainer implements PicoContainer, Converting, Serializable {
+ @SuppressWarnings("unused")
public Object getComponent(Object componentKeyOrType) {
return null;
}
+ @SuppressWarnings("unused")
public Object getComponent(Object componentKeyOrType, Type into) {
return null;
}
+ @SuppressWarnings("unused")
public <T> T getComponent(Class<T> componentType) {
return null;
}
+ @SuppressWarnings("unused")
public <T> T getComponent(Class<T> componentType, Class<? extends Annotation> binding) {
return null;
}
@@ -52,14 +56,17 @@
return null;
}
+ @SuppressWarnings("unused")
public ComponentAdapter<?> getComponentAdapter(Object componentKey) {
return null;
}
+ @SuppressWarnings("unused")
public <T> ComponentAdapter<T> getComponentAdapter(Class<T> componentType, NameBinding componentNameBinding) {
return null;
}
+ @SuppressWarnings("unused")
public <T> ComponentAdapter<T> getComponentAdapter(Class<T> componentType, Class<? extends Annotation> binding) {
return null;
}
@@ -68,10 +75,12 @@
return Collections.emptyList();
}
+ @SuppressWarnings("unused")
public <T> List<ComponentAdapter<T>> getComponentAdapters(Class<T> componentType) {
return Collections.emptyList();
}
+ @SuppressWarnings("unused")
public <T> List<ComponentAdapter<T>> getComponentAdapters(Class<T> componentType, Class<? extends Annotation> binding) {
return Collections.emptyList();
}
@@ -79,23 +88,29 @@
/**
* we do not have anything to do here.
*/
+ @SuppressWarnings("unused")
public void accept(PicoVisitor visitor) {
+ //Does nothing.
}
+ /** {@inheritDoc} **/
+ @SuppressWarnings("unused")
public <T> List<T> getComponents(Class<T> componentType) {
return Collections.emptyList();
}
+ @Override
public String toString() {
return "(empty)";
}
- public Converting.Converter getConverter() {
+ public ConverterSet getConverter() {
return new NullConverter();
}
- public static class NullConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
+ @SuppressWarnings("unused")
+ public static class NullConverter implements ConverterSet {
+ public boolean canConvert( Type type) {
return false;
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/ImmutablePicoContainer.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/ImmutablePicoContainer.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/containers/ImmutablePicoContainer.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -107,7 +107,7 @@
return "I<" + delegate.toString();
}
- public Converting.Converter getConverter() {
+ public ConverterSet getConverter() {
if (delegate instanceof Converting) {
return ((Converting) delegate).getConverter();
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/BooleanConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/BooleanConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/BooleanConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,15 +1,15 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-import java.lang.reflect.Type;
+/**
+ * Converts strings to boolean types.
+ * @author Paul Hammant, Michael Rimov
+ */
+class BooleanConverter implements Converter<Boolean> {
-class BooleanConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return Boolean.class == type;
- }
- public Object convert(String paramValue, Type type) {
+ /** {@inheritDoc} **/
+ public Boolean convert(String paramValue) {
return Boolean.valueOf(paramValue);
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/BuiltInConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/BuiltInConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/BuiltInConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,34 +1,58 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-
import java.io.File;
import java.io.Serializable;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
+import org.picocontainer.ConverterSet;
-public class BuiltInConverter implements Converting.Converter, Serializable {
+@SuppressWarnings("serial")
+public class BuiltInConverter implements ConverterSet, Serializable {
- private final Map<Class, Converting.Converter> stringConverters = new HashMap<Class, Converting.Converter>();
+ private final Map<Class, Converter> stringConverters = new HashMap<Class, Converter>();
public BuiltInConverter() {
addBuiltInConverters();
}
protected void addBuiltInConverters() {
- addConverter(Integer.class, new IntegerConverter());
- addConverter(Double.class, new DoubleConverter());
- addConverter(Boolean.class, new BooleanConverter());
- addConverter(Long.class, new LongConverter());
- addConverter(Float.class, new FloatConverter());
- addConverter(Character.class, new CharacterConverter());
- addConverter(Byte.class, new ByteConverter());
- addConverter(Short.class, new ShortConverter());
+ IntegerConverter intConverter = new IntegerConverter();
+ addConverter(Integer.class, intConverter);
+ addConverter(Integer.TYPE, intConverter);
+
+ DoubleConverter doubleConverter = new DoubleConverter();
+ addConverter(Double.class, doubleConverter);
+ addConverter(Double.TYPE, doubleConverter);
+
+ BooleanConverter booleanConverter = new BooleanConverter();
+ addConverter(Boolean.class, booleanConverter);
+ addConverter(Boolean.TYPE, booleanConverter);
+
+ LongConverter longConverter = new LongConverter();
+ addConverter(Long.class, longConverter);
+ addConverter(Long.TYPE, longConverter);
+
+ FloatConverter floatConverter = new FloatConverter();
+ addConverter(Float.class, floatConverter);
+ addConverter(Float.TYPE, floatConverter);
+
+ CharacterConverter charConverter = new CharacterConverter();
+ addConverter(Character.class, charConverter);
+ addConverter(Character.TYPE, charConverter);
+
+ ByteConverter byteConverter = new ByteConverter();
+ addConverter(Byte.class, byteConverter);
+ addConverter(Byte.TYPE, byteConverter);
+
+ ShortConverter shortConverter = new ShortConverter();
+ addConverter(Short.class, shortConverter);
+ addConverter(Short.TYPE, shortConverter);
+
addConverter(File.class, new FileConverter());
}
- protected void addConverter(Class<?> key, Converting.Converter converter) {
+ protected void addConverter(Class<?> key, Converter converter) {
stringConverters.put(key, converter);
}
@@ -37,11 +61,11 @@
}
public Object convert(String paramValue, Type type) {
- Converting.Converter converter = stringConverters.get(type);
+ Converter converter = stringConverters.get(type);
if (converter== null) {
return null;
}
- return converter.convert(paramValue, type);
+ return converter.convert(paramValue);
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/ByteConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/ByteConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/ByteConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -4,12 +4,14 @@
import java.lang.reflect.Type;
-class ByteConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return Byte.class == type;
- }
-
- public Object convert(String paramValue, Type type) {
+/**
+ * Converts
+ *
+ */
+class ByteConverter implements Converter {
+
+ /** {@inheritDoc} **/
+ public Object convert(String paramValue) {
return Byte.valueOf(paramValue);
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/CharacterConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/CharacterConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/CharacterConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,15 +1,14 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-import java.lang.reflect.Type;
+/**
+ * Converts strings to characters. It does so by only grabbing
+ * the first character in the string.
+ * @author Paul Hammant, Michael Rimov
+ */
+class CharacterConverter implements Converter<Character> {
-class CharacterConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return Character.class == type;
- }
-
- public Object convert(String paramValue, Type type) {
+ public Character convert(String paramValue) {
return paramValue.charAt(0);
}
}
Added: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/Converter.java (0 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/Converter.java (rev 0)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/Converter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -0,0 +1,23 @@
+/*****************************************************************************
+ * Copyright (C) PicoContainer Organization. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * The software in this package is published under the terms of the BSD *
+ * style license a copy of which has been included with this distribution in *
+ * the LICENSE.txt file. *
+ *****************************************************************************/
+package org.picocontainer.converters;
+
+/**
+ * Interface for all converters. This interface is actually hidden inside
+ * the ConverterSet facade.
+ * @author Paul Hammant, Michael Rimov
+ */
+public interface Converter<T> {
+
+ /**
+ * Performs a conversion between the given parameter value and the target type.
+ * @param parameterValue the string value to convert.
+ * @return the resulting object.
+ */
+ T convert(String parameterValue);
+}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/DoubleConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/DoubleConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/DoubleConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,15 +1,16 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-import java.lang.reflect.Type;
+/**
+ * Converts strings to double-precision floating point values..
+ * @author Paul Hammant, Michael Rimov
+ */
+class DoubleConverter implements Converter<Double> {
-class DoubleConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return Double.class == type;
- }
-
- public Object convert(String paramValue, Type type) {
+ /**
+ * {@inheritDoc}
+ */
+ public Double convert(String paramValue) {
return Double.valueOf(paramValue);
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/FileConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/FileConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/FileConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,16 +1,15 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-
import java.io.File;
-import java.lang.reflect.Type;
-class FileConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return File.class == type;
- }
+/**
+ * Converts strings to files.
+ * @author Paul Hammant, Michael Rimov
+ */
+class FileConverter implements Converter<File> {
- public Object convert(String paramValue, Type type) {
+ /** {@inheritDoc} **/
+ public File convert(String paramValue) {
return new File(paramValue);
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/FloatConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/FloatConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/FloatConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,15 +1,13 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-import java.lang.reflect.Type;
+/**
+ * Converts strings to boolean types.
+ * @author Paul Hammant, Michael Rimov
+ */
+class FloatConverter implements Converter<Float> {
-class FloatConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return Float.class == type;
- }
-
- public Object convert(String paramValue, Type type) {
+ public Float convert(String paramValue) {
return Float.valueOf(paramValue);
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/IntegerConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/IntegerConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/IntegerConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,15 +1,14 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-import java.lang.reflect.Type;
+/**
+ * Converts strings to integer types.
+ * @author Paul Hammant, Michael Rimov
+ */
+class IntegerConverter implements Converter<Integer> {
-class IntegerConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return Integer.class == type;
- }
-
- public Object convert(String paramValue, Type type) {
+ /** {@inheritDoc} **/
+ public Integer convert(String paramValue) {
return Integer.valueOf(paramValue);
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/LongConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/LongConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/LongConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,15 +1,14 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-import java.lang.reflect.Type;
+/**
+ * Converts strings to long-integer types.
+ * @author Paul Hammant, Michael Rimov
+ */
+class LongConverter implements Converter<Long> {
-class LongConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return Long.class == type;
- }
-
- public Object convert(String paramValue, Type type) {
+ /** {@inheritDoc} **/
+ public Long convert(String paramValue) {
return Long.valueOf(paramValue);
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/NewInstanceConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/NewInstanceConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/NewInstanceConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,12 +1,9 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Type;
-public class NewInstanceConverter implements Converting.Converter {
+public class NewInstanceConverter implements Converter {
private Constructor c;
public NewInstanceConverter(Class clazz) {
@@ -15,11 +12,7 @@
} catch (NoSuchMethodException e) {
}
}
- public boolean canConvert(Type type) {
- return false;
- }
-
- public Object convert(String paramValue, Type type) {
+ public Object convert(String paramValue) {
try {
return c.newInstance(paramValue);
} catch (IllegalAccessException e) {
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/ShortConverter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/ShortConverter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/converters/ShortConverter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,15 +1,16 @@
package org.picocontainer.converters;
-import org.picocontainer.Converting;
-import java.lang.reflect.Type;
+/**
+ * Converts strings to 'short' data type objects.
+ * @author Paul Hammant, Michael Rimov
+ */
+class ShortConverter implements Converter<Short> {
-class ShortConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return Short.class == type;
- }
-
- public Object convert(String paramValue, Type type) {
+ /**
+ * {@inheritDoc}
+ */
+ public Short convert(String paramValue) {
return Short.valueOf(paramValue);
}
}
Modified: java/2.x/trunk/pico/container/src/java/org/picocontainer/parameters/BasicComponentParameter.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/java/org/picocontainer/parameters/BasicComponentParameter.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/java/org/picocontainer/parameters/BasicComponentParameter.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -98,11 +98,11 @@
return null;
}
if (componentAdapter instanceof DefaultPicoContainer.LateInstance) {
- return convert(getConverter(container), ((DefaultPicoContainer.LateInstance) componentAdapter).getComponentInstance(), expectedType);
+ return convert(getConverters(container), ((DefaultPicoContainer.LateInstance) componentAdapter).getComponentInstance(), expectedType);
// } else if (injecteeAdapter != null && injecteeAdapter instanceof DefaultPicoContainer.KnowsContainerAdapter) {
// return convert(((DefaultPicoContainer.KnowsContainerAdapter) injecteeAdapter).getComponentInstance(makeInjectInto(forAdapter)), expectedType);
} else {
- return convert(getConverter(container), container.getComponent(componentAdapter.getComponentKey(), makeInjectInto(forAdapter)), expectedType);
+ return convert(getConverters(container), container.getComponent(componentAdapter.getComponentKey(), makeInjectInto(forAdapter)), expectedType);
}
}
@@ -112,7 +112,7 @@
};
}
- private Converting.Converter getConverter(PicoContainer container) {
+ private ConverterSet getConverters(PicoContainer container) {
return container instanceof Converting ? ((Converting) container).getConverter() : null;
}
@@ -120,9 +120,9 @@
return new InjectInto(forAdapter.getComponentImplementation(), forAdapter.getComponentKey());
}
- private static Object convert(Converting.Converter converter, Object obj, Type expectedType) {
+ private static Object convert(ConverterSet converters, Object obj, Type expectedType) {
if (obj instanceof String && expectedType != String.class) {
- obj = converter.convert((String) obj, expectedType);
+ obj = converters.convert((String) obj, expectedType);
}
return obj;
}
@@ -216,7 +216,7 @@
if (!type.isAssignableFrom(result.getComponentImplementation())) {
// if (!(result.getComponentImplementation() == String.class && stringConverters.containsKey(type))) {
- if (!(result.getComponentImplementation() == String.class && getConverter(container).canConvert(type))) {
+ if (!(result.getComponentImplementation() == String.class && getConverters(container).canConvert(type))) {
return null;
}
}
@@ -265,7 +265,7 @@
Class foundImpl = found.getComponentImplementation();
return expectedType.isAssignableFrom(foundImpl) ||
//(foundImpl == String.class && stringConverters.containsKey(expectedType)) ;
- (foundImpl == String.class && getConverter(container) != null
- && getConverter(container).canConvert(expectedType)) ;
+ (foundImpl == String.class && getConverters(container) != null
+ && getConverters(container).canConvert(expectedType)) ;
}
}
Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/converters/BuiltInConverterTestCase.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/test/org/picocontainer/converters/BuiltInConverterTestCase.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/converters/BuiltInConverterTestCase.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -65,13 +65,32 @@
}
- private static class JPanelConverter implements Converting.Converter {
- public boolean canConvert(Type type) {
- return false;
- }
-
- public Object convert(String paramValue, Type type) {
+ private static class JPanelConverter implements Converter<JPanel> {
+ public JPanel convert(String paramValue) {
return new JPanel();
}
}
+
+
+ @Test
+ public void testPrimitivesAreSupported() {
+ BuiltInConverter converters = new BuiltInConverter();
+ assertTrue(converters.canConvert(Boolean.TYPE));
+ assertTrue(converters.canConvert(Character.TYPE));
+ assertTrue(converters.canConvert(Integer.TYPE));
+ assertTrue(converters.canConvert(Long.TYPE));
+ assertTrue(converters.canConvert(Short.TYPE));
+ assertTrue(converters.canConvert(Float.TYPE));
+ assertTrue(converters.canConvert(Double.TYPE));
+ assertTrue(converters.canConvert(Byte.TYPE));
+
+ assertEquals(12, converters.convert("12", Integer.TYPE));
+ assertEquals(12345678901L, converters.convert("12345678901",Long.TYPE));
+ assertEquals((byte)12, converters.convert("12", Byte.TYPE));
+ assertEquals(2.22, converters.convert("2.22", Double.TYPE));
+ assertEquals(1.11F, converters.convert("1.11", Float.TYPE));
+ assertEquals('a', converters.convert("a", Character.TYPE));
+ assertEquals((short)12, converters.convert("12", Short.TYPE));
+ assertEquals(true, converters.convert("TRUE", Boolean.TYPE));
+ }
}
Modified: java/2.x/trunk/pico/container/src/test/org/picocontainer/converters/ConverterTestCase.java (5615 => 5616)
--- java/2.x/trunk/pico/container/src/test/org/picocontainer/converters/ConverterTestCase.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/container/src/test/org/picocontainer/converters/ConverterTestCase.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -1,16 +1,16 @@
package org.picocontainer.converters;
+import static junit.framework.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
import org.junit.Test;
-import org.picocontainer.Converting;
+import org.picocontainer.ConverterSet;
import org.picocontainer.DefaultPicoContainer;
import org.picocontainer.PicoContainer;
import org.picocontainer.containers.CompositePicoContainer;
import org.picocontainer.containers.EmptyPicoContainer;
-import static junit.framework.Assert.assertTrue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
public class ConverterTestCase {
@Test
@@ -23,23 +23,42 @@
public void canOverrideConverter() {
DefaultPicoContainer dpc = new DefaultPicoContainer() {
@Override
- public Converting.Converter getConverter() {
- return new MyConverter();
+ public ConverterSet getConverter() {
+ return new BuiltInConverter() {
+ @Override
+ protected void addBuiltInConverters() {
+ addConverter(Boolean.class, new MyConverter());
+
+ }
+ };
}
};
- assertTrue(dpc.getConverter() instanceof MyConverter);
+
+ //Verify use of MyConverter instead of usual BooleanConverter
+ int oldInvocationCount = MyConverter.invocationCount;
+ dpc.getConverter().convert("true", Boolean.class);
+ assertEquals(oldInvocationCount + 1, MyConverter.invocationCount);
}
@Test
public void parentContainerSuppliesByDefault() {
PicoContainer parent = new DefaultPicoContainer() {
@Override
- public Converting.Converter getConverter() {
- return new MyConverter();
+ public ConverterSet getConverter() {
+ return new BuiltInConverter() {
+ @Override
+ protected void addBuiltInConverters() {
+ addConverter(Boolean.class, new MyConverter());
+
+ }
+ };
}
};
DefaultPicoContainer dpc = new DefaultPicoContainer(parent);
- assertTrue(dpc.getConverter() instanceof MyConverter);
+ //Verify use of MyConverter instead of usual
+ int oldInvocationCount = MyConverter.invocationCount;
+ dpc.getConverter().convert("true", Boolean.class);
+ assertEquals(oldInvocationCount + 1, MyConverter.invocationCount);
}
@Test
@@ -53,18 +72,30 @@
public void compositesPossible() {
PicoContainer one = new DefaultPicoContainer() {
@Override
- public Converting.Converter getConverter() {
- return new BooleanConverter();
+ public ConverterSet getConverter() {
+ return new BuiltInConverter() {
+ @Override
+ protected void addBuiltInConverters() {
+ addConverter(Boolean.class, new BooleanConverter());
+
+ }
+ };
}
};
PicoContainer two = new DefaultPicoContainer() {
@Override
- public Converting.Converter getConverter() {
- return new ShortConverter();
+ public ConverterSet getConverter() {
+ return new BuiltInConverter() {
+ @Override
+ protected void addBuiltInConverters() {
+ addConverter(Short.class, new ShortConverter());
+
+ }
+ };
}
};
CompositePicoContainer compositePC = new CompositePicoContainer(one, two);
- Converting.Converter converter = compositePC.getConverter();
+ ConverterSet converter = compositePC.getConverter();
assertFalse(converter.canConvert(Character.class));
assertTrue(converter.canConvert(Short.class));
assertTrue(converter.canConvert(Boolean.class));
@@ -76,6 +107,17 @@
public static class MyConverter extends BooleanConverter {
+ public static int invocationCount = 0;
+
+ /**
+ * {@inheritDoc}
+ * @see org.picocontainer.converters.BooleanConverter#convert(java.lang.String)
+ */
+ @Override
+ public Boolean convert(String paramValue) {
+ invocationCount++;
+ return super.convert(paramValue);
+ }
}
}
Modified: java/2.x/trunk/pico/distribution/src/site/content/converters.html (5615 => 5616)
--- java/2.x/trunk/pico/distribution/src/site/content/converters.html 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/distribution/src/site/content/converters.html 2010-02-17 09:29:13 UTC (rev 5616)
@@ -9,7 +9,7 @@
<h2>Overview<br>
</h2>
<p><span style="font-weight: normal;">Converters
-are take string instances in PicoContainer and convert the type that a
+ take string instances in PicoContainer and convert the type that a
particular component requires for injection.</span>
DefaultPicoContainer has built in converter<span
style="font-weight: normal;"> for primitives:</span></p>
Modified: java/2.x/trunk/pico/gems/src/java/org/picocontainer/gems/containers/CommonsLoggingTracingContainerDecorator.java (5615 => 5616)
--- java/2.x/trunk/pico/gems/src/java/org/picocontainer/gems/containers/CommonsLoggingTracingContainerDecorator.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/gems/src/java/org/picocontainer/gems/containers/CommonsLoggingTracingContainerDecorator.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -528,7 +528,7 @@
delegate.setLifecycleState(lifecycleState);
}
- public Converting.Converter getConverter() {
+ public ConverterSet getConverter() {
if (delegate instanceof Converting) {
return ((Converting) delegate).getConverter();
}
Modified: java/2.x/trunk/pico/gems/src/java/org/picocontainer/gems/containers/Log4jTracingContainerDecorator.java (5615 => 5616)
--- java/2.x/trunk/pico/gems/src/java/org/picocontainer/gems/containers/Log4jTracingContainerDecorator.java 2010-02-17 02:32:36 UTC (rev 5615)
+++ java/2.x/trunk/pico/gems/src/java/org/picocontainer/gems/containers/Log4jTracingContainerDecorator.java 2010-02-17 09:29:13 UTC (rev 5616)
@@ -590,7 +590,7 @@
delegate.setLifecycleState(lifecycleState);
}
- public Converting.Converter getConverter() {
+ public ConverterSet getConverter() {
if (delegate instanceof Converting) {
return ((Converting) delegate).getConverter();
}
----------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email