package foundation.data.meta.field;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import foundation.data.entity.DictionaryTranslator;
|
import foundation.json.IJSONWriter;
|
import foundation.translator.ITranslator;
|
import foundation.util.Util;
|
|
public abstract class FieldWriter {
|
|
protected static Logger logger;
|
protected String fieldName;
|
protected int index;
|
protected ITranslator translator;
|
|
|
static {
|
logger = LogManager.getLogger(FieldWriter.class);
|
}
|
|
public FieldWriter(String fieldName, int index, ITranslator translator) {
|
this.fieldName = fieldName;
|
this.index = index;
|
this.translator = translator;
|
}
|
|
public static FieldWriter newInstance(String fieldName, int index, ITranslator translator, FieldExtension extension) {
|
//1. 根据原始值输出的 Writer
|
if (extension == null) {
|
return new FieldValueWriter(fieldName, index, translator);
|
}
|
|
String dictionary = extension.getTranslator();
|
if (Util.isEmpty(dictionary)) {
|
return new FieldValueWriter(fieldName, index, translator);
|
}
|
|
//2. 不输出内容的 Writer
|
if ("ignore".equalsIgnoreCase(dictionary)) {
|
return new FieldIgnoreWriter(fieldName, index, translator);
|
}
|
|
//3. 需要进行字典翻译的 Writer()
|
dictionary = dictionary.replace(";", ",").replace(";", ",").replace(",", ",");
|
String[] segments = dictionary.split(",");
|
|
DictionaryTranslator dictionaryTranslator = DictionaryTranslator.getInstance(segments[0].trim());
|
if (dictionaryTranslator == null) {
|
logger.error("error load field writer: {}", segments[0]);
|
return new FieldValueWriter(fieldName, index, translator);
|
}
|
|
FieldWriter writer = new FieldTranslateWriter(fieldName, index, translator, segments[1].trim(), dictionaryTranslator, segments.length > 2);
|
return writer;
|
}
|
|
public abstract void write(Object[] dataArray, IJSONWriter writer, boolean writeNull);
|
|
public abstract boolean hasDictionaryTranslator();
|
|
public abstract boolean includeOrighinal();
|
|
public abstract Field getTargetField();
|
|
public abstract void setActive(boolean value);
|
|
public abstract Object getValue(Object value);
|
|
}
|