001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.typeconverter;
016    
017    import jodd.typeconverter.ConvertBean;
018    import jodd.typeconverter.TypeConverter;
019    
020    import jodd.util.CsvUtil;
021    
022    /**
023     * @author Raymond Aug??
024     */
025    public class NumberArrayConverter implements TypeConverter<Number[]> {
026    
027            public NumberArrayConverter(ConvertBean convertBean) {
028                    _convertBean = convertBean;
029            }
030    
031            @Override
032            public Number[] convert(Object value) {
033                    if (value == null) {
034                            return null;
035                    }
036    
037                    Class<?> type = value.getClass();
038    
039                    if (type.isArray() == false) {
040                            if (type == String.class) {
041                                    String[] values = CsvUtil.toStringArray(value.toString());
042    
043                                    return convertArray(values);
044                            }
045    
046                            return new Number[] {_convertBean.toBigDecimal(value)};
047                    }
048    
049                    Class<?> componentType = type.getComponentType();
050    
051                    if (componentType.isPrimitive()) {
052                            if (type == boolean[].class) {
053                                    boolean[] values = (boolean[])value;
054                                    Number[] results = new Number[values.length];
055    
056                                    for (int i = 0; i < values.length; i++) {
057                                            results[i] = (values[i] == true ? 1 : 0);
058                                    }
059    
060                                    return results;
061                            }
062                            else if (type == byte[].class) {
063                                    byte[] values = (byte[])value;
064                                    Number[] results = new Number[values.length];
065    
066                                    for (int i = 0; i < values.length; i++) {
067                                            results[i] = values[i];
068                                    }
069    
070                                    return results;
071                            }
072                            else if (type == double[].class) {
073                                    double[] values = (double[])value;
074                                    Number[] results = new Number[values.length];
075    
076                                    for (int i = 0; i < values.length; i++) {
077                                            results[i] = values[i];
078                                    }
079    
080                                    return results;
081                            }
082                            else if (type == float[].class) {
083                                    float[] values = (float[])value;
084                                    Number[] results = new Number[values.length];
085    
086                                    for (int i = 0; i < values.length; i++) {
087                                            results[i] = values[i];
088                                    }
089    
090                                    return results;
091                            }
092                            else if (type == int[].class) {
093                                    int[] values = (int[])value;
094                                    Number[] results = new Number[values.length];
095    
096                                    for (int i = 0; i < values.length; i++) {
097                                            results[i] = values[i];
098                                    }
099    
100                                    return results;
101                            }
102                            else if (type == long[].class) {
103                                    long[] values = (long[])value;
104                                    Number[] results = new Number[values.length];
105    
106                                    for (int i = 0; i < values.length; i++) {
107                                            results[i] = values[i];
108                                    }
109    
110                                    return results;
111                            }
112                            else if (type == short[].class) {
113                                    short[] values = (short[])value;
114                                    Number[] results = new Number[values.length];
115    
116                                    for (int i = 0; i < values.length; i++) {
117                                            results[i] = values[i];
118                                    }
119    
120                                    return results;
121                            }
122                    }
123    
124                    return convertArray((Object[])value);
125            }
126    
127            protected Number[] convertArray(Object[] values) {
128                    Number[] results = new Number[values.length];
129    
130                    for (int i = 0; i < values.length; i++) {
131                            results[i] = _convertBean.toBigDecimal(values[i]);
132                    }
133    
134                    return results;
135            }
136    
137            protected ConvertBean _convertBean;
138    
139    }