Skip to content

Commit c9ea87d

Browse files
committed
Updated Neo4j TypeCaster handling of arrays
1 parent 7d6c3e4 commit c9ea87d

File tree

1 file changed

+55
-33
lines changed
  • nosqlunit-neo4j/src/main/java/com/lordofthejars/nosqlunit/graph/parser

1 file changed

+55
-33
lines changed

nosqlunit-neo4j/src/main/java/com/lordofthejars/nosqlunit/graph/parser/TypeCaster.java

Lines changed: 55 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,33 @@
22

33
import java.lang.reflect.Array;
44
import java.lang.reflect.Constructor;
5+
import java.util.HashMap;
56
import java.util.Map;
67

7-
import org.apache.commons.lang.StringUtils;
8-
98
import com.google.common.primitives.Primitives;
109

11-
public class TypeCaster {
10+
public final class TypeCaster {
11+
12+
private static final Map<String, String> types = new HashMap<String, String>();
13+
14+
static {
15+
try {
16+
putNumberType(Boolean.class);
17+
putNumberType(Character.class);
18+
putNumberType(Byte.class);
19+
putNumberType(Short.class);
20+
putNumberType(Integer.class);
21+
putNumberType(Long.class);
22+
putNumberType(Float.class);
23+
putNumberType(Double.class);
24+
} catch (final Exception e) {
25+
throw new IllegalStateException(e);
26+
}
27+
}
28+
29+
private static void putNumberType(final Class<?> primitiveClass) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException {
30+
types.put(primitiveClass.getField("TYPE").get(null).toString(), primitiveClass.getName());
31+
}
1232

1333
private TypeCaster() {
1434
super();
@@ -28,7 +48,8 @@ public static String getStringType(final Object object) {
2848
} else if (object instanceof Boolean) {
2949
return GraphMLTokens.BOOLEAN;
3050
} else if (isArray(object)) {
31-
return object.getClass().getSimpleName();
51+
final Object first = Array.get(object, 0);
52+
return getStringType(first) + "[]";
3253
} else {
3354
return GraphMLTokens.STRING;
3455
}
@@ -37,45 +58,46 @@ public static String getStringType(final Object object) {
3758
public static boolean isArray(Object obj) {
3859
return obj!=null && obj.getClass().isArray();
3960
}
40-
61+
4162
public static Object typeCastValue(String key, String value, Map<String, String> keyTypes) {
4263
String type = keyTypes.get(key);
43-
if (null == type || type.equals(GraphMLTokens.STRING))
64+
if (null == type || type.equals(GraphMLTokens.STRING)) {
4465
return value;
45-
else if (type.equals(GraphMLTokens.FLOAT))
66+
} else if (type.equals(GraphMLTokens.FLOAT)) {
4667
return Float.valueOf(value);
47-
else if (type.equals(GraphMLTokens.INT))
68+
} else if (type.equals(GraphMLTokens.INT)) {
4869
return Integer.valueOf(value);
49-
else if (type.equals(GraphMLTokens.DOUBLE))
70+
} else if (type.equals(GraphMLTokens.DOUBLE)) {
5071
return Double.valueOf(value);
51-
else if (type.equals(GraphMLTokens.BOOLEAN))
72+
} else if (type.equals(GraphMLTokens.BOOLEAN)) {
5273
return Boolean.valueOf(value);
53-
else if (type.equals(GraphMLTokens.LONG))
74+
} else if (type.equals(GraphMLTokens.LONG)) {
5475
return Long.valueOf(value);
55-
else if (type.contains("[]"))
56-
return castToArray(type, value);
57-
else
76+
} else if (type.contains("[]")) {
77+
return castToArray(type, value);
78+
} else {
5879
return value;
80+
}
5981
}
6082

6183
/**
62-
* Creates a primitive array of the specified type (eg. long[] or int[])
63-
* Using 'value' as a comma-delimited String.
64-
*/
65-
static Object castToArray(final String type, final String value) {
66-
try {
67-
final String[] values = value.split(",");
68-
final String className = "java.lang." + StringUtils.capitalize(type.replace("[]", ""));
69-
final Class<?> klass = Class.forName(className);
70-
final Constructor<?> konstructor = klass.getDeclaredConstructor(String.class);
71-
final Object array = Array.newInstance(Primitives.unwrap(klass), values.length);
72-
for (int i = 0; i < values.length; i++) {
73-
Array.set(array, i, konstructor.newInstance(values[i].trim()));
74-
}
75-
return array;
76-
} catch (final Exception e) {
77-
throw new IllegalStateException("Could not cast " + value + " to " + type, e);
78-
}
79-
}
80-
84+
* Creates a primitive array of the specified type (eg. long[] or int[])
85+
* Using 'value' as a comma-delimited String.
86+
*/
87+
static Object castToArray(final String type, final String value) {
88+
try {
89+
final String[] values = value.split(",");
90+
final String className = types.get(type.replace("[]", ""));
91+
final Class<?> klass = Class.forName(className);
92+
final Constructor<?> konstructor = klass.getDeclaredConstructor(String.class);
93+
final Object array = Array.newInstance(Primitives.unwrap(klass), values.length);
94+
for (int i = 0; i < values.length; i++) {
95+
Array.set(array, i, konstructor.newInstance(values[i].trim()));
96+
}
97+
return array;
98+
} catch (final Exception e) {
99+
throw new IllegalStateException("Could not cast " + value + " to " + type, e);
100+
}
101+
}
102+
81103
}

0 commit comments

Comments
 (0)