Skip to content

Commit 98f2781

Browse files
authored
Merge pull request #5395 from marcomarasca/PLFM-9198
PLFM-9198: Small refactoring and missing test
2 parents d6dbc1f + 7c4a7ac commit 98f2781

File tree

5 files changed

+117
-34
lines changed

5 files changed

+117
-34
lines changed
Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,58 @@
11
package org.sagebionetworks.repo.model.grid.patch;
22

3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
import org.json.JSONArray;
7+
import org.json.JSONObject;
8+
39
/**
410
* The value of a con node is JSON-like value. The value can be any JSON value,
511
* including null, true, false, numbers, strings, arrays, objects, binary blobs,
612
* undefined value, and logical clock timestamp
713
*/
814
public enum ConType {
915

10-
NULL, BOOLEAN, LONG, DOUBLE, STRING, JSON_ARRAY, JSON_OBJECT, UNDEFINED, TIMESTAMP;
16+
NULL,
17+
BOOLEAN(Boolean.class),
18+
LONG(Long.class, Integer.class, Short.class),
19+
DOUBLE(Double.class, Float.class),
20+
STRING(String.class),
21+
JSON_ARRAY(JSONArray.class),
22+
JSON_OBJECT(JSONObject.class),
23+
TIMESTAMP(LogicalTimestamp.class),
24+
UNDEFINED;
25+
26+
private Class<?>[] supportedClasses;
27+
28+
private ConType(Class<?> ...classes) {
29+
this.supportedClasses = classes;
30+
}
31+
32+
public Class<?>[] getSupportedClasses() {
33+
return supportedClasses;
34+
}
35+
36+
private static final Map<Class<?>, ConType> CLASS_MAP = new HashMap<>();
37+
38+
static {
39+
for (ConType type : ConType.values()) {
40+
41+
if (type.supportedClasses == null || type.supportedClasses.length == 0) {
42+
continue;
43+
}
44+
45+
for (Class<?> clazz : type.supportedClasses) {
46+
CLASS_MAP.put(clazz, type);
47+
}
48+
}
49+
}
50+
51+
public static ConType fromValue(Object value) {
52+
if (value == null) {
53+
return NULL;
54+
}
55+
return CLASS_MAP.getOrDefault(value.getClass(), UNDEFINED);
56+
}
57+
1158
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package org.sagebionetworks.repo.model.grid.patch;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import org.json.JSONArray;
6+
import org.json.JSONObject;
7+
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.params.ParameterizedTest;
9+
import org.junit.jupiter.params.provider.EnumSource;
10+
import org.junit.jupiter.params.provider.EnumSource.Mode;
11+
12+
public class ConTypeTest {
13+
14+
@ParameterizedTest
15+
@EnumSource(value = ConType.class, mode = Mode.EXCLUDE, names = {"NULL", "UNDEFINED"})
16+
public void testFromValue(ConType expectedType) {
17+
for (Class<?> clazz : expectedType.getSupportedClasses()) {
18+
assertEquals(expectedType, ConType.fromValue(getTestValue(clazz)));
19+
}
20+
}
21+
22+
private Object getTestValue(Class<?> clazz) {
23+
if (Boolean.class.isAssignableFrom(clazz)) {
24+
return true;
25+
}
26+
if (Long.class.isAssignableFrom(clazz)) {
27+
return 123L;
28+
}
29+
if (Integer.class.isAssignableFrom(clazz)) {
30+
return 123;
31+
}
32+
if (Short.class.isAssignableFrom(clazz)) {
33+
return Short.valueOf("1");
34+
}
35+
if (Double.class.isAssignableFrom(clazz)) {
36+
return 123.0D;
37+
}
38+
if (Float.class.isAssignableFrom(clazz)) {
39+
return 123f;
40+
}
41+
if (String.class.isAssignableFrom(clazz)) {
42+
return "123";
43+
}
44+
if (JSONArray.class.isAssignableFrom(clazz)) {
45+
return new JSONArray();
46+
}
47+
if (JSONObject.class.isAssignableFrom(clazz)) {
48+
return new JSONObject();
49+
}
50+
if (LogicalTimestamp.class.isAssignableFrom(clazz)) {
51+
return new LogicalTimestamp();
52+
}
53+
throw new IllegalStateException("Unsuported class " + clazz + ".");
54+
}
55+
56+
@Test
57+
public void testFromValueWithNull() {
58+
assertEquals(ConType.NULL, ConType.fromValue(null));
59+
}
60+
61+
@Test
62+
public void testFromValueWithUndefined() {
63+
assertEquals(ConType.UNDEFINED, ConType.fromValue(new String[] {}));
64+
}
65+
}
Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package org.sagebionetworks.repo.manager.grid;
22

3-
import org.json.JSONArray;
4-
import org.json.JSONObject;
5-
import org.sagebionetworks.repo.model.grid.patch.ConType;
6-
73
public class PatchUtils {
84

95
/**
@@ -39,30 +35,5 @@ public static int calculateRowsPerPatch(Long maxRowSizeBytes) {
3935
public static Long plusTenPerent(Long value) {
4036
return value + Double.valueOf(value * 0.1).longValue();
4137
}
42-
43-
public static ConType getConType(Object value) {
44-
if (value == null) {
45-
return ConType.NULL;
46-
}
47-
if (value instanceof Boolean) {
48-
return ConType.BOOLEAN;
49-
}
50-
if (value instanceof Long || value instanceof Integer) {
51-
return ConType.LONG;
52-
}
53-
if (value instanceof Double || value instanceof Float) {
54-
return ConType.DOUBLE;
55-
}
56-
if (value instanceof String) {
57-
return ConType.STRING;
58-
}
59-
if (value instanceof JSONArray) {
60-
return ConType.JSON_ARRAY;
61-
}
62-
if (value instanceof JSONObject) {
63-
return ConType.JSON_OBJECT;
64-
}
65-
return ConType.UNDEFINED;
66-
}
6738

6839
}

services/repository-managers/src/main/java/org/sagebionetworks/repo/manager/grid/internal/replica/change/InsertRowChangeHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.Map;
66

77
import org.json.JSONArray;
8-
import org.sagebionetworks.repo.manager.grid.PatchUtils;
8+
import org.sagebionetworks.repo.model.grid.patch.ConType;
99
import org.sagebionetworks.repo.model.grid.patch.ConValue;
1010
import org.sagebionetworks.repo.model.grid.patch.LogicalTimestamp;
1111
import org.sagebionetworks.repo.model.grid.patch.operation.builder.Operations;
@@ -34,7 +34,7 @@ public void handleChange(PatchBuilder builder, InsertRowChange change) {
3434
Object value = rowData.get(i);
3535
Integer vectorIndex = rowVectorIndex[i];
3636
LogicalTimestamp cellConstId = builder.addOperationBuilder(Operations.newConstant().setValue(
37-
new ConValue(PatchUtils.getConType(value), value))
37+
new ConValue(ConType.fromValue(value), value))
3838
);
3939
newVecConstantMap.put(vectorIndex, cellConstId);
4040
}

services/repository-managers/src/main/java/org/sagebionetworks/repo/manager/grid/internal/replica/change/UpdateRowChangeHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.util.Map;
55

66
import org.json.JSONArray;
7-
import org.sagebionetworks.repo.manager.grid.PatchUtils;
7+
import org.sagebionetworks.repo.model.grid.patch.ConType;
88
import org.sagebionetworks.repo.model.grid.patch.ConValue;
99
import org.sagebionetworks.repo.model.grid.patch.LogicalTimestamp;
1010
import org.sagebionetworks.repo.model.grid.patch.operation.builder.Operations;
@@ -33,7 +33,7 @@ public void handleChange(PatchBuilder builder, UpdateRowChange change) {
3333
Integer vectorIndex = rowVecIndex[i];
3434

3535
LogicalTimestamp cellConstId = builder.addOperationBuilder(Operations.newConstant().setValue(
36-
new ConValue(PatchUtils.getConType(value), value))
36+
new ConValue(ConType.fromValue(value), value))
3737
);
3838

3939
updatedConstantMap.put(vectorIndex, cellConstId);

0 commit comments

Comments
 (0)