[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>&nbsp;
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.