001
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
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 }