/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.typeconverter; import jodd.typeconverter.ConvertBean; import jodd.typeconverter.TypeConverter; import jodd.util.CsvUtil; /** * @author Raymond Augé */ public class NumberArrayConverter implements TypeConverter<Number[]> { public NumberArrayConverter(ConvertBean convertBean) { this.convertBean = convertBean; } @Override public Number[] convert(Object value) { if (value == null) { return null; } Class<?> type = value.getClass(); if (type.isArray() == false) { if (type == String.class) { String[] values = CsvUtil.toStringArray(value.toString()); return convertArray(values); } return new Number[] {convertBean.toBigDecimal(value)}; } Class<?> componentType = type.getComponentType(); if (componentType.isPrimitive()) { if (type == boolean[].class) { boolean[] values = (boolean[])value; Number[] results = new Number[values.length]; for (int i = 0; i < values.length; i++) { results[i] = values[i] == true ? 1 : 0; } return results; } else if (type == byte[].class) { byte[] values = (byte[])value; Number[] results = new Number[values.length]; for (int i = 0; i < values.length; i++) { results[i] = values[i]; } return results; } else if (type == double[].class) { double[] values = (double[])value; Number[] results = new Number[values.length]; for (int i = 0; i < values.length; i++) { results[i] = values[i]; } return results; } else if (type == float[].class) { float[] values = (float[])value; Number[] results = new Number[values.length]; for (int i = 0; i < values.length; i++) { results[i] = values[i]; } return results; } else if (type == int[].class) { int[] values = (int[])value; Number[] results = new Number[values.length]; for (int i = 0; i < values.length; i++) { results[i] = values[i]; } return results; } else if (type == long[].class) { long[] values = (long[])value; Number[] results = new Number[values.length]; for (int i = 0; i < values.length; i++) { results[i] = values[i]; } return results; } else if (type == short[].class) { short[] values = (short[])value; Number[] results = new Number[values.length]; for (int i = 0; i < values.length; i++) { results[i] = values[i]; } return results; } } return convertArray((Object[])value); } protected Number[] convertArray(Object[] values) { Number[] results = new Number[values.length]; for (int i = 0; i < values.length; i++) { results[i] = convertBean.toBigDecimal(values[i]); } return results; } protected ConvertBean convertBean; }