package foundation.io.mapping; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import foundation.data.meta.field.Field; import foundation.data.meta.field.FieldsRuntime; import foundation.io.object.Titles; import foundation.util.ContentBuilder; public class MappingsRuntime implements Iterable { private List fieldMappingRuntimes; private Map fromMap; private Map toMap; public MappingsRuntime() { fieldMappingRuntimes = new ArrayList(); fromMap = new HashMap(); toMap = new HashMap(); } public static MappingsRuntime newInstance(FieldsRuntime fromFields, FieldsRuntime toFields) { MappingsRuntime mappingstRuntime = new MappingsRuntime(); FieldMappingRuntime mappingRuntime; Field toField; for (Field fromField : fromFields) { toField = toFields.get(fromField.getName()); if (toField == null) { continue; } mappingRuntime = new FieldMappingRuntime(null, fromField, toField, fromField.getIndexNo(), toField.getIndexNo()); mappingstRuntime.addItem(mappingRuntime); } return mappingstRuntime; } public void addItem(FieldMappingRuntime fieldMappingRuntime) { String fromName = fieldMappingRuntime.getFromName(); String toName = fieldMappingRuntime.getToName(); if (fromName == null || toName == null) { return; } fromName = fromName.toLowerCase(); toName = toName.toLowerCase(); fieldMappingRuntimes.add(fieldMappingRuntime); fromMap.put(fromName, fieldMappingRuntime); toMap.put(toName, fieldMappingRuntime); } public int[] getFromIndex() { int max = fieldMappingRuntimes.size(); int[] result = new int[max]; for (int i = 0; i < max; i++) { FieldMappingRuntime fieldMappingRuntime = fieldMappingRuntimes.get(i); result[i] = fieldMappingRuntime.getFromIndex(); } return result; } public int[] getToIndex() { int max = fieldMappingRuntimes.size(); int[] result = new int[max]; for (int i = 0; i < max; i++) { FieldMappingRuntime fieldMappingRuntime = fieldMappingRuntimes.get(i); result[i] = fieldMappingRuntime.getToIndex(); } return result; } public List getMappingRuntimeList() { return fieldMappingRuntimes; } public Titles getToTitles() { Titles result = new Titles(); for (FieldMappingRuntime mappingRuntime: fieldMappingRuntimes) { String toTitle = mappingRuntime.getToName(); int idx = mappingRuntime.getToIndex(); result.add(toTitle, idx); } return result; } public boolean containsFromField(String fieldName) { if (fieldName == null) { return false; } fieldName = fieldName.toLowerCase(); return fromMap.containsKey(fieldName); } public boolean containsToField(String fieldName) { if (fieldName == null) { return false; } fieldName = fieldName.toLowerCase(); return toMap.containsKey(fieldName); } public int size() { return fieldMappingRuntimes.size(); } public String getFromFieldNames(String division) { ContentBuilder result = new ContentBuilder(division); for (FieldMappingRuntime fieldMappingRuntime: fieldMappingRuntimes) { String fromName = fieldMappingRuntime.getFromName(); result.append(fromName); } return result.toString(); } public String getToFieldNames(String division, String... additional) { ContentBuilder result = new ContentBuilder(division); for (FieldMappingRuntime fieldMappingRuntime: fieldMappingRuntimes) { String toName = fieldMappingRuntime.getToName(); result.append(toName); } if (additional != null) { for (String fieldName: additional) { result.append(fieldName); } } return result.toString(); } @Override public Iterator iterator() { return fieldMappingRuntimes.iterator(); } }