    001    /*****************************************************************************
    002     * Copyright (C) NanoContainer Organization. All rights reserved.            *
    003     * ------------------------------------------------------------------------- *
    004     * The software in this package is published under the terms of the BSD      *
    005     * style license a copy of which has been included with this distribution in *
    006     * the LICENSE.txt file.                                                     *
    007     *                                                                           *
    008     * Original code by Joe Walnes                                               *
    009     *****************************************************************************/
    010
    011
    012    package org.nanocontainer.reflection;
    013
    014    import java.util.HashMap;
    015    import java.util.Map;
    016
    017    public class StringToObjectConverter {
    018
    019        private final Map converters = new HashMap();
    020
    021        public StringToObjectConverter() {
    022            register(String.class, new Converter() {
    023                public Object convert(String in) {
    024                    return in;
    025                }
    026            });
    027
    028            register(Integer.class, new Converter() {
    029                public Object convert(String in) {
    030                    return in == null ? new Integer(0) : Integer.valueOf(in);
    031                }
    032            });
    033
    034            register(Long.class, new Converter() {
    035                public Object convert(String in) {
    036                    return in == null ? new Long(0) : Long.valueOf(in);
    037                }
    038            });
    039
    040            register(Boolean.class, new Converter() {
    041                public Object convert(String in) {
    042                    if (in == null || in.length() == 0) {
    043                        return Boolean.FALSE;
    044                    }
    045                    char c = in.toLowerCase().charAt(0);
    046                    return c == '1' || c == 'y' || c == 't' ? Boolean.TRUE : Boolean.FALSE;
    047                }
    048            });
    049        }
    050
    051        public Object convertTo(Class desiredClass, String inputString) {
    052            Converter converter = (Converter) converters.get(desiredClass);
    053            if (converter == null) {
    054                throw new InvalidConversionException("Cannot convert to type " + desiredClass.getName());
    055            }
    056            return converter.convert(inputString);
    057        }
    058
    059        public void register(Class type, Converter converter) {
    060            converters.put(type, converter);
    061        }
    062    }