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    }