mirror of
https://github.com/alibaba/DataX.git
synced 2025-05-02 06:50:35 +08:00
解析数据时对null提前特判;反序列数组代码简化
This commit is contained in:
parent
88daf5c270
commit
4c260c4e12
@ -2,14 +2,17 @@ package com.alibaba.datax.plugin.writer.neo4jwriter.adapter;
|
|||||||
|
|
||||||
|
|
||||||
import com.alibaba.datax.common.element.Column;
|
import com.alibaba.datax.common.element.Column;
|
||||||
import com.alibaba.datax.plugin.writer.neo4jwriter.config.Neo4jField;
|
import com.alibaba.datax.plugin.writer.neo4jwriter.config.Neo4jProperty;
|
||||||
import com.alibaba.datax.plugin.writer.neo4jwriter.element.FieldType;
|
import com.alibaba.datax.plugin.writer.neo4jwriter.element.PropertyType;
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import org.neo4j.driver.Value;
|
import org.neo4j.driver.Value;
|
||||||
import org.neo4j.driver.Values;
|
import org.neo4j.driver.Values;
|
||||||
import org.neo4j.driver.internal.value.NullValue;
|
import org.neo4j.driver.internal.value.NullValue;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,13 +21,19 @@ import java.util.function.Function;
|
|||||||
public class ValueAdapter {
|
public class ValueAdapter {
|
||||||
|
|
||||||
|
|
||||||
public static Value column2Value(final Column column, final Neo4jField neo4jField) {
|
public static Value column2Value(final Column column, final Neo4jProperty neo4JProperty) {
|
||||||
FieldType type = neo4jField.getFieldType();
|
|
||||||
|
String typeStr = neo4JProperty.getType();
|
||||||
|
PropertyType type = PropertyType.fromStrIgnoreCase(typeStr);
|
||||||
|
if (column.asString() == null) {
|
||||||
|
return NullValue.NULL;
|
||||||
|
}
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case NULL:
|
case NULL:
|
||||||
return NullValue.NULL;
|
return NullValue.NULL;
|
||||||
case MAP:
|
case MAP:
|
||||||
return Values.value(JSON.parseObject(column.asString(),Map.class));
|
return Values.value(JSON.parseObject(column.asString(), Map.class));
|
||||||
case BOOLEAN:
|
case BOOLEAN:
|
||||||
return Values.value(column.asBoolean());
|
return Values.value(column.asBoolean());
|
||||||
case STRING:
|
case STRING:
|
||||||
@ -38,30 +47,30 @@ public class ValueAdapter {
|
|||||||
case DOUBLE:
|
case DOUBLE:
|
||||||
return Values.value(column.asDouble());
|
return Values.value(column.asDouble());
|
||||||
case BYTE_ARRAY:
|
case BYTE_ARRAY:
|
||||||
return Values.value(parseArrayType(neo4jField, column.asString(), Byte::valueOf));
|
return Values.value(parseArrayType(neo4JProperty, column.asString(), Byte::valueOf));
|
||||||
case CHAR_ARRAY:
|
case CHAR_ARRAY:
|
||||||
return Values.value(parseArrayType(neo4jField, column.asString(), (s) -> s.charAt(0)));
|
return Values.value(parseArrayType(neo4JProperty, column.asString(), (s) -> s.charAt(0)));
|
||||||
case BOOLEAN_ARRAY:
|
case BOOLEAN_ARRAY:
|
||||||
return Values.value(parseArrayType(neo4jField, column.asString(), Boolean::valueOf));
|
return Values.value(parseArrayType(neo4JProperty, column.asString(), Boolean::valueOf));
|
||||||
case STRING_ARRAY:
|
case STRING_ARRAY:
|
||||||
case Object_ARRAY:
|
case Object_ARRAY:
|
||||||
case LIST:
|
case LIST:
|
||||||
return Values.value(parseArrayType(neo4jField, column.asString(), Function.identity()));
|
return Values.value(parseArrayType(neo4JProperty, column.asString(), Function.identity()));
|
||||||
case LONG_ARRAY:
|
case LONG_ARRAY:
|
||||||
return Values.value(parseArrayType(neo4jField, column.asString(), Long::valueOf));
|
return Values.value(parseArrayType(neo4JProperty, column.asString(), Long::valueOf));
|
||||||
case INT_ARRAY:
|
case INT_ARRAY:
|
||||||
return Values.value(parseArrayType(neo4jField, column.asString(), Integer::valueOf));
|
return Values.value(parseArrayType(neo4JProperty, column.asString(), Integer::valueOf));
|
||||||
case SHORT_ARRAY:
|
case SHORT_ARRAY:
|
||||||
return Values.value(parseArrayType(neo4jField, column.asString(), Short::valueOf));
|
return Values.value(parseArrayType(neo4JProperty, column.asString(), Short::valueOf));
|
||||||
case DOUBLE_ARRAY:
|
case DOUBLE_ARRAY:
|
||||||
case FLOAT_ARRAY:
|
case FLOAT_ARRAY:
|
||||||
return Values.value(parseArrayType(neo4jField, column.asString(), Double::valueOf));
|
return Values.value(parseArrayType(neo4JProperty, column.asString(), Double::valueOf));
|
||||||
case LOCAL_DATE:
|
case LOCAL_DATE:
|
||||||
return Values.value(DateAdapter.localDate(column.asString(), neo4jField));
|
return Values.value(DateAdapter.localDate(column.asString(), neo4JProperty));
|
||||||
case LOCAL_TIME:
|
case LOCAL_TIME:
|
||||||
return Values.value(DateAdapter.localTime(column.asString(),neo4jField));
|
return Values.value(DateAdapter.localTime(column.asString(), neo4JProperty));
|
||||||
case LOCAL_DATE_TIME:
|
case LOCAL_DATE_TIME:
|
||||||
return Values.value(DateAdapter.localDateTime(column.asString(),neo4jField));
|
return Values.value(DateAdapter.localDateTime(column.asString(), neo4JProperty));
|
||||||
default:
|
default:
|
||||||
return Values.value(column.getRawData());
|
return Values.value(column.getRawData());
|
||||||
|
|
||||||
@ -69,46 +78,18 @@ public class ValueAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static <R> List<R> parseArrayType(final Neo4jField neo4jField,
|
private static <R> List<R> parseArrayType(final Neo4jProperty neo4JProperty,
|
||||||
final String strValue,
|
final String strValue,
|
||||||
final Function<String, R> convertFunc) {
|
final Function<String, R> convertFunc) {
|
||||||
if (null == strValue || "".equals(strValue)) {
|
if (null == strValue || "".equals(strValue)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
String trimStr = trimString(strValue, neo4jField.getArrayTrimOrDefault());
|
String split = neo4JProperty.getSplitOrDefault();
|
||||||
if ("".equals(trimStr)) {
|
String[] strArr = strValue.split(split);
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
String[] strArr = trimStr.split(neo4jField.getSplitOrDefault());
|
|
||||||
List<R> ans = new ArrayList<>();
|
List<R> ans = new ArrayList<>();
|
||||||
for (String s : strArr) {
|
for (String s : strArr) {
|
||||||
ans.add(convertFunc.apply(s));
|
ans.add(convertFunc.apply(s));
|
||||||
}
|
}
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String trimString(String strValue, List<Character> trimChars) {
|
|
||||||
|
|
||||||
Set<Character> characters = new HashSet<>(trimChars);
|
|
||||||
char[] chars = strValue.toCharArray();
|
|
||||||
int i = 0;
|
|
||||||
int j = chars.length - 1;
|
|
||||||
|
|
||||||
while (i <= chars.length - 1 && characters.contains(chars[i])) {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
while (j >= i && characters.contains(chars[j])) {
|
|
||||||
j--;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i > j) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i == j) {
|
|
||||||
return String.valueOf(chars[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new String(Arrays.copyOfRange(chars, i, j + 1));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user