Skip to content

Commit 0ec0fa0

Browse files
author
Norbert Nagy
committed
RLPNC-7501 record similarity left and right object correct deserialization
1 parent 81cb036 commit 0ec0fa0

File tree

6 files changed

+85
-63
lines changed

6 files changed

+85
-63
lines changed

json/src/main/java/com/basistech/rosette/apimodel/jackson/ApiModelMixinModule.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.AddressFieldDeserializer;
2828
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.DateFieldDeserializer;
2929
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.NameFieldDeserializer;
30-
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResult;
31-
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.RecordSimilarityResultDeserializer;
30+
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.RecordSimilarityResponseDeserializer;
31+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResponse;
3232
import com.basistech.rosette.apimodel.recordsimilarity.records.AddressField;
3333
import com.basistech.rosette.apimodel.recordsimilarity.records.DateField;
3434
import com.basistech.rosette.apimodel.recordsimilarity.records.NameField;
@@ -98,7 +98,7 @@ public void setupModule(Module.SetupContext context) {
9898
deserializers.addDeserializer(DateField.class, new DateFieldDeserializer());
9999
deserializers.addDeserializer(AddressField.class, new AddressFieldDeserializer());
100100
deserializers.addDeserializer(RecordSimilarityRequest.class, new RecordSimilarityRequestDeserializer());
101-
deserializers.addDeserializer(RecordSimilarityResult.class, new RecordSimilarityResultDeserializer());
101+
deserializers.addDeserializer(RecordSimilarityResponse.class, new RecordSimilarityResponseDeserializer());
102102
context.addDeserializers(deserializers);
103103
}
104104

json/src/main/java/com/basistech/rosette/apimodel/jackson/recordsimilaritydeserializers/RecordSimilarityDeserializerUtilities.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
import java.util.Iterator;
2222
import java.util.Map;
2323

24+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityExplainInfo;
25+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResult;
2426
import com.fasterxml.jackson.core.JsonParser;
2527
import com.fasterxml.jackson.databind.JsonNode;
26-
import javax.validation.Valid;
28+
import javax.validation.constraints.NotNull;
2729

2830
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityFieldInfo;
2931
import com.basistech.rosette.apimodel.recordsimilarity.records.AddressField;
@@ -33,9 +35,23 @@
3335

3436
final class RecordSimilarityDeserializerUtilities {
3537

36-
private RecordSimilarityDeserializerUtilities() { }
38+
private RecordSimilarityDeserializerUtilities() {
39+
}
40+
41+
public static RecordSimilarityResult parseResult(JsonNode node, JsonParser jsonParser, @NotNull Map<String, RecordSimilarityFieldInfo> fields) throws IOException {
42+
final Double score = node.get("score") != null ? node.get("score").traverse(jsonParser.getCodec()).readValueAs(Double.class) : null;
43+
final RecordSimilarityExplainInfo explainInfo = node.get("explainInfo") != null ? node.get("explainInfo").traverse(jsonParser.getCodec()).readValueAs(RecordSimilarityExplainInfo.class) : null;
44+
Map<String, RecordSimilarityField> left = node.get("left") != null ? parseRecord(node.get("left"), jsonParser, fields) : null;
45+
Map<String, RecordSimilarityField> right = node.get("right") != null ? parseRecord(node.get("right"), jsonParser, fields) : null;
46+
return RecordSimilarityResult.builder()
47+
.score(score)
48+
.left(left)
49+
.right(right)
50+
.explainInfo(explainInfo)
51+
.build();
52+
}
3753

38-
static Map<String, RecordSimilarityField> parseRecord(JsonNode jsonNode, @Valid Map<String, RecordSimilarityFieldInfo> fields, JsonParser jsonParser) throws IOException {
54+
static Map<String, RecordSimilarityField> parseRecord(JsonNode jsonNode, JsonParser jsonParser, @NotNull Map<String, RecordSimilarityFieldInfo> fields) throws IOException {
3955
final Iterator<Map.Entry<String, JsonNode>> recordsIterator = jsonNode.fields();
4056
final Map<String, RecordSimilarityField> recordMap = new HashMap<>();
4157
while (recordsIterator.hasNext()) {

json/src/main/java/com/basistech/rosette/apimodel/jackson/recordsimilaritydeserializers/RecordSimilarityRequestDeserializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private static List<Map<String, RecordSimilarityField>> parseRecords(final JsonN
6767
final JsonParser jsonParser) throws IOException {
6868
final List<Map<String, RecordSimilarityField>> records = new ArrayList<>();
6969
for (JsonNode recordNode : arrayNode) {
70-
records.add(RecordSimilarityDeserializerUtilities.parseRecord(recordNode, fields, jsonParser));
70+
records.add(RecordSimilarityDeserializerUtilities.parseRecord(recordNode, jsonParser, fields));
7171
}
7272
return records;
7373
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright 2024 Basis Technology Corp.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers;
18+
19+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityFieldInfo;
20+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResponse;
21+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResult;
22+
import com.fasterxml.jackson.core.JsonParser;
23+
import com.fasterxml.jackson.core.type.TypeReference;
24+
import com.fasterxml.jackson.databind.DeserializationContext;
25+
import com.fasterxml.jackson.databind.JsonNode;
26+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
27+
28+
import java.io.IOException;
29+
import java.util.ArrayList;
30+
import java.util.List;
31+
import java.util.Map;
32+
import java.util.Optional;
33+
34+
public class RecordSimilarityResponseDeserializer extends StdDeserializer<RecordSimilarityResponse> {
35+
36+
private static final TypeReference<Map<String, RecordSimilarityFieldInfo>> FIELDS_TYPE_REFERENCE = new TypeReference<>() {
37+
};
38+
39+
public RecordSimilarityResponseDeserializer() {
40+
super(RecordSimilarityResponse.class);
41+
}
42+
43+
@Override
44+
public RecordSimilarityResponse deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
45+
final JsonNode node = jsonParser.getCodec().readTree(jsonParser);
46+
47+
Map<String, RecordSimilarityFieldInfo> fields = node.get("fields").traverse(jsonParser.getCodec()).readValueAs(FIELDS_TYPE_REFERENCE);
48+
String errorMessage = Optional.ofNullable(node.get("errorMessage")).map(JsonNode::asText).orElse(null);
49+
50+
JsonNode resultsNode = node.get("results");
51+
List<RecordSimilarityResult> results = new ArrayList<>(resultsNode.size());
52+
for (JsonNode resultNode : resultsNode) {
53+
results.add(RecordSimilarityDeserializerUtilities.parseResult(resultNode, jsonParser, fields));
54+
}
55+
56+
return RecordSimilarityResponse.builder()
57+
.fields(fields)
58+
.results(results)
59+
.errorMessage(errorMessage)
60+
.build();
61+
}
62+
}

json/src/main/java/com/basistech/rosette/apimodel/jackson/recordsimilaritydeserializers/RecordSimilarityResultDeserializer.java

Lines changed: 0 additions & 54 deletions
This file was deleted.

model/src/main/java/com/basistech/rosette/apimodel/recordsimilarity/RecordSimilarityResponse.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.fasterxml.jackson.annotation.JsonInclude;
2323
import lombok.Builder;
2424
import lombok.Value;
25-
import lombok.extern.jackson.Jacksonized;
2625

2726
import com.basistech.rosette.apimodel.Response;
2827

@@ -33,7 +32,6 @@
3332
*/
3433
@Value
3534
@Builder
36-
@Jacksonized
3735
@JsonInclude(JsonInclude.Include.NON_NULL)
3836
public class RecordSimilarityResponse extends Response {
3937
@Valid Map<String, RecordSimilarityFieldInfo> fields;

0 commit comments

Comments
 (0)