package foundation.data.meta.field; import java.util.Iterator; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import foundation.translator.ITranslator; import foundation.translator.ValueType; import foundation.util.MapList; public class FieldsRuntime implements Iterable { protected static Logger logger; protected MapList fieldList; protected String[] names; protected String[] lowerNames; protected ITranslator[] valueTranslators; static { logger = LogManager.getLogger(FieldsRuntime.class); } public FieldsRuntime() { fieldList = new MapList(); } public int getFieldCount() { return fieldList.size(); } public Iterator iterator() { return fieldList.iterator(); } public List getFields() { return fieldList.getItemList(); } public Field get(String name) { if (name == null) return null; return fieldList.get(name); } public Field get(int idx) { return fieldList.get(idx); } public ValueType getValueType(int idx) { Field field = fieldList.get(idx); return field.getType(); } public ValueType[] getValueTypes() { int size = fieldList.size(); ValueType[] result = new ValueType[size]; for (int i = 0; i < size; i++) { ValueType type = getValueType(i); result[i] = type; } return result; } public FieldWriter getWriter(int idx) { Field field = fieldList.get(idx); return field.getWriter(); } public FieldWriter[] getWriters() { int size = fieldList.size(); FieldWriter[] result = new FieldWriter[size]; for (int i = 0; i < size; i++) { FieldWriter writer = getWriter(i); result[i] = writer; } return result; } public Integer getIndex(String fieldName) { if (fieldName == null) { return null; } Field field = fieldList.get(fieldName); if (field == null) { return null; } return field.getIndexNo(); } public String[] getLowerNames() { return lowerNames; } public String[] getFieldNames() { return names; } public boolean contains(String name) { if (name == null) { return false; } return fieldList.contains(name); } public ITranslator getTranslator(int idx) { return valueTranslators[idx]; } public ITranslator getValueTranslator(String name) { if (name == null) { return null; } Field field = fieldList.get(name); if (field == null) { return null; } return valueTranslators[field.getIndexNo()]; } public int size() { return fieldList.size(); } public MapList getFieldList() { return fieldList; } public boolean isEmpty() { return fieldList.isEmpty(); } }