Skip to content

Commit 39fabf8

Browse files
author
jsquatrito
committed
RLPNC-7496: Adds parameters + parameter universes to RecordSimilarityRequest
1 parent 81cb036 commit 39fabf8

3 files changed

Lines changed: 125 additions & 2 deletions

File tree

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public RecordSimilarityRequest deserialize(JsonParser jsonParser, Deserializatio
4646
final JsonNode node = jsonParser.getCodec().readTree(jsonParser);
4747
final Map<String, RecordSimilarityFieldInfo> fields = node.get("fields") != null ? node.get("fields").traverse(jsonParser.getCodec()).readValueAs(new TypeReference<Map<String, RecordSimilarityFieldInfo>>() { }) : new HashMap<>();
4848
final RecordSimilarityProperties properties = node.get("properties") != null ? node.get("properties").traverse(jsonParser.getCodec()).readValueAs(RecordSimilarityProperties.class) : RecordSimilarityProperties.builder().build();
49+
4950
RecordSimilarityRecords records = null;
5051
String recordsField = "records";
5152
if (node.get(recordsField) != null && fields != null && node.get(recordsField).get("left") != null && node.get(recordsField).get("right") != null) {
@@ -54,10 +55,16 @@ public RecordSimilarityRequest deserialize(JsonParser jsonParser, Deserializatio
5455
.right(parseRecords(node.get(recordsField).get("right"), fields, jsonParser))
5556
.build();
5657
}
58+
59+
final Map<String, String> parameters = node.get("parameters") != null ? node.get("parameters").traverse(jsonParser.getCodec()).readValueAs(new TypeReference<Map<String, String>>() { }) : null;
60+
final String parameterUniverse = node.get("parameterUniverse") != null ? node.get("parameterUniverse").traverse(jsonParser.getCodec()).readValueAs(String.class) : null;
61+
5762
return RecordSimilarityRequest.builder()
5863
.fields(fields)
5964
.properties(properties)
6065
.records(records)
66+
.parameters(parameters)
67+
.parameterUniverse(parameterUniverse)
6168
.build();
6269
}
6370
}

json/src/test/java/com/basistech/rosette/apimodel/RecordSimilarityRequestTest.java

Lines changed: 107 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,14 @@ class RecordSimilarityRequestTest {
4343
private static final ObjectMapper MAPPER = ApiModelMixinModule.setupObjectMapper(new ObjectMapper());
4444

4545
private static final String EXPECTED_JSON = "{\"fields\":{\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"addr\":{\"type\":\"rni_address\",\"weight\":0.5}},\"properties\":{\"threshold\":0.7,\"includeExplainInfo\":true},\"records\":{\"left\":[{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"text\":\"Ethan R\",\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\"},\"dob\":\"1993-04-16\",\"addr\":\"123 Roadlane Ave\"},{\"primaryName\":{\"text\":\"Evan R\"},\"dob\":{\"date\":\"1993-04-16\"}}],\"right\":[{\"primaryName\":{\"text\":\"Seth R\",\"language\":\"eng\"},\"dob\":{\"date\":\"1993-04-16\"}},{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\",\"dob\":{\"date\":\"1993-04-16\"},\"addr\":{\"address\":\"123 Roadlane Ave\"}}]}}";
46+
private static final String EXPECTED_JSON_WITH_PARAMS = "{\"fields\":{\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"addr\":{\"type\":\"rni_address\",\"weight\":0.5}},\"properties\":{\"threshold\":0.7,\"includeExplainInfo\":true},\"records\":{\"left\":[{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"text\":\"Ethan R\",\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\"},\"dob\":\"1993-04-16\",\"addr\":\"123 Roadlane Ave\"},{\"primaryName\":{\"text\":\"Evan R\"},\"dob\":{\"date\":\"1993-04-16\"}}],\"right\":[{\"primaryName\":{\"text\":\"Seth R\",\"language\":\"eng\"},\"dob\":{\"date\":\"1993-04-16\"}},{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\",\"dob\":{\"date\":\"1993-04-16\"},\"addr\":{\"address\":\"123 Roadlane Ave\"}}]},\"parameters\":{\"timeDistanceWeight\":\"0.8\",\"stringDistanceWeight\":\"0.1\"}}";
47+
private static final String EXPECTED_JSON_WITH_UNIVERSE = "{\"fields\":{\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"addr\":{\"type\":\"rni_address\",\"weight\":0.5}},\"properties\":{\"threshold\":0.7,\"includeExplainInfo\":true},\"records\":{\"left\":[{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"text\":\"Ethan R\",\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\"},\"dob\":\"1993-04-16\",\"addr\":\"123 Roadlane Ave\"},{\"primaryName\":{\"text\":\"Evan R\"},\"dob\":{\"date\":\"1993-04-16\"}}],\"right\":[{\"primaryName\":{\"text\":\"Seth R\",\"language\":\"eng\"},\"dob\":{\"date\":\"1993-04-16\"}},{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\",\"dob\":{\"date\":\"1993-04-16\"},\"addr\":{\"address\":\"123 Roadlane Ave\"}}]},\"parameterUniverse\":\"myUniverse\"}";
48+
4649
private static final RecordSimilarityRequest EXPECTED_REQUEST = RecordSimilarityRequest.builder()
4750
.fields(Map.of(
51+
"dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.DATE).weight(0.1).build(),
4852
"primaryName", RecordSimilarityFieldInfo.builder().type(RecordFieldType.NAME).weight(0.5).build(),
4953
"dob", RecordSimilarityFieldInfo.builder().type(RecordFieldType.DATE).weight(0.2).build(),
50-
"dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.DATE).weight(0.1).build(),
5154
"addr", RecordSimilarityFieldInfo.builder().type(RecordFieldType.ADDRESS).weight(0.5).build()))
5255
.properties(RecordSimilarityProperties.builder().threshold(0.7).includeExplainInfo(true).build())
5356
.records(RecordSimilarityRecords.builder()
@@ -85,17 +88,120 @@ class RecordSimilarityRequestTest {
8588
).build()
8689
).build();
8790

91+
private static final RecordSimilarityRequest EXPECTED_REQUEST_WITH_PARAMS = RecordSimilarityRequest.builder()
92+
.fields(Map.of(
93+
"dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.DATE).weight(0.1).build(),
94+
"primaryName", RecordSimilarityFieldInfo.builder().type(RecordFieldType.NAME).weight(0.5).build(),
95+
"dob", RecordSimilarityFieldInfo.builder().type(RecordFieldType.DATE).weight(0.2).build(),
96+
"addr", RecordSimilarityFieldInfo.builder().type(RecordFieldType.ADDRESS).weight(0.5).build()))
97+
.properties(RecordSimilarityProperties.builder().threshold(0.7).includeExplainInfo(true).build())
98+
.records(RecordSimilarityRecords.builder()
99+
.left(
100+
List.of(
101+
Map.of(
102+
"primaryName", NameField.FieldedName.builder()
103+
.text("Ethan R").entityType("PERSON")
104+
.language(LanguageCode.ENGLISH)
105+
.languageOfOrigin(LanguageCode.ENGLISH)
106+
.script(ISO15924.Latn)
107+
.build(),
108+
"dob", DateField.UnfieldedDate.builder().date("1993-04-16").build(),
109+
"dob2", DateField.FieldedDate.builder().date("1993/04/16").build(),
110+
"addr", AddressField.UnfieldedAddress.builder().address("123 Roadlane Ave").build()
111+
),
112+
Map.of(
113+
"primaryName", NameField.FieldedName.builder().text("Evan R").build(),
114+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build()
115+
)
116+
)
117+
).right(
118+
List.of(
119+
Map.of(
120+
"primaryName", NameField.FieldedName.builder().text("Seth R").language(LanguageCode.ENGLISH).build(),
121+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build()
122+
),
123+
Map.of(
124+
"primaryName", NameField.UnfieldedName.builder().text("Ivan R").build(),
125+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build(),
126+
"dob2", DateField.FieldedDate.builder().date("1993/04/16").build(),
127+
"addr", AddressField.FieldedAddress.builder().address("123 Roadlane Ave").build()
128+
)
129+
)
130+
).build()
131+
)
132+
.parameters(Map.of(
133+
"timeDistanceWeight", "0.8",
134+
"stringDistanceWeight", "0.1"))
135+
.build();
136+
137+
private static final RecordSimilarityRequest EXPECTED_REQUEST_WITH_UNIVERSE = RecordSimilarityRequest.builder()
138+
.fields(Map.of(
139+
"dob", RecordSimilarityFieldInfo.builder().type(RecordFieldType.DATE).weight(0.2).build(),
140+
"primaryName", RecordSimilarityFieldInfo.builder().type(RecordFieldType.NAME).weight(0.5).build(),
141+
"dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.DATE).weight(0.1).build(),
142+
"addr", RecordSimilarityFieldInfo.builder().type(RecordFieldType.ADDRESS).weight(0.5).build()))
143+
.properties(RecordSimilarityProperties.builder().threshold(0.7).includeExplainInfo(true).build())
144+
.records(RecordSimilarityRecords.builder()
145+
.left(
146+
List.of(
147+
Map.of(
148+
"primaryName", NameField.FieldedName.builder()
149+
.text("Ethan R").entityType("PERSON")
150+
.language(LanguageCode.ENGLISH)
151+
.languageOfOrigin(LanguageCode.ENGLISH)
152+
.script(ISO15924.Latn)
153+
.build(),
154+
"dob", DateField.UnfieldedDate.builder().date("1993-04-16").build(),
155+
"dob2", DateField.FieldedDate.builder().date("1993/04/16").build(),
156+
"addr", AddressField.UnfieldedAddress.builder().address("123 Roadlane Ave").build()
157+
),
158+
Map.of(
159+
"primaryName", NameField.FieldedName.builder().text("Evan R").build(),
160+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build()
161+
)
162+
)
163+
).right(
164+
List.of(
165+
Map.of(
166+
"primaryName", NameField.FieldedName.builder().text("Seth R").language(LanguageCode.ENGLISH).build(),
167+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build()
168+
),
169+
Map.of(
170+
"primaryName", NameField.UnfieldedName.builder().text("Ivan R").build(),
171+
"dob", DateField.FieldedDate.builder().date("1993-04-16").build(),
172+
"dob2", DateField.FieldedDate.builder().date("1993/04/16").build(),
173+
"addr", AddressField.FieldedAddress.builder().address("123 Roadlane Ave").build()
174+
)
175+
)
176+
).build()
177+
)
178+
.parameterUniverse("myUniverse").build();
179+
88180
@Test
89181
void testDeserialization() throws JsonProcessingException {
90182
final RecordSimilarityRequest request = MAPPER.readValue(EXPECTED_JSON, new TypeReference<>() { });
91183
assertEquals(EXPECTED_REQUEST, request);
184+
185+
final RecordSimilarityRequest requestParams = MAPPER.readValue(EXPECTED_JSON_WITH_PARAMS, new TypeReference<>() { });
186+
assertEquals(EXPECTED_REQUEST_WITH_PARAMS, requestParams);
187+
188+
final RecordSimilarityRequest requestUniverse = MAPPER.readValue(EXPECTED_JSON_WITH_UNIVERSE, new TypeReference<>() { });
189+
assertEquals(EXPECTED_REQUEST_WITH_UNIVERSE, requestUniverse);
92190
}
93191

94192
@Test
95193
void testSerialization() throws JsonProcessingException {
96194
final JsonNode expectedJson = MAPPER.readTree(EXPECTED_JSON);
97195
final JsonNode actualJson = MAPPER.valueToTree(EXPECTED_REQUEST);
98196
assertEquals(expectedJson, actualJson);
197+
198+
final JsonNode expectedParamJson = MAPPER.readTree(EXPECTED_JSON_WITH_PARAMS);
199+
final JsonNode actualParamJson = MAPPER.valueToTree(EXPECTED_REQUEST_WITH_PARAMS);
200+
assertEquals(expectedParamJson, actualParamJson);
201+
202+
final JsonNode expectedUniverseJson = MAPPER.readTree(EXPECTED_JSON_WITH_UNIVERSE);
203+
final JsonNode actualUniverseJson = MAPPER.valueToTree(EXPECTED_REQUEST_WITH_UNIVERSE);
204+
assertEquals(expectedUniverseJson, actualUniverseJson);
99205
}
100206

101207
}

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,25 @@ public class RecordSimilarityRequest extends Request {
3232
@NotEmpty @Valid Map<String, RecordSimilarityFieldInfo> fields;
3333
@Valid RecordSimilarityProperties properties;
3434
@NotNull @Valid RecordSimilarityRecords records;
35+
@Valid Map<String, String> parameters;
36+
@Valid String parameterUniverse;
3537

3638
@Builder // workaround for inheritance https://github.com/rzwitserloot/lombok/issues/853
3739
public RecordSimilarityRequest(String profileId,
3840
Map<String, RecordSimilarityFieldInfo> fields,
3941
RecordSimilarityProperties properties,
40-
RecordSimilarityRecords records) {
42+
RecordSimilarityRecords records,
43+
Map<String, String> parameters,
44+
String parameterUniverse) {
4145
super(profileId);
4246
this.fields = fields;
4347
this.properties = properties;
4448
this.records = records;
49+
this.parameters = parameters;
50+
this.parameterUniverse = parameterUniverse;
51+
52+
if (this.parameters != null && parameterUniverse != null) {
53+
throw new IllegalArgumentException("Parameters and parameter universe may not both be specified");
54+
}
4555
}
4656
}

0 commit comments

Comments
 (0)