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<FieldMappingRuntime> {
|
|
private List<FieldMappingRuntime> fieldMappingRuntimes;
|
private Map<String, FieldMappingRuntime> fromMap;
|
private Map<String, FieldMappingRuntime> toMap;
|
|
|
public MappingsRuntime() {
|
fieldMappingRuntimes = new ArrayList<FieldMappingRuntime>();
|
fromMap = new HashMap<String, FieldMappingRuntime>();
|
toMap = new HashMap<String, FieldMappingRuntime>();
|
}
|
|
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<FieldMappingRuntime> 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<FieldMappingRuntime> iterator() {
|
return fieldMappingRuntimes.iterator();
|
}
|
|
}
|