/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.broadcast.common.columns; import net.codjo.sql.builder.FieldInfo; import java.sql.ResultSet; import java.sql.SQLException; /** * Classe de base pour les FileColumnGenerator. * * <p> Cette classe permet d'extraire d'un resultSet un champs et de le formater. </p> * * @author $Author: galaber $ * @version $Revision: 1.3 $ */ abstract class AbstractFileColumnGenerator implements FileColumnGenerator { private String destColumnName; private GeneratorExpression expression; private FieldInfo field; private Padder padder; private boolean isBreakField; /** * Constructeur de AbstractFileColumnGenerator * * @param destColumnName Le nom de la colonne destination * @param padder Le <code>Padder</code> responsable du padding * * @throws IllegalArgumentException field null */ protected AbstractFileColumnGenerator(FieldInfo field, String destColumnName, Padder padder, GeneratorExpression expression, boolean isBreakField) { if (field == null) { throw new IllegalArgumentException("Parametres invalides"); } this.expression = expression; this.field = field; this.destColumnName = destColumnName; this.padder = padder; this.isBreakField = isBreakField; if (expression != null) { expression.init(this); } } public final String proceedField(ResultSet rs) throws SQLException, GenerationException { if (expression == null) { return doPadding(format(rs.getObject(getFieldAlias()))); } else { return doPadding(expression.computeToString(rs.getObject(getFieldAlias()))); } } /** * Retourne le nom de la colonne destination. Si l'objet <code>padder</code> n'est pas null le nom est * formate. * * @return Le nom de la colonne destination */ public String buildColumnHeader() { if (padder == null) { return this.destColumnName; } return padder.doPadding(this.destColumnName); } public String getFieldAlias() { return this.field.getAlias(); } public FieldInfo getFieldInfo() { return this.field; } public boolean isBreakField() { return isBreakField; } @Override public String toString() { return "Column(" + getFieldInfo().getFullDBTableName() + "," + getClass() + ")"; } protected abstract String format(Object value); /** * Cette methode utilise l'objet <code>Padder</code> pour ajouter les caracteres de remplissage du champ a * formater. * * @param stringToPadding Le champ a padder * * @return Le champ formate * * @throws IllegalArgumentException la chaine de caracteres apres remplissage est trop grande par rapport * a la taille du champs en destination */ String doPadding(String stringToPadding) { if (padder == null) { return stringToPadding; } try { return padder.doPadding(stringToPadding); } catch (IllegalArgumentException ex) { throw new IllegalArgumentException("Padding du champs >" + destColumnName + "< (" + field.getAlias() + ")" + " en erreur : " + ex.getMessage()); } } }