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); }