Skip to content

Commit 23a9a87

Browse files
committed
Signature data type first pass
1 parent c5b2a0d commit 23a9a87

File tree

3 files changed

+19
-21
lines changed

3 files changed

+19
-21
lines changed

avni-server-api/src/main/java/org/avni/server/importer/batch/csv/creator/ObservationCreator.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,7 @@ private Object getObservationValue(FormElement formElement, String answerValue,
221221
return handleDateValue(answerValue, errorMsgs, concept);
222222
case DateTime:
223223
return handleDateTimeValue(answerValue, errorMsgs, concept);
224-
case Image:
225-
case ImageV2:
226-
case Video:
224+
case Image, ImageV2, Video, Signature:
227225
return handleMediaValue(formElement, answerValue, errorMsgs, oldValue);
228226
case Subject:
229227
return individualService.getObservationValueForUpload(formElement, answerValue);

avni-server-api/src/main/java/org/avni/server/service/EnhancedValidationService.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ private void validateAnswer(Concept question, FormElement formElement, Object va
151151
if (value == null || (value instanceof String && ((String) value).trim().isEmpty())) {
152152
return;
153153
}
154-
154+
155155
ConceptDataType dataType = ConceptDataType.valueOf(question.getDataType());
156156
switch (dataType) {
157157
case Coded:
@@ -182,8 +182,7 @@ private void validateAnswer(Concept question, FormElement formElement, Object va
182182
case PhoneNumber:
183183
validatePhoneNumberValue(question, value, errorMessages);
184184
break;
185-
case Image:
186-
case ImageV2:
185+
case Image, ImageV2, Signature:
187186
validateImageValue(question, value, errorMessages);
188187
break;
189188
default:
@@ -193,7 +192,7 @@ private void validateAnswer(Concept question, FormElement formElement, Object va
193192

194193
private void validateCodedValue(Concept question, Object value, List<String> errorMessages) {
195194
if (question.getConceptAnswers().stream().noneMatch(ans -> ans.getAnswerConcept().getUuid().equals(value))) {
196-
errorMessages.add(String.format("Concept answer '%s' not found in Concept '%s' (%s)",
195+
errorMessages.add(String.format("Concept answer '%s' not found in Concept '%s' (%s)",
197196
value, question.getName(), question.getUuid()));
198197
}
199198
}
@@ -257,9 +256,9 @@ private void validateSubjectValue(Concept question, Object value, List<String> e
257256
if (keyValues != null && keyValues.containsKey(KeyType.subjectTypeUUID)) {
258257
KeyValue keyValue = keyValues.get(KeyType.subjectTypeUUID);
259258
String subjectTypeUuid = keyValue.getValue().toString();
260-
259+
261260
SubjectType subjectType = subjectTypeRepository.findByUuid(subjectTypeUuid);
262-
261+
263262
if (subjectType != null && individualRepository.findByLegacyIdOrUuidAndSubjectType((String) value, subjectType) == null) {
264263
errorMessages.add(formatErrorMessage(question, value));
265264
}
@@ -278,33 +277,33 @@ private void validateLocationValue(Concept question, Object value, List<String>
278277
if (keyValues != null && keyValues.containsKey(KeyType.lowestAddressLevelTypeUUIDs)) {
279278
KeyValue keyValue = keyValues.get(KeyType.lowestAddressLevelTypeUUIDs);
280279
Object keyValueObj = keyValue.getValue();
281-
280+
282281
if (keyValueObj instanceof List<?>) {
283282
// Safe cast with instanceof check
284283
@SuppressWarnings("unchecked")
285284
List<String> lowestLevelUuids = (List<String>) keyValueObj;
286-
285+
287286
List<AddressLevelType> lowestLevels = lowestLevelUuids.stream()
288287
.map(addressLevelTypeRepository::findByUuid)
289288
.filter(Objects::nonNull)
290289
.toList();
291-
290+
292291
boolean isValid = lowestLevels.stream()
293292
.map(AddressLevelType::getAddressLevels)
294293
.flatMap(Collection::stream)
295294
.map(AddressLevel::getUuid)
296295
.toList()
297296
.contains(value);
298-
297+
299298
if (!isValid) {
300299
errorMessages.add(formatErrorMessage(question, value));
301300
}
302301
} else {
303-
errorMessages.add(String.format("Invalid lowest address level type for concept '%s'",
302+
errorMessages.add(String.format("Invalid lowest address level type for concept '%s'",
304303
question.getName()));
305304
}
306305
} else {
307-
errorMessages.add(String.format("Missing lowest address level type for concept '%s'",
306+
errorMessages.add(String.format("Missing lowest address level type for concept '%s'",
308307
question.getName()));
309308
}
310309
} catch (Exception e) {
@@ -330,8 +329,8 @@ private void validateImageValue(Concept question, Object value, List<String> err
330329
URL dummyUrl = s3Service.generateMediaUploadUrl("dummy.jpg", HttpMethod.PUT);
331330
// Use non-deprecated constructor for URL
332331
URL imageUrl = new URI(value.toString()).toURL();
333-
334-
if (!Objects.equals(dummyUrl.getProtocol(), imageUrl.getProtocol()) ||
332+
333+
if (!Objects.equals(dummyUrl.getProtocol(), imageUrl.getProtocol()) ||
335334
!Objects.equals(dummyUrl.getHost(), imageUrl.getHost())) {
336335
errorMessages.add(formatErrorMessage(question, value));
337336
}
@@ -362,7 +361,7 @@ private void splitQuestionGroupValueIfRequiredAndThenValidate(FormElement formEl
362361
validateCollectionItem(formElement, qGroupValue, formMapping, errorMessages);
363362
}
364363
}
365-
364+
366365
private void validateChildObservation(FormElement questionGroupFormElement, Map<String, Object> qGroupValueInstance, FormMapping formMapping, List<String> errorMessages) {
367366
LinkedHashMap<String, FormElement> formElements = formMappingService.getEntityConceptMapForSpecificQuestionGroupFormElement(questionGroupFormElement, formMapping, INCLUDE_VOIDED_FORM_ELEMENTS);
368367
List<ObservationRequest> observationRequests = qGroupValueInstance.entrySet().stream().map(this::createObservationRequest).collect(Collectors.toList());
@@ -379,14 +378,14 @@ private void validateChildObservation(FormElement questionGroupFormElement, Map<
379378

380379
validateConceptValuesAreOfRequiredType(observationRequests, formElements, formMapping, errorMessages);
381380
}
382-
381+
383382
private void validateCollectionItem(FormElement formElement, Object item, FormMapping formMapping, List<String> errorMessages) {
384383
if (item instanceof Map) {
385384
@SuppressWarnings("unchecked")
386385
Map<String, Object> valueMap = (Map<String, Object>) item;
387386
validateChildObservation(formElement, valueMap, formMapping, errorMessages);
388387
} else {
389-
errorMessages.add(String.format("Invalid question group value type for concept '%s'",
388+
errorMessages.add(String.format("Invalid question group value type for concept '%s'",
390389
formElement.getConcept().getName()));
391390
}
392391
}

avni-server-data/src/main/java/org/avni/server/domain/ConceptDataType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public enum ConceptDataType {
2525
Audio,
2626
File,
2727
QuestionGroup,
28-
Encounter;
28+
Encounter,
29+
Signature;
2930

3031
private static final List<ConceptDataType> dateTypes = Arrays.asList(Date, DateTime, Duration, Time);
3132
public static final List<ConceptDataType> dashboardFilterSupportedTypes = Arrays.asList(Numeric, Text, Notes, Coded, Date, DateTime, Time, Id, Location);

0 commit comments

Comments
 (0)