Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 50543 invoked from network); 27 Apr 2009 17:27:21 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 27 Apr 2009 17:27:21 -0000 Received: (qmail 36978 invoked by uid 500); 27 Apr 2009 17:27:21 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 36909 invoked by uid 500); 27 Apr 2009 17:27:21 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 36897 invoked by uid 99); 27 Apr 2009 17:27:20 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 27 Apr 2009 17:27:20 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 27 Apr 2009 17:27:18 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id B104723889DD; Mon, 27 Apr 2009 17:26:57 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r769064 - /geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java Date: Mon, 27 Apr 2009 17:26:57 -0000 To: scm@geronimo.apache.org From: gawor@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090427172657.B104723889DD@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: gawor Date: Mon Apr 27 17:26:57 2009 New Revision: 769064 URL: http://svn.apache.org/viewvc?rev=769064&view=rev Log: updated the ConversionService to try all converters registered for a given type - as per spec Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java?rev=769064&r1=769063&r2=769064&view=diff ============================================================================== --- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java (original) +++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/convert/ConversionServiceImpl.java Mon Apr 27 17:26:57 2009 @@ -70,37 +70,60 @@ if (Object.class == toType) { return fromValue; } - Converter converter = lookupConverter(toType); - if (converter == null) { - return convertDefault(fromValue, toType); + Object value = doConvert(fromValue, toType); + if (value == null) { + if (fromValue instanceof String) { + return convertString( (String)fromValue, toType); + } else { + throw new Exception("Unable to convert value " + fromValue + " to type: " + toType.getName()); + } } else { - return converter.convert(fromValue); + return value; } } - private Converter lookupConverter(Class toType) { + private Object doConvert(Object source, Class type) { + Object value = null; + // do explicit lookup - List converters = convertersMap.get(toType); - if (converters != null && !converters.isEmpty()) { - return converters.get(0); + List converters = convertersMap.get(type); + if (converters != null) { + value = convert(converters, source); + if (value != null) { + return value; + } } - + // try to find converter that matches the type for (Map.Entry> entry : convertersMap.entrySet()) { Class converterClass = entry.getKey(); - if (toType.isAssignableFrom(converterClass)) { - return entry.getValue().get(0); + if (type.isAssignableFrom(converterClass)) { + value = convert(entry.getValue(), source); + if (value != null) { + return value; + } } - } + } return null; } - private Object convertDefault(Object fromValue, Class toType) throws Exception { - if (!(fromValue instanceof String)) { - throw new RuntimeException("Unable to convert non-String value: " + fromValue.getClass()); + private Object convert(List converters, Object source) { + Object value = null; + for (Converter converter : converters) { + try { + value = converter.convert(source); + if (value != null) { + return value; + } + } catch (Exception e) { + // ignore + } } - String value = (String)fromValue; + return null; + } + + private Object convertString(String value, Class toType) throws Exception { if (Locale.class == toType) { String[] tokens = value.split("_"); if (tokens.length == 1) {