From 4c260c4e12d8329343a7ca471e43ae36a09cc83c Mon Sep 17 00:00:00 2001 From: FuYouJ <1247908487@qq.com> Date: Thu, 6 Jul 2023 22:14:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E6=9E=90=E6=95=B0=E6=8D=AE=E6=97=B6?= =?UTF-8?q?=E5=AF=B9null=E6=8F=90=E5=89=8D=E7=89=B9=E5=88=A4;=E5=8F=8D?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E6=95=B0=E7=BB=84=E4=BB=A3=E7=A0=81=E7=AE=80?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../neo4jwriter/adapter/ValueAdapter.java | 77 +++++++------------ 1 file changed, 29 insertions(+), 48 deletions(-) diff --git a/neo4jwriter/src/main/java/com/alibaba/datax/plugin/writer/neo4jwriter/adapter/ValueAdapter.java b/neo4jwriter/src/main/java/com/alibaba/datax/plugin/writer/neo4jwriter/adapter/ValueAdapter.java index 86c859f6..d0f4044d 100644 --- a/neo4jwriter/src/main/java/com/alibaba/datax/plugin/writer/neo4jwriter/adapter/ValueAdapter.java +++ b/neo4jwriter/src/main/java/com/alibaba/datax/plugin/writer/neo4jwriter/adapter/ValueAdapter.java @@ -2,14 +2,17 @@ package com.alibaba.datax.plugin.writer.neo4jwriter.adapter; import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.plugin.writer.neo4jwriter.config.Neo4jField; -import com.alibaba.datax.plugin.writer.neo4jwriter.element.FieldType; +import com.alibaba.datax.plugin.writer.neo4jwriter.config.Neo4jProperty; +import com.alibaba.datax.plugin.writer.neo4jwriter.element.PropertyType; import com.alibaba.fastjson2.JSON; import org.neo4j.driver.Value; import org.neo4j.driver.Values; 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; /** @@ -18,13 +21,19 @@ import java.util.function.Function; public class ValueAdapter { - public static Value column2Value(final Column column, final Neo4jField neo4jField) { - FieldType type = neo4jField.getFieldType(); + public static Value column2Value(final Column column, final Neo4jProperty neo4JProperty) { + + String typeStr = neo4JProperty.getType(); + PropertyType type = PropertyType.fromStrIgnoreCase(typeStr); + if (column.asString() == null) { + return NullValue.NULL; + } + switch (type) { case NULL: return NullValue.NULL; case MAP: - return Values.value(JSON.parseObject(column.asString(),Map.class)); + return Values.value(JSON.parseObject(column.asString(), Map.class)); case BOOLEAN: return Values.value(column.asBoolean()); case STRING: @@ -38,30 +47,30 @@ public class ValueAdapter { case DOUBLE: return Values.value(column.asDouble()); case BYTE_ARRAY: - return Values.value(parseArrayType(neo4jField, column.asString(), Byte::valueOf)); + return Values.value(parseArrayType(neo4JProperty, column.asString(), Byte::valueOf)); 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: - return Values.value(parseArrayType(neo4jField, column.asString(), Boolean::valueOf)); + return Values.value(parseArrayType(neo4JProperty, column.asString(), Boolean::valueOf)); case STRING_ARRAY: case Object_ARRAY: case LIST: - return Values.value(parseArrayType(neo4jField, column.asString(), Function.identity())); + return Values.value(parseArrayType(neo4JProperty, column.asString(), Function.identity())); case LONG_ARRAY: - return Values.value(parseArrayType(neo4jField, column.asString(), Long::valueOf)); + return Values.value(parseArrayType(neo4JProperty, column.asString(), Long::valueOf)); case INT_ARRAY: - return Values.value(parseArrayType(neo4jField, column.asString(), Integer::valueOf)); + return Values.value(parseArrayType(neo4JProperty, column.asString(), Integer::valueOf)); 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 FLOAT_ARRAY: - return Values.value(parseArrayType(neo4jField, column.asString(), Double::valueOf)); + return Values.value(parseArrayType(neo4JProperty, column.asString(), Double::valueOf)); case LOCAL_DATE: - return Values.value(DateAdapter.localDate(column.asString(), neo4jField)); + return Values.value(DateAdapter.localDate(column.asString(), neo4JProperty)); case LOCAL_TIME: - return Values.value(DateAdapter.localTime(column.asString(),neo4jField)); + return Values.value(DateAdapter.localTime(column.asString(), neo4JProperty)); case LOCAL_DATE_TIME: - return Values.value(DateAdapter.localDateTime(column.asString(),neo4jField)); + return Values.value(DateAdapter.localDateTime(column.asString(), neo4JProperty)); default: return Values.value(column.getRawData()); @@ -69,46 +78,18 @@ public class ValueAdapter { } - private static List parseArrayType(final Neo4jField neo4jField, + private static List parseArrayType(final Neo4jProperty neo4JProperty, final String strValue, final Function convertFunc) { if (null == strValue || "".equals(strValue)) { return Collections.emptyList(); } - String trimStr = trimString(strValue, neo4jField.getArrayTrimOrDefault()); - if ("".equals(trimStr)) { - return Collections.emptyList(); - } - String[] strArr = trimStr.split(neo4jField.getSplitOrDefault()); + String split = neo4JProperty.getSplitOrDefault(); + String[] strArr = strValue.split(split); List ans = new ArrayList<>(); for (String s : strArr) { ans.add(convertFunc.apply(s)); } return ans; } - - public static String trimString(String strValue, List trimChars) { - - Set 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)); - } }