/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.operation.imports; import net.codjo.persistent.Reference; import net.codjo.util.string.StringUtil; /** * Classe permettant d'importer un nombre. * * @author $Author: spinae $ * @version $Revision: 1.2 $ */ class NumberFieldImport extends FieldImport { private String decimalSeparator = null; private boolean isInteger = false; /** * Constructeur d�di� � l'import d'entiers. * * @param ref Description of Parameter * @param dbName Nom du champ DB de destination. */ NumberFieldImport(Reference ref, String dbName) { super(ref, dbName); } /** * Constructeur d�di� � l'import de r��ls. * * @param ref Description of Parameter * @param dbName Nom du champ DB de destination. * @param separator S�parateur de d�cimal. */ NumberFieldImport(Reference ref, String dbName, char separator) { super(ref, dbName); init(separator); } /** * Constructeur d�di� � l'import d'entiers (pour test). * * @param dbName Nom du champ DB de destination. */ NumberFieldImport(String dbName) { super(dbName); isInteger = true; } /** * Constructeur d�di� � l'import de r��ls (pour test). * * @param dbName Nom du champ DB de destination. * @param separator S�parateur de d�cimal. */ NumberFieldImport(String dbName, char separator) { super(dbName); init(separator); } /** * Retourne le separateur de decimal * * @return "." ou "," */ public String getDecimalSeparator() { return decimalSeparator; } /** * Retourne le type SQL de l'objet produit par convertFieldToSQL. * * @return java.sql.Types.INTEGER ou FLOAT. */ @Override public int getSQLType() { if (isInteger) { return java.sql.Types.INTEGER; } else { return java.sql.Types.NUMERIC; } } /** * Traduction du champ en objet Integer ou Float. * * @param field Champ � traduire. * * @return Le champ en format SQL. * * @throws BadFormatException Mauvais format de nombre */ @Override public Object translateField(String field) throws BadFormatException { if (field == null) { return null; } field = StringUtil.removeAllCharOccurrence(field, ' '); if ("".equals(field)) { return null; } try { if (isInteger) { return new Integer(field); } else { return parseDecimal(field); } } catch (java.lang.NumberFormatException ex) { throw new BadFormatException(this, ex.getMessage()); } } /** * Inialise. * * @param separator separator de decimal. * * @throws IllegalArgumentException TODO */ private void init(char separator) { if (separator != '.' && separator != ',') { throw new IllegalArgumentException("Separateur de d�cimal " + "non support� (" + separator + ")"); } decimalSeparator = "" + separator; isInteger = false; } /** * DOCUMENT ME! */ private Number parseDecimal(String field) throws BadFormatException { if (",".equals(decimalSeparator)) { if (field.contains(".")) { throw new BadFormatException(this, field); } field = field.replace(',', '.'); } return new java.math.BigDecimal(field); } }