/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.broadcast.common.computed;
import net.codjo.variable.TemplateInterpreter;
import net.codjo.variable.UnknownVariableException;
/**
* Classe de base pour les objets <code>ComputedField</code>.
*/
public abstract class AbstractComputedField implements ComputedField {
private String name;
private String sqlDefinition;
private int sqlType;
/**
* @param name Le nom de la colonne
* @param sqlType Le type SQL de la colonne
* @param sqlDefinition La definition SQL de la colonne
*/
protected AbstractComputedField(String name, int sqlType, String sqlDefinition) {
if (name == null || sqlDefinition == null) {
throw new IllegalArgumentException("Parametres invalides");
}
this.name = name;
this.sqlType = sqlType;
this.sqlDefinition = sqlDefinition;
}
public String getName() {
return name;
}
public String getSqlDefinition() {
return sqlDefinition;
}
public int getSqlType() {
return sqlType;
}
protected final String appendWarning(String normalCondition, String warningMessage) {
return appendWarning(normalCondition, warningMessage, null);
}
protected final String appendWarning(String normalCondition, String warningMessage, String messagePrefix) {
String template = ", $warningsField$ ="
+ " case when NOT ($normalCondition$)"
+ " then NVL($warningsField$, $messagePrefix$) || ' - $warningMessage$'"
+ " else null"
+ " end ";
TemplateInterpreter interpreter = new TemplateInterpreter();
interpreter.add("warningsField", "comp." + WARNINGS);
interpreter.add("normalCondition", normalCondition);
interpreter.add("warningMessage", warningMessage);
interpreter.add("messagePrefix", (messagePrefix == null) ? "null" : "'" + messagePrefix + "'");
try {
return interpreter.evaluate(template);
}
catch (UnknownVariableException ex) {
throw new IllegalArgumentException("The sql template >" + template
+ "< contains unknown variables : " + ex.getMessage());
}
}
@Override
public String toString() {
return getName();
}
}