|
@@ -1,26 +1,32 @@
|
|
package org.dbsyncer.parser.model;
|
|
package org.dbsyncer.parser.model;
|
|
|
|
|
|
import org.dbsyncer.common.util.CollectionUtils;
|
|
import org.dbsyncer.common.util.CollectionUtils;
|
|
|
|
+import org.dbsyncer.common.util.StringUtil;
|
|
import org.dbsyncer.connector.model.Field;
|
|
import org.dbsyncer.connector.model.Field;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
+import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
|
+import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
+import java.util.Set;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
public class Picker {
|
|
public class Picker {
|
|
|
|
|
|
- private List<Field> sourceFields;
|
|
|
|
- private List<Field> targetFields;
|
|
|
|
|
|
+ private List<Field> sourceFields = new ArrayList<>();
|
|
|
|
+ private List<Field> targetFields = new ArrayList<>();
|
|
|
|
|
|
public Picker(List<FieldMapping> fieldMapping) {
|
|
public Picker(List<FieldMapping> fieldMapping) {
|
|
- sourceFields = new ArrayList<>();
|
|
|
|
- targetFields = new ArrayList<>();
|
|
|
|
if (!CollectionUtils.isEmpty(fieldMapping)) {
|
|
if (!CollectionUtils.isEmpty(fieldMapping)) {
|
|
fieldMapping.forEach(m -> {
|
|
fieldMapping.forEach(m -> {
|
|
- sourceFields.add(m.getSource());
|
|
|
|
- targetFields.add(m.getTarget());
|
|
|
|
|
|
+ if (m.getSource() != null) {
|
|
|
|
+ sourceFields.add(m.getSource());
|
|
|
|
+ }
|
|
|
|
+ if (m.getTarget() != null) {
|
|
|
|
+ targetFields.add(m.getTarget());
|
|
|
|
+ }
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -45,25 +51,38 @@ public class Picker {
|
|
Field sField = null;
|
|
Field sField = null;
|
|
Field tField = null;
|
|
Field tField = null;
|
|
Object v = null;
|
|
Object v = null;
|
|
|
|
+ String tFieldName = null;
|
|
for (int k = 0; k < sFieldSize; k++) {
|
|
for (int k = 0; k < sFieldSize; k++) {
|
|
sField = sFields.get(k);
|
|
sField = sFields.get(k);
|
|
tField = tFields.get(k);
|
|
tField = tFields.get(k);
|
|
if (null != sField && null != tField) {
|
|
if (null != sField && null != tField) {
|
|
v = source.get(sField.isUnmodifiabled() ? sField.getLabelName() : sField.getName());
|
|
v = source.get(sField.isUnmodifiabled() ? sField.getLabelName() : sField.getName());
|
|
- target.put(tField.getName(), v);
|
|
|
|
|
|
+ tFieldName = tField.getName();
|
|
|
|
+ // 映射值
|
|
|
|
+ if (!target.containsKey(tFieldName)) {
|
|
|
|
+ target.put(tFieldName, v);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ // 合并值
|
|
|
|
+ String mergedValue = new StringBuilder(StringUtil.toString(target.get(tFieldName))).append(StringUtil.toString(v)).toString();
|
|
|
|
+ target.put(tFieldName, mergedValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public List<Field> getSourceFields() {
|
|
|
|
- return sourceFields.stream().filter(f -> null != f).collect(Collectors.toList());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public List<Field> getTargetFields() {
|
|
public List<Field> getTargetFields() {
|
|
- return targetFields.stream().filter(f -> null != f).collect(Collectors.toList());
|
|
|
|
|
|
+ List<Field> fields = new ArrayList<>();
|
|
|
|
+ Set<String> keys = new HashSet<>();
|
|
|
|
+ targetFields.forEach(f -> {
|
|
|
|
+ if (!keys.contains(f.getName())) {
|
|
|
|
+ fields.add(f);
|
|
|
|
+ keys.add(f.getName());
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return Collections.unmodifiableList(fields);
|
|
}
|
|
}
|
|
|
|
|
|
public Map<String, Field> getSourceFieldMap() {
|
|
public Map<String, Field> getSourceFieldMap() {
|
|
- return getSourceFields().stream().collect(Collectors.toMap(Field::getName, f -> f, (k1, k2) -> k1));
|
|
|
|
|
|
+ return sourceFields.stream().filter(f -> null != f).collect(Collectors.toMap(Field::getName, f -> f, (k1, k2) -> k1));
|
|
}
|
|
}
|
|
}
|
|
}
|