Author: adrianc
Date: Sun Nov 8 00:43:17 2009 New Revision: 833784 URL: http://svn.apache.org/viewvc?rev=833784&view=rev Log: The new Java object type conversion framework. It isn't complete, but there is enough there to grasp the general idea. Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractConverter.java (with props) ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractLocalizedConverter.java (with props) ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/BooleanConverters.java (with props) ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/ConversionException.java (with props) ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converter.java (with props) ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java (with props) ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java (with props) ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/LocalizedConverter.java (with props) ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java (with props) ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/NumberConverters.java (with props) Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractConverter.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractConverter.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractConverter.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractConverter.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,36 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +import org.ofbiz.base.util.ObjectType; + +/** Abstract Converter class. This class handles converter registration + * and it implements the <code>canConvert</code> method. + */ +public abstract class AbstractConverter<S, T> implements Converter<S, T> { + + public AbstractConverter() { + Converters.registerConverter(this); + } + + public boolean canConvert(Class<?> sourceClass, Class<?> targetClass) { + return ObjectType.instanceOf(sourceClass, this.getSourceClass()) && ObjectType.instanceOf(targetClass, this.getTargetClass()); + } + +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractConverter.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractConverter.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractConverter.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractLocalizedConverter.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractLocalizedConverter.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractLocalizedConverter.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractLocalizedConverter.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,36 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +import org.ofbiz.base.util.ObjectType; + +/** Abstract LocalizedConverter class. This class handles converter registration + * and it implements the <code>canConvert</code> method. + */ +public abstract class AbstractLocalizedConverter<S, T> implements LocalizedConverter<S, T> { + + public AbstractLocalizedConverter() { + Converters.registerConverter(this); + } + + public boolean canConvert(Class<?> sourceClass, Class<?> targetClass) { + return ObjectType.instanceOf(sourceClass, this.getSourceClass()) && ObjectType.instanceOf(targetClass, this.getTargetClass()); + } + +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractLocalizedConverter.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractLocalizedConverter.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/AbstractLocalizedConverter.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/BooleanConverters.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/BooleanConverters.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/BooleanConverters.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/BooleanConverters.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,87 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +/** Boolean Converter classes. */ +public class BooleanConverters { + + public static class BooleanToInteger extends AbstractConverter<Boolean, Integer> { + + public Integer convert(Boolean obj) throws ConversionException { + return obj.booleanValue() ? Integer.valueOf(1) : Integer.valueOf(0); + } + + public Class<Boolean> getSourceClass() { + return Boolean.class; + } + + public Class<Integer> getTargetClass() { + return Integer.class; + } + + } + + public static class BooleanToString extends AbstractConverter<Boolean, String> { + + public String convert(Boolean obj) throws ConversionException { + return obj.booleanValue() ? "true" : "false"; + } + + public Class<Boolean> getSourceClass() { + return Boolean.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class IntegerToBoolean extends AbstractConverter<Integer, Boolean> { + + public Boolean convert(Integer obj) throws ConversionException { + return obj.intValue() == 0 ? Boolean.FALSE : Boolean.TRUE; + } + + public Class<Integer> getSourceClass() { + return Integer.class; + } + + public Class<Boolean> getTargetClass() { + return Boolean.class; + } + + } + + public static class StringToBoolean extends AbstractConverter<String, Boolean> { + + public Boolean convert(String obj) throws ConversionException { + return "TRUE".equals(obj.toUpperCase()); + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<Boolean> getTargetClass() { + return Boolean.class; + } + + } +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/BooleanConverters.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/BooleanConverters.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/BooleanConverters.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/ConversionException.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/ConversionException.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/ConversionException.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/ConversionException.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,37 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +/** ConversionException class. */ +@SuppressWarnings("serial") +public class ConversionException extends Exception { + + public ConversionException(String message, Throwable cause) { + super(message, cause); + } + + public ConversionException(String message) { + super(message); + } + + public ConversionException(Throwable cause) { + super(cause); + } + +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/ConversionException.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/ConversionException.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/ConversionException.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converter.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converter.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converter.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converter.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,60 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +/** Converter interface. + * + * @param <S> The source object type + * @param <T> The target object type + */ +public interface Converter<S, T> { + + /** Returns <code>true</code> if this object can convert + * <code>sourceClass</code> to <code>targetClass</code>. + * <p>Implementations can accomodate class hierarchy ranges + * by converting super classes or interfaces.</p> + * + * @param sourceClass The source <code>Class</code> + * @param targetClass The target <code>Class</code> + * @return <code>true</code> if this object can convert + * <code>sourceClass</code> to <code>targetClass</code>. + */ + public boolean canConvert(Class<?> sourceClass, Class<?> targetClass); + + /** Converts <code>obj</code> to <code>T</code>. + * + * @param obj The source <code>Object</code> to convert + * @return The converted <code>Object</code> + * @throws ConversionException + */ + public T convert(S obj) throws ConversionException; + + /** Returns the source <code>Class</code> for this converter. + * + * @return The source <code>Class</code> for this converter + */ + public Class<?> getSourceClass(); + + /** Returns the target <code>Class</code> for this converter. + * + * @return The target <code>Class</code> for this converter + */ + public Class<?> getTargetClass(); + +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converter.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converter.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converter.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,233 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +import java.math.BigDecimal; +import java.util.Collection; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.TimeZone; + +import javolution.util.FastMap; +import javolution.util.FastSet; + +import org.ofbiz.base.conversion.BooleanConverters.*; +import org.ofbiz.base.conversion.NumberConverters.*; +import org.ofbiz.base.conversion.DateTimeConverters.*; +import org.ofbiz.base.conversion.MiscConverters.*; +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.ObjectType; +import org.ofbiz.base.util.TimeDuration; + +import com.ibm.icu.util.Calendar; + +/** A <code>Converter</code> factory and repository. */ +public class Converters { + + protected static final String module = Converters.class.getName(); + protected static final String DELIMITER = "->"; + protected static final Map<String, Converter<?, ?>> converterMap = FastMap.newInstance(); + protected static final Set<String> noConversions = FastSet.newInstance(); + protected static final Converter<Object, Object> nullConverter = new NullConverter(); + + public static final Converter<BigDecimal, Double> BigDecimalToDouble = new BigDecimalToDouble(); + public static final Converter<BigDecimal, Float> BigDecimalToFloat = new BigDecimalToFloat(); + public static final Converter<BigDecimal, Integer> BigDecimalToInteger = new BigDecimalToInteger(); + public static final Converter<BigDecimal, List<BigDecimal>> BigDecimalToList = new BigDecimalToList(); + public static final Converter<BigDecimal, Long> BigDecimalToLong = new BigDecimalToLong(); + public static final Converter<BigDecimal, Set<BigDecimal>> BigDecimalToSet = new BigDecimalToSet(); + public static final LocalizedConverter<BigDecimal, String> BigDecimalToString = new BigDecimalToString(); + public static final Converter<Boolean, Integer> BooleanToInteger = new BooleanToInteger(); + public static final Converter<Boolean, String> BooleanToString = new BooleanToString(); + public static final Converter<Calendar, Long> CalendarToLong = new CalendarToLong(); + public static final Converter<Calendar, String> CalendarToString = new CalendarToString(); + public static final Converter<java.util.Date, Long> DateToLong = new DateToLong(); + public static final LocalizedConverter<java.util.Date, String> DateToString = new DateToString(); + public static final Converter<Double, BigDecimal> DoubleToBigDecimal = new DoubleToBigDecimal(); + public static final Converter<Double, Float> DoubleToFloat = new DoubleToFloat(); + public static final Converter<Double, Integer> DoubleToInteger = new DoubleToInteger(); + public static final Converter<Double, List<Double>> DoubleToList = new DoubleToList(); + public static final Converter<Double, Long> DoubleToLong = new DoubleToLong(); + public static final Converter<Double, Set<Double>> DoubleToSet = new DoubleToSet(); + public static final LocalizedConverter<Double, String> DoubleToString = new DoubleToString(); + public static final Converter<TimeDuration, String> DurationToString = new DurationToString(); + public static final Converter<Float, BigDecimal> FloatToBigDecimal = new FloatToBigDecimal(); + public static final Converter<Float, Double> FloatToDouble = new FloatToDouble(); + public static final Converter<Float, Integer> FloatToInteger = new FloatToInteger(); + public static final Converter<Float, List<Float>> FloatToList = new FloatToList(); + public static final Converter<Float, Long> FloatToLong = new FloatToLong(); + public static final Converter<Float, Set<Float>> FloatToSet = new FloatToSet(); + public static final LocalizedConverter<Float, String> FloatToString = new FloatToString(); + public static final Converter<Integer, BigDecimal> IntegerToBigDecimal = new IntegerToBigDecimal(); + public static final Converter<Integer, Boolean> IntegerToBoolean = new IntegerToBoolean(); + public static final Converter<Integer, Double> IntegerToDouble = new IntegerToDouble(); + public static final Converter<Integer, Float> IntegerToFloat = new IntegerToFloat(); + public static final Converter<Integer, List<Integer>> IntegerToList = new IntegerToList(); + public static final Converter<Integer, Long> IntegerToLong = new IntegerToLong(); + public static final Converter<Integer, Set<Integer>> IntegerToSet = new IntegerToSet(); + public static final LocalizedConverter<Integer, String> IntegerToString = new IntegerToString(); + public static final Converter<Locale, String> LocaleToString = new LocaleToString(); + public static final Converter<Long, BigDecimal> LongToBigDecimal = new LongToBigDecimal(); + public static final Converter<Long, Calendar> LongToCalendar = new LongToCalendar(); + public static final Converter<Long, Double> LongToDouble = new LongToDouble(); + public static final Converter<Long, Float> LongToFloat = new LongToFloat(); + public static final Converter<Long, Integer> LongToInteger = new LongToInteger(); + public static final Converter<Long, List<Long>> LongToList = new LongToList(); + public static final Converter<Long, Set<Long>> LongToSet = new LongToSet(); + public static final LocalizedConverter<Long, String> LongToString = new LongToString(); + public static final Converter<Number, java.util.Date> NumberToDate = new NumberToDate(); + public static final Converter<Number, TimeDuration> NumberToDuration = new NumberToDuration(); + public static final Converter<Number, java.sql.Date> NumberToSqlDate = new NumberToSqlDate(); + public static final Converter<Number, java.sql.Time> NumberToSqlTime = new NumberToSqlTime(); + public static final Converter<Number, java.sql.Timestamp> NumberToTimestamp = new NumberToTimestamp(); + public static final LocalizedConverter<java.sql.Date, String> SqlDateToString = new SqlDateToString(); + public static final LocalizedConverter<java.sql.Time, String> SqlTimeToString = new SqlTimeToString(); + public static final LocalizedConverter<String, BigDecimal> StringToBigDecimal = new StringToBigDecimal(); + public static final Converter<String, Boolean> StringToBoolean = new StringToBoolean(); + public static final LocalizedConverter<String, Calendar> StringToCalendar = new StringToCalendar(); + public static final LocalizedConverter<String, java.util.Date> StringToDate = new StringToDate(); + public static final LocalizedConverter<String, Double> StringToDouble = new StringToDouble(); + public static final Converter<String, TimeDuration> StringToDuration = new StringToDuration(); + public static final LocalizedConverter<String, Float> StringToFloat = new StringToFloat(); + public static final LocalizedConverter<String, Integer> StringToInteger = new StringToInteger(); + public static final Converter<String, Locale> StringToLocale = new StringToLocale(); + public static final LocalizedConverter<String, Long> StringToLong = new StringToLong(); + public static final LocalizedConverter<String, java.sql.Date> StringToSqlDate = new StringToSqlDate(); + public static final LocalizedConverter<String, java.sql.Time> StringToSqlTime = new StringToSqlTime(); + public static final LocalizedConverter<String, java.sql.Timestamp> StringToTimestamp = new StringToTimestamp(); + public static final Converter<String, TimeZone> StringToTimeZone = new StringToTimeZone(); + public static final Converter<TimeZone, String> TimeZoneToString = new TimeZoneToString(); + + /** Returns an appropriate <code>Converter</code> instance for + * <code>sourceClass</code> and <code>targetClass</code>. If no matching + * <code>Converter</code> is found, the method throws + * <code>ClassNotFoundException</code>. + * + * <p>This method is intended to be used when the source or + * target <code>Object</code> types are unknown at compile time. + * If the source and target <code>Object</code> types are known + * at compile time, then one of the "ready made" converters should be used.</p> + * + * @param sourceClass The object class to convert from + * @param targetClass The object class to convert to + * @return A matching <code>Converter</code> instance + * @throws ClassNotFoundException + */ + @SuppressWarnings("unchecked") + public static <S, T> Converter<S, T> getConverter(Class<S> sourceClass, Class<T> targetClass) throws ClassNotFoundException { + String key = sourceClass.getName().concat(DELIMITER).concat(targetClass.getName()); + Converter<?, ?> result = converterMap.get(key); + if (result == null) { + if (!noConversions.contains(key)) { + synchronized (converterMap) { + Collection<Converter<?, ?>> values = converterMap.values(); + for (Converter<?, ?> value : values) { + if (value.canConvert(sourceClass, targetClass)) { + converterMap.put(key, value); + return (Converter<S, T>) value; + } + } + noConversions.add(key); + Debug.logWarning("*** No converter found, converting from " + + sourceClass.getName() + " to " + targetClass.getName() + + ". Please report this message to the developer community so " + + "a suitable converter can be developed. ***", module); + } + } + throw new ClassNotFoundException("No converter found for " + key); + } + return (Converter<S, T>) result; + } + + /** Registers a <code>Converter</code> instance to be used by the + * {@link org.ofbiz.base.conversion.Converters#getConverter(Class, Class)} + * method. + * + * @param <S> The source object type + * @param <T> The target object type + * @param converter The <code>Converter</code> instance to register + */ + public static <S, T> void registerConverter(Converter<S, T> converter) { + String key = converter.getSourceClass().getName().concat(DELIMITER).concat(converter.getTargetClass().getName()); + synchronized (converterMap) { + converterMap.put(key, converter); + } + if (Debug.verboseOn()) { + Debug.logVerbose("Registered converter " + converter.getClass().getName(), module); + } + } + + protected static class NullConverter implements Converter<Object, Object> { + + public NullConverter() { + Converters.registerConverter(this); + } + + public boolean canConvert(Class<?> sourceClass, Class<?> targetClass) { + if (sourceClass.getName().equals(targetClass.getName()) || "java.lang.Object".equals(targetClass.getName())) { + return true; + } + return ObjectType.instanceOf(sourceClass, targetClass); + } + + public Object convert(Object obj) throws ConversionException { + return obj; + } + + public Class<?> getSourceClass() { + return Object.class; + } + + public Class<?> getTargetClass() { + return Object.class; + } + + } + +/* + public static String mapSize() { + return "Map size = " + converterMap.size(); + } + + public static String runPerformanceTest() { + @SuppressWarnings("unused") + Object obj = null; + try { + Converter<BigDecimal, Integer> converter = Converters.getConverter(BigDecimal.class, Integer.class); + obj = converter.convert(BigDecimal.ONE); + } catch (Exception e) {} + System.gc(); + long newStart = System.currentTimeMillis(); + try { + for (int i = 0; i < 1000000; i++) { + Converter<BigDecimal, Integer> converter = Converters.getConverter(BigDecimal.class, Integer.class); + obj = converter.convert(BigDecimal.ONE); + } + } catch (Exception e) { + Debug.logError(e, module); + } + long newStop = System.currentTimeMillis(); + Debug.logInfo("Elasped time = " + (newStop - newStart), module); + return "Elasped time = " + (newStop - newStart); + } + +*/ +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,475 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +import java.text.DateFormat; +import java.text.ParseException; +import java.util.Locale; +import java.util.TimeZone; + +import org.ofbiz.base.util.TimeDuration; +import org.ofbiz.base.util.UtilDateTime; + +import com.ibm.icu.util.Calendar; + +/** Date/time Converter classes. */ +public class DateTimeConverters { + + public static class CalendarToLong extends AbstractConverter<Calendar, Long> { + + public Long convert(Calendar obj) throws ConversionException { + return obj.getTimeInMillis(); + } + + public Class<Calendar> getSourceClass() { + return Calendar.class; + } + + public Class<Long> getTargetClass() { + return Long.class; + } + + } + + public static class CalendarToString extends AbstractConverter<Calendar, String> { + + public String convert(Calendar obj) throws ConversionException { + Locale locale = obj.getLocale(com.ibm.icu.util.ULocale.VALID_LOCALE).toLocale(); + TimeZone timeZone = UtilDateTime.toTimeZone(obj.getTimeZone().getID()); + DateFormat df = UtilDateTime.toDateTimeFormat(UtilDateTime.DATE_TIME_FORMAT, timeZone, locale); + return df.format(obj); + } + + public Class<Calendar> getSourceClass() { + return Calendar.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class DateToLong extends AbstractConverter<java.util.Date, Long> { + + public Long convert(java.util.Date obj) throws ConversionException { + return obj.getTime(); + } + + public Class<java.util.Date> getSourceClass() { + return java.util.Date.class; + } + + public Class<Long> getTargetClass() { + return Long.class; + } + + } + + public static class DateToString extends GenericLocalizedConverter<java.util.Date, String> { + + public String convert(java.util.Date obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + DateFormat df = null; + if (formatString == null || formatString.length() == 0) { + df = UtilDateTime.toDateTimeFormat(UtilDateTime.DATE_TIME_FORMAT, timeZone, locale); + } else { + df = UtilDateTime.toDateTimeFormat(formatString, timeZone, locale); + } + return df.format(obj); + } + + public Class<java.util.Date> getSourceClass() { + return java.util.Date.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class DurationToString extends AbstractConverter<TimeDuration, String> { + + public String convert(TimeDuration obj) throws ConversionException { + return obj.toString(); + } + + public Class<TimeDuration> getSourceClass() { + return TimeDuration.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static abstract class GenericLocalizedConverter<S, T> extends AbstractLocalizedConverter<S, T> { + + public T convert(S obj) throws ConversionException { + return convert(obj, Locale.getDefault(), TimeZone.getDefault(), null); + } + + public T convert(S obj, Locale locale, TimeZone timeZone) throws ConversionException { + return convert(obj, locale, timeZone, null); + } + + } + + public static class LongToCalendar extends AbstractLocalizedConverter<Long, Calendar> { + + public Calendar convert(Long obj) throws ConversionException { + return convert(obj, Locale.getDefault(), TimeZone.getDefault()); + } + + public Calendar convert(Long obj, Locale locale, TimeZone timeZone) throws ConversionException { + return UtilDateTime.toCalendar(new java.util.Date(obj.longValue()), timeZone, locale); + } + + public Calendar convert(Long obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + return convert(obj, Locale.getDefault(), TimeZone.getDefault()); + } + + public Class<Long> getSourceClass() { + return Long.class; + } + + public Class<Calendar> getTargetClass() { + return Calendar.class; + } + + } + + public static class NumberToDate extends AbstractConverter<Number, java.util.Date> { + + public java.util.Date convert(Number obj) throws ConversionException { + return new java.util.Date(obj.longValue()); + } + + public Class<Number> getSourceClass() { + return Number.class; + } + + public Class<java.util.Date> getTargetClass() { + return java.util.Date.class; + } + + } + + public static class NumberToDuration extends AbstractConverter<Number, TimeDuration> { + + public TimeDuration convert(Number obj) throws ConversionException { + return TimeDuration.fromNumber(obj); + } + + public Class<Number> getSourceClass() { + return Number.class; + } + + public Class<TimeDuration> getTargetClass() { + return TimeDuration.class; + } + + } + + public static class NumberToSqlDate extends AbstractConverter<Number, java.sql.Date> { + + public java.sql.Date convert(Number obj) throws ConversionException { + return new java.sql.Date(obj.longValue()); + } + + public Class<Number> getSourceClass() { + return Number.class; + } + + public Class<java.sql.Date> getTargetClass() { + return java.sql.Date.class; + } + + } + + public static class NumberToSqlTime extends AbstractConverter<Number, java.sql.Time> { + + public java.sql.Time convert(Number obj) throws ConversionException { + return new java.sql.Time(obj.longValue()); + } + + public Class<Number> getSourceClass() { + return Number.class; + } + + public Class<java.sql.Time> getTargetClass() { + return java.sql.Time.class; + } + + } + + public static class NumberToTimestamp extends AbstractConverter<Number, java.sql.Timestamp> { + + public java.sql.Timestamp convert(Number obj) throws ConversionException { + return new java.sql.Timestamp(obj.longValue()); + } + + public Class<Number> getSourceClass() { + return Number.class; + } + + public Class<java.sql.Timestamp> getTargetClass() { + return java.sql.Timestamp.class; + } + + } + + public static class SqlDateToString extends GenericLocalizedConverter<java.sql.Date, String> { + + public String convert(java.sql.Date obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + DateFormat df = null; + if (formatString == null || formatString.length() == 0) { + df = UtilDateTime.toDateFormat(UtilDateTime.DATE_FORMAT, timeZone, locale); + } else { + df = UtilDateTime.toDateFormat(formatString, timeZone, locale); + } + return df.format(obj); + } + + public Class<java.sql.Date> getSourceClass() { + return java.sql.Date.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class SqlTimeToString extends GenericLocalizedConverter<java.sql.Time, String> { + + public String convert(java.sql.Time obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + DateFormat df = null; + if (formatString == null || formatString.length() == 0) { + df = UtilDateTime.toTimeFormat(UtilDateTime.TIME_FORMAT, timeZone, locale); + } else { + df = UtilDateTime.toTimeFormat(formatString, timeZone, locale); + } + return df.format(obj); + } + + public Class<java.sql.Time> getSourceClass() { + return java.sql.Time.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class StringToCalendar extends AbstractLocalizedConverter<String, Calendar> { + + public Calendar convert(String obj) throws ConversionException { + return convert(obj, Locale.getDefault(), TimeZone.getDefault(), null); + } + + public Calendar convert(String obj, Locale locale, TimeZone timeZone) throws ConversionException { + return convert(obj, Locale.getDefault(), TimeZone.getDefault(), null); + } + + public Calendar convert(String obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + DateFormat df = null; + if (formatString == null || formatString.length() == 0) { + df = UtilDateTime.toDateTimeFormat(UtilDateTime.DATE_TIME_FORMAT, timeZone, locale); + } else { + df = UtilDateTime.toDateTimeFormat(formatString, timeZone, locale); + } + try { + java.util.Date date = df.parse(obj); + return UtilDateTime.toCalendar(date, timeZone, locale); + } catch (ParseException e) { + throw new ConversionException(e); + } + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<Calendar> getTargetClass() { + return Calendar.class; + } + + } + + public static class StringToDate extends GenericLocalizedConverter<String, java.util.Date> { + + public java.util.Date convert(String obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + DateFormat df = null; + if (formatString == null || formatString.length() == 0) { + df = UtilDateTime.toDateTimeFormat(UtilDateTime.DATE_TIME_FORMAT, timeZone, locale); + } else { + df = UtilDateTime.toDateTimeFormat(formatString, timeZone, locale); + } + try { + return df.parse(obj); + } catch (ParseException e) { + throw new ConversionException(e); + } + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<java.util.Date> getTargetClass() { + return java.util.Date.class; + } + + } + + public static class StringToDuration extends AbstractConverter<String, TimeDuration> { + + public TimeDuration convert(String obj) throws ConversionException { + return TimeDuration.parseDuration(obj); + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<TimeDuration> getTargetClass() { + return TimeDuration.class; + } + + } + + public static class StringToSqlDate extends GenericLocalizedConverter<String, java.sql.Date> { + + public java.sql.Date convert(String obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + DateFormat df = null; + if (formatString == null || formatString.length() == 0) { + df = UtilDateTime.toDateFormat(UtilDateTime.DATE_FORMAT, timeZone, locale); + } else { + df = UtilDateTime.toDateFormat(formatString, timeZone, locale); + } + try { + return new java.sql.Date(df.parse(obj).getTime()); + } catch (ParseException e) { + throw new ConversionException(e); + } + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<java.sql.Date> getTargetClass() { + return java.sql.Date.class; + } + + } + + public static class StringToSqlTime extends GenericLocalizedConverter<String, java.sql.Time> { + + public java.sql.Time convert(String obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + DateFormat df = null; + if (formatString == null || formatString.length() == 0) { + df = UtilDateTime.toTimeFormat(UtilDateTime.TIME_FORMAT, timeZone, locale); + } else { + df = UtilDateTime.toTimeFormat(formatString, timeZone, locale); + } + try { + return new java.sql.Time(df.parse(obj).getTime()); + } catch (ParseException e) { + throw new ConversionException(e); + } + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<java.sql.Time> getTargetClass() { + return java.sql.Time.class; + } + + } + + public static class StringToTimestamp extends GenericLocalizedConverter<String, java.sql.Timestamp> { + + public java.sql.Timestamp convert(String obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + DateFormat df = null; + if (formatString == null || formatString.length() == 0) { + df = UtilDateTime.toDateTimeFormat(UtilDateTime.DATE_TIME_FORMAT, timeZone, locale); + } else { + df = UtilDateTime.toDateTimeFormat(formatString, timeZone, locale); + } + try { + return new java.sql.Timestamp(df.parse(obj).getTime()); + } catch (ParseException e) { + throw new ConversionException(e); + } + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<java.sql.Timestamp> getTargetClass() { + return java.sql.Timestamp.class; + } + + } + + public static class StringToTimeZone extends AbstractConverter<String, TimeZone> { + + public TimeZone convert(String obj) throws ConversionException { + TimeZone tz = UtilDateTime.toTimeZone(obj); + if (tz != null) { + return tz; + } else { + throw new ConversionException("Could not convert " + obj + " to TimeZone: "); + } + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<TimeZone> getTargetClass() { + return TimeZone.class; + } + + } + + public static class TimeZoneToString extends AbstractConverter<TimeZone, String> { + + public String convert(TimeZone obj) throws ConversionException { + return obj.getID(); + } + + public Class<TimeZone> getSourceClass() { + return TimeZone.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/DateTimeConverters.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/LocalizedConverter.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/LocalizedConverter.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/LocalizedConverter.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/LocalizedConverter.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,48 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +import java.util.Locale; +import java.util.TimeZone; + +/** Localized converter interface. */ +public interface LocalizedConverter<S, T> extends Converter<S, T> { + + /** Converts <code>obj</code> to <code>T</code>. + * + * @param obj The source <code>Object</code> to convert + * @param locale The locale used for conversion - must not be <code>null</code> + * @param timeZone The time zone used for conversion - must not be <code>null</code> + * @return The converted <code>Object</code> + * @throws ConversionException + */ + public T convert(S obj, Locale locale, TimeZone timeZone) throws ConversionException; + + /** Converts <code>obj</code> to <code>T</code>. + * + * @param obj The source <code>Object</code> to convert + * @param locale The locale used for conversion - must not be <code>null</code> + * @param timeZone The time zone used for conversion - must not be <code>null</code> + * @param formatString Optional formatting string + * @return The converted <code>Object</code> + * @throws ConversionException + */ + public T convert(S obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException; + +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/LocalizedConverter.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/LocalizedConverter.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/LocalizedConverter.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,65 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +import java.util.Locale; + +import org.ofbiz.base.util.UtilMisc; + +/** Miscellaneous Converter classes. */ +public class MiscConverters { + + public static class LocaleToString extends AbstractConverter<Locale, String> { + + public String convert(Locale obj) throws ConversionException { + return obj.toString(); + } + + public Class<Locale> getSourceClass() { + return Locale.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class StringToLocale extends AbstractConverter<String, Locale> { + + public Locale convert(String obj) throws ConversionException { + Locale loc = UtilMisc.parseLocale(obj); + if (loc != null) { + return loc; + } else { + throw new ConversionException("Could not convert " + obj + " to Locale: "); + } + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<Locale> getTargetClass() { + return Locale.class; + } + + } + +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/MiscConverters.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/NumberConverters.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/NumberConverters.java?rev=833784&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/NumberConverters.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/NumberConverters.java Sun Nov 8 00:43:17 2009 @@ -0,0 +1,725 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.conversion; + +import java.math.BigDecimal; +import java.text.NumberFormat; +import java.text.ParseException; +import java.util.List; +import java.util.Locale; +import java.util.Set; +import java.util.TimeZone; + +import javolution.util.FastList; +import javolution.util.FastSet; + +/** Number Converter classes. */ +public class NumberConverters { + + public static abstract class AbstractToNumberConverter<S, T> extends AbstractUsesLocaleConverter<S, T> { + + protected Number fromString(String str, Locale locale) throws ConversionException { + NumberFormat nf = NumberFormat.getNumberInstance(locale); + try { + return nf.parse(str); + } catch (ParseException e) { + throw new ConversionException(e); + } + } + + } + + public static abstract class AbstractUsesLocaleConverter<S, T> extends AbstractLocalizedConverter<S, T> { + + public T convert(S obj) throws ConversionException { + return convert(obj, Locale.getDefault(), null); + } + + public T convert(S obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException { + return convert(obj, Locale.getDefault(), null); + } + + + } + + public static class BigDecimalToDouble extends AbstractConverter<BigDecimal, Double> { + + public Double convert(BigDecimal obj) throws ConversionException { + return Double.valueOf(obj.doubleValue()); + } + + public Class<BigDecimal> getSourceClass() { + return BigDecimal.class; + } + + public Class<Double> getTargetClass() { + return Double.class; + } + + } + + public static class BigDecimalToFloat extends AbstractConverter<BigDecimal, Float> { + + public Float convert(BigDecimal obj) throws ConversionException { + return Float.valueOf(obj.floatValue()); + } + + public Class<BigDecimal> getSourceClass() { + return BigDecimal.class; + } + + public Class<Float> getTargetClass() { + return Float.class; + } + + } + + public static class BigDecimalToInteger extends AbstractConverter<BigDecimal, Integer> { + + public Integer convert(BigDecimal obj) throws ConversionException { + return Integer.valueOf(obj.intValue()); + } + + public Class<BigDecimal> getSourceClass() { + return BigDecimal.class; + } + + public Class<Integer> getTargetClass() { + return Integer.class; + } + + } + + public static class BigDecimalToList extends AbstractConverter<BigDecimal, List<BigDecimal>> { + + public List<BigDecimal> convert(BigDecimal obj) throws ConversionException { + List<BigDecimal> tempList = FastList.newInstance(); + tempList.add(obj); + return tempList; + } + + public Class<BigDecimal> getSourceClass() { + return BigDecimal.class; + } + + public Class<?> getTargetClass() { + return List.class; + } + + } + + public static class BigDecimalToLong extends AbstractConverter<BigDecimal, Long> { + + public Long convert(BigDecimal obj) throws ConversionException { + return Long.valueOf(obj.longValue()); + } + + public Class<BigDecimal> getSourceClass() { + return BigDecimal.class; + } + + public Class<Long> getTargetClass() { + return Long.class; + } + + } + + public static class BigDecimalToSet extends AbstractConverter<BigDecimal, Set<BigDecimal>> { + + public Set<BigDecimal> convert(BigDecimal obj) throws ConversionException { + Set<BigDecimal> tempSet = FastSet.newInstance(); + tempSet.add(obj); + return tempSet; + } + + public Class<BigDecimal> getSourceClass() { + return BigDecimal.class; + } + + public Class<?> getTargetClass() { + return Set.class; + } + + } + + public static class BigDecimalToString extends AbstractUsesLocaleConverter<BigDecimal, String> { + + public String convert(BigDecimal obj, Locale locale, TimeZone timeZone) throws ConversionException { + NumberFormat nf = NumberFormat.getNumberInstance(locale); + return nf.format(obj.doubleValue()); + } + + public Class<BigDecimal> getSourceClass() { + return BigDecimal.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class DoubleToBigDecimal extends AbstractConverter<Double, BigDecimal> { + + public BigDecimal convert(Double obj) throws ConversionException { + return BigDecimal.valueOf(obj.doubleValue()); + } + + public Class<Double> getSourceClass() { + return Double.class; + } + + public Class<BigDecimal> getTargetClass() { + return BigDecimal.class; + } + + } + + public static class DoubleToFloat extends AbstractConverter<Double, Float> { + + public Float convert(Double obj) throws ConversionException { + return Float.valueOf(obj.floatValue()); + } + + public Class<Double> getSourceClass() { + return Double.class; + } + + public Class<Float> getTargetClass() { + return Float.class; + } + + } + + public static class DoubleToInteger extends AbstractConverter<Double, Integer> { + + public Integer convert(Double obj) throws ConversionException { + return Integer.valueOf(obj.intValue()); + } + + public Class<Double> getSourceClass() { + return Double.class; + } + + public Class<Integer> getTargetClass() { + return Integer.class; + } + + } + + public static class DoubleToList extends AbstractConverter<Double, List<Double>> { + + public List<Double> convert(Double obj) throws ConversionException { + List<Double> tempList = FastList.newInstance(); + tempList.add(obj); + return tempList; + } + + public Class<Double> getSourceClass() { + return Double.class; + } + + public Class<?> getTargetClass() { + return List.class; + } + + } + + public static class DoubleToLong extends AbstractConverter<Double, Long> { + + public Long convert(Double obj) throws ConversionException { + return Long.valueOf(obj.longValue()); + } + + public Class<Double> getSourceClass() { + return Double.class; + } + + public Class<Long> getTargetClass() { + return Long.class; + } + + } + + public static class DoubleToSet extends AbstractConverter<Double, Set<Double>> { + + public Set<Double> convert(Double obj) throws ConversionException { + Set<Double> tempSet = FastSet.newInstance(); + tempSet.add(obj); + return tempSet; + } + + public Class<Double> getSourceClass() { + return Double.class; + } + + public Class<?> getTargetClass() { + return Set.class; + } + + } + + public static class DoubleToString extends AbstractUsesLocaleConverter<Double, String> { + + public String convert(Double obj, Locale locale, TimeZone timeZone) throws ConversionException { + NumberFormat nf = NumberFormat.getNumberInstance(locale); + return nf.format(obj.doubleValue()); + } + + public Class<Double> getSourceClass() { + return Double.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class FloatToBigDecimal extends AbstractConverter<Float, BigDecimal> { + + public BigDecimal convert(Float obj) throws ConversionException { + return BigDecimal.valueOf(obj.doubleValue()); + } + + public Class<Float> getSourceClass() { + return Float.class; + } + + public Class<BigDecimal> getTargetClass() { + return BigDecimal.class; + } + + } + + public static class FloatToDouble extends AbstractConverter<Float, Double> { + + public Double convert(Float obj) throws ConversionException { + return Double.valueOf(obj.doubleValue()); + } + + public Class<Float> getSourceClass() { + return Float.class; + } + + public Class<Double> getTargetClass() { + return Double.class; + } + + } + + public static class FloatToInteger extends AbstractConverter<Float, Integer> { + + public Integer convert(Float obj) throws ConversionException { + return Integer.valueOf(obj.intValue()); + } + + public Class<Float> getSourceClass() { + return Float.class; + } + + public Class<Integer> getTargetClass() { + return Integer.class; + } + + } + + public static class FloatToList extends AbstractConverter<Float, List<Float>> { + + public List<Float> convert(Float obj) throws ConversionException { + List<Float> tempList = FastList.newInstance(); + tempList.add(obj); + return tempList; + } + + public Class<Float> getSourceClass() { + return Float.class; + } + + public Class<?> getTargetClass() { + return List.class; + } + + } + + public static class FloatToLong extends AbstractConverter<Float, Long> { + + public Long convert(Float obj) throws ConversionException { + return Long.valueOf(obj.longValue()); + } + + public Class<Float> getSourceClass() { + return Float.class; + } + + public Class<Long> getTargetClass() { + return Long.class; + } + + } + + public static class FloatToSet extends AbstractConverter<Float, Set<Float>> { + + public Set<Float> convert(Float obj) throws ConversionException { + Set<Float> tempSet = FastSet.newInstance(); + tempSet.add(obj); + return tempSet; + } + + public Class<Float> getSourceClass() { + return Float.class; + } + + public Class<?> getTargetClass() { + return Set.class; + } + + } + + public static class FloatToString extends AbstractUsesLocaleConverter<Float, String> { + + public String convert(Float obj, Locale locale, TimeZone timeZone) throws ConversionException { + NumberFormat nf = NumberFormat.getNumberInstance(locale); + return nf.format(obj.floatValue()); + } + + public Class<Float> getSourceClass() { + return Float.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class IntegerToBigDecimal extends AbstractConverter<Integer, BigDecimal> { + + public BigDecimal convert(Integer obj) throws ConversionException { + return BigDecimal.valueOf(obj.doubleValue()); + } + + public Class<Integer> getSourceClass() { + return Integer.class; + } + + public Class<BigDecimal> getTargetClass() { + return BigDecimal.class; + } + + } + + public static class IntegerToDouble extends AbstractConverter<Integer, Double> { + + public Double convert(Integer obj) throws ConversionException { + return Double.valueOf(obj.doubleValue()); + } + + public Class<Integer> getSourceClass() { + return Integer.class; + } + + public Class<Double> getTargetClass() { + return Double.class; + } + + } + + public static class IntegerToFloat extends AbstractConverter<Integer, Float> { + + public Float convert(Integer obj) throws ConversionException { + return Float.valueOf(obj.floatValue()); + } + + public Class<Integer> getSourceClass() { + return Integer.class; + } + + public Class<Float> getTargetClass() { + return Float.class; + } + + } + + public static class IntegerToList extends AbstractConverter<Integer, List<Integer>> { + + public List<Integer> convert(Integer obj) throws ConversionException { + List<Integer> tempList = FastList.newInstance(); + tempList.add(obj); + return tempList; + } + + public Class<Integer> getSourceClass() { + return Integer.class; + } + + public Class<?> getTargetClass() { + return List.class; + } + + } + + public static class IntegerToLong extends AbstractConverter<Integer, Long> { + + public Long convert(Integer obj) throws ConversionException { + return Long.valueOf(obj.longValue()); + } + + public Class<Integer> getSourceClass() { + return Integer.class; + } + + public Class<Long> getTargetClass() { + return Long.class; + } + + } + + public static class IntegerToSet extends AbstractConverter<Integer, Set<Integer>> { + + public Set<Integer> convert(Integer obj) throws ConversionException { + Set<Integer> tempSet = FastSet.newInstance(); + tempSet.add(obj); + return tempSet; + } + + public Class<Integer> getSourceClass() { + return Integer.class; + } + + public Class<?> getTargetClass() { + return Set.class; + } + + } + + public static class IntegerToString extends AbstractUsesLocaleConverter<Integer, String> { + + public String convert(Integer obj, Locale locale, TimeZone timeZone) throws ConversionException { + NumberFormat nf = NumberFormat.getNumberInstance(locale); + return nf.format(obj.intValue()); + } + + public Class<Integer> getSourceClass() { + return Integer.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class LongToBigDecimal extends AbstractConverter<Long, BigDecimal> { + + public BigDecimal convert(Long obj) throws ConversionException { + return BigDecimal.valueOf(obj.doubleValue()); + } + + public Class<Long> getSourceClass() { + return Long.class; + } + + public Class<BigDecimal> getTargetClass() { + return BigDecimal.class; + } + + } + + public static class LongToDouble extends AbstractConverter<Long, Double> { + + public Double convert(Long obj) throws ConversionException { + return Double.valueOf(obj.doubleValue()); + } + + public Class<Long> getSourceClass() { + return Long.class; + } + + public Class<Double> getTargetClass() { + return Double.class; + } + + } + + public static class LongToFloat extends AbstractConverter<Long, Float> { + + public Float convert(Long obj) throws ConversionException { + return Float.valueOf(obj.floatValue()); + } + + public Class<Long> getSourceClass() { + return Long.class; + } + + public Class<Float> getTargetClass() { + return Float.class; + } + + } + + public static class LongToInteger extends AbstractConverter<Long, Integer> { + + public Integer convert(Long obj) throws ConversionException { + return Integer.valueOf(obj.intValue()); + } + + public Class<Long> getSourceClass() { + return Long.class; + } + + public Class<Integer> getTargetClass() { + return Integer.class; + } + + } + + public static class LongToList extends AbstractConverter<Long, List<Long>> { + + public List<Long> convert(Long obj) throws ConversionException { + List<Long> tempList = FastList.newInstance(); + tempList.add(obj); + return tempList; + } + + public Class<Long> getSourceClass() { + return Long.class; + } + + public Class<?> getTargetClass() { + return List.class; + } + + } + + public static class LongToSet extends AbstractConverter<Long, Set<Long>> { + + public Set<Long> convert(Long obj) throws ConversionException { + Set<Long> tempSet = FastSet.newInstance(); + tempSet.add(obj); + return tempSet; + } + + public Class<Long> getSourceClass() { + return Long.class; + } + + public Class<?> getTargetClass() { + return Set.class; + } + + } + + public static class LongToString extends AbstractUsesLocaleConverter<Long, String> { + + public String convert(Long obj, Locale locale, TimeZone timeZone) throws ConversionException { + NumberFormat nf = NumberFormat.getNumberInstance(locale); + return nf.format(obj.longValue()); + } + + public Class<Long> getSourceClass() { + return Long.class; + } + + public Class<String> getTargetClass() { + return String.class; + } + + } + + public static class StringToBigDecimal extends AbstractToNumberConverter<String, BigDecimal> { + + public BigDecimal convert(String obj, Locale locale, TimeZone timeZone) throws ConversionException { + return BigDecimal.valueOf(this.fromString(obj, locale).doubleValue()); + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<BigDecimal> getTargetClass() { + return BigDecimal.class; + } + + } + + public static class StringToDouble extends AbstractToNumberConverter<String, Double> { + + public Double convert(String obj, Locale locale, TimeZone timeZone) throws ConversionException { + return this.fromString(obj, locale).doubleValue(); + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<Double> getTargetClass() { + return Double.class; + } + + } + + public static class StringToFloat extends AbstractToNumberConverter<String, Float> { + + public Float convert(String obj, Locale locale, TimeZone timeZone) throws ConversionException { + return this.fromString(obj, locale).floatValue(); + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<Float> getTargetClass() { + return Float.class; + } + + } + + public static class StringToInteger extends AbstractToNumberConverter<String, Integer> { + + public Integer convert(String obj, Locale locale, TimeZone timeZone) throws ConversionException { + return this.fromString(obj, locale).intValue(); + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<Integer> getTargetClass() { + return Integer.class; + } + + } + + public static class StringToLong extends AbstractToNumberConverter<String, Long> { + + public Long convert(String obj, Locale locale, TimeZone timeZone) throws ConversionException { + return this.fromString(obj, locale).longValue(); + } + + public Class<String> getSourceClass() { + return String.class; + } + + public Class<Long> getTargetClass() { + return Long.class; + } + + } +} Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/NumberConverters.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/NumberConverters.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/NumberConverters.java ------------------------------------------------------------------------------ svn:mime-type = text/plain |
Free forum by Nabble | Edit this page |