/*
* Created on 12/01/2006
*
* Window - Preferences - Java - Code Style - Code Templates
*/
package br.com.citframework.util.converter;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Time;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.SqlTimeConverter;
import br.com.citframework.util.Reflexao;
/**
* @author ney
*
*/
public final class ConverterUtils {
private ConverterUtils() {}
private static final BigDecimalConverter BIG_DECIMAL_CONVERTER = new BigDecimalConverter();
private static final DoubleConverter DOUBLE_CONVERTER = new DoubleConverter();
private static final IntegerConverter INTEGER_CONVERTER = new IntegerConverter();
private static final LongConverter LONG_CONVERTER = new LongConverter();
private static final SqlDateConverter SQL_DATE_CONVERTER = new SqlDateConverter();
private static final SqlTimeConverter SQL_TIME_CONVERTER = new SqlTimeConverter();
private static final TimeConverter TIME_CONVERTER = new TimeConverter();
public static void copyFromStringObject(final Object strObject, final Object dest) throws Exception {
if (strObject == null || dest == null) {
return;
}
final Map<String, String> map = mapProperties(strObject, dest);
ConvertUtils.register(BIG_DECIMAL_CONVERTER, BigDecimal.class);
ConvertUtils.register(DOUBLE_CONVERTER, Double.class);
ConvertUtils.register(INTEGER_CONVERTER, Integer.class);
ConvertUtils.register(LONG_CONVERTER, Long.class);
ConvertUtils.register(SQL_DATE_CONVERTER, Date.class);
ConvertUtils.register(SQL_TIME_CONVERTER, Time.class);
ConvertUtils.register(TIME_CONVERTER, Time.class);
BeanUtils.populate(dest, map);
}
public static void copyToStringObject(final Object strObject, final Object src) throws Exception {
if (strObject == null || src == null) {
return;
}
final List lista = Reflexao.getCommonPropertyNames(strObject, src);
final Iterator it = lista.iterator();
while (it.hasNext()) {
final String atribName = it.next().toString();
final Object obj = Reflexao.getPropertyValue(src, atribName);
if (obj != null) {
Reflexao.setPropertyValue(strObject, atribName, obj.toString());
}
}
}
private static Map<String, String> mapProperties(final Object strObject, final Object dest) throws Exception {
final List lista = Reflexao.getCommonPropertyNames(strObject, dest);
final Iterator it = lista.iterator();
final Map<String, String> map = new HashMap<>();
while (it.hasNext()) {
final String atribName = it.next().toString();
final Object obj = Reflexao.getPropertyValue(strObject, atribName);
if (obj != null) {
map.put(atribName, obj.toString());
}
}
return map;
}
// aplica a mascara com # em String com valores num�ricos
public static String aplicaMascara(String numero, final String mascara) {
if (possuiMascara(numero)) {
return numero;
}
numero = ajustaValor(numero, mascara, '#');
String result = "";
int j = 0;
for (int i = 0; i < numero.length(); i++) {
if (mascara.charAt(j) == '#') {
result += numero.charAt(i);
j++;
} else {
char tmp = mascara.charAt(j);
while (tmp != '#') {
result += mascara.charAt(j);
j++;
tmp = mascara.charAt(j);
}
result += numero.charAt(i);
j++;
}
}
return result;
}
// Retira mascara de String com valores num�ricos
public static String retiraMascara(final String valor) {
if (valor == null || valor.length() == 0) {
return valor;
}
String resp = "";
for (int i = 0; i < valor.length(); i++) {
final char tmp = valor.charAt(i);
if (tmp == '0' || tmp == '1' || tmp == '2' || tmp == '3' || tmp == '4' || tmp == '5' || tmp == '6' || tmp == '7' || tmp == '8' || tmp == '9') {
resp += tmp;
}
}
return resp;
}
// Verifica se String com valores numericos possui mascara
public static boolean possuiMascara(final String valor) {
if (valor == null || valor.length() == 0) {
return false;
}
for (int i = 0; i < valor.length(); i++) {
final char tmp = valor.charAt(i);
if (tmp != '0' && tmp != '1' && tmp != '2' && tmp != '3' && tmp != '4' && tmp != '5' && tmp != '6' && tmp != '7' && tmp != '8' && tmp != '9' && tmp != '.'
&& tmp != ',' && tmp != 'E') {
return true;
}
}
return false;
}
// Transforma uma String Com mascara em double
public static final Double strFormatToDouble(final String value) {
System.out.println("###########################Converssor");
if (value == null || value.toString().length() == 0) {
return null;
}
if (ConverterUtils.possuiMascara(value.toString())) {
System.out.println("-----------Possui Mascara");
final String tmp = ConverterUtils.retiraMascara(value.toString());
System.out.println("-----------Valor sem mascara" + tmp);
if (tmp == null || tmp.trim().length() == 0) {
return null;
}
final Double result = new Double(tmp);
System.out.println("-----------Valor convertido" + result);
return result;
}
System.out.println("-----------N�o possui mascara");
if (value.toString().indexOf(",") > -1) {
StringBuilder str = new StringBuilder(value.toString());
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '.') {
str = str.deleteCharAt(i);
}
}
final String tmp = str.toString().replace(',', '.');
Double result;
try {
result = new Double(tmp);
} catch (final NumberFormatException e) {
throw new ConversionException("Formato num�rico inv�lido. " + value);
}
return result;
} else {
return new Double(value.toString());
}
}
// Transforma uma String Com mascara em BigDecimal
public static final Long strFormatToLong(final String value) {
System.out.println("###########################Converssor");
if (value == null || value.toString().length() == 0) {
return null;
}
if (ConverterUtils.possuiMascara(value.toString())) {
System.out.println("-----------Possui Mascara");
final String tmp = ConverterUtils.retiraMascara(value.toString());
System.out.println("-----------Valor sem mascara" + tmp);
if (tmp == null || tmp.trim().length() == 0) {
return null;
}
final Long result = new Long(tmp);
System.out.println("-----------Valor convertido" + result);
return result;
}
System.out.println("-----------N�o possui mascara");
if (value.toString().indexOf(",") > -1) {
StringBuilder str = new StringBuilder(value.toString());
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '.') {
str = str.deleteCharAt(i);
}
}
final String tmp = str.toString().replace(',', '.');
Long result;
try {
result = new Long(tmp);
} catch (final NumberFormatException e) {
throw new ConversionException("Formato num�rico inv�lido. " + value);
}
return result;
} else {
return new Long(value.toString());
}
}
// Transforma uma String Com mascara em BigDecimal
public static final BigDecimal strFormatToBigDecimal(final String value) {
System.out.println("###########################Converssor");
if (value == null || value.toString().length() == 0) {
return null;
}
if (ConverterUtils.possuiMascara(value.toString())) {
System.out.println("-----------Possui Mascara");
final String tmp = ConverterUtils.retiraMascara(value.toString());
System.out.println("-----------Valor sem mascara" + tmp);
if (tmp == null || tmp.trim().length() == 0) {
return null;
}
final BigDecimal result = new BigDecimal(tmp);
System.out.println("-----------Valor convertido" + result);
return result;
}
System.out.println("-----------N�o possui mascara");
if (value.toString().indexOf(",") > -1) {
StringBuilder str = new StringBuilder(value.toString());
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '.') {
str = str.deleteCharAt(i);
}
}
final String tmp = str.toString().replace(',', '.');
BigDecimal result;
try {
result = new BigDecimal(tmp);
} catch (final NumberFormatException e) {
throw new ConversionException("Formato num�rico inv�lido. " + value);
}
return result;
} else {
return new BigDecimal(value.toString());
}
}
// Retorna a quantidade de marcadores existentes na mascara
private static int contaMarcador(final String mascara, final char marcador) {
int result = 0;
for (int i = 0; i < mascara.length(); i++) {
if (mascara.charAt(i) == marcador) {
result++;
}
}
return result;
}
// Insere 0 a direita do valor a ser mascarado
private static String ajustaValor(final String numero, final String mascara, final char marcador) {
if (contaMarcador(mascara, marcador) > numero.length()) {
final int sobra = contaMarcador(mascara, marcador) - numero.length();
String result = numero;
for (int i = 0; i < sobra; i++) {
result = "0" + result;
}
return result;
}
return numero;
}
}