11package de .symeda .sormas .backend .externaljournal ;
22
3+ import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .EMAIL_TAKEN ;
4+ import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .INVALID_BIRTHDATE ;
5+ import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .INVALID_EMAIL ;
6+ import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .INVALID_PHONE ;
7+ import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .NO_PHONE_OR_EMAIL ;
8+ import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .PHONE_TAKEN ;
9+
310import java .io .IOException ;
411import java .net .URLEncoder ;
512import java .nio .charset .StandardCharsets ;
2229import javax .ws .rs .core .MediaType ;
2330import javax .ws .rs .core .Response ;
2431
25- import de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryIdatId ;
26- import de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryPersonData ;
27- import de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError ;
2832import org .apache .commons .lang3 .ObjectUtils ;
2933import org .apache .commons .lang3 .StringUtils ;
3034import org .apache .commons .validator .routines .EmailValidator ;
4246import com .google .i18n .phonenumbers .Phonenumber ;
4347
4448import de .symeda .sormas .api .contact .ContactDto ;
49+ import de .symeda .sormas .api .externaljournal .ExternalJournalValidation ;
50+ import de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryIdatId ;
51+ import de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryPersonData ;
4552import de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryPersonDto ;
4653import de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryQueryResponse ;
47- import de .symeda .sormas .api .externaljournal .ExternalJournalValidation ;
4854import de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryRegisterResult ;
55+ import de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError ;
4956import de .symeda .sormas .api .i18n .I18nProperties ;
57+ import de .symeda .sormas .api .person .PersonDto ;
5058import de .symeda .sormas .api .person .SymptomJournalStatus ;
5159import de .symeda .sormas .backend .common .ConfigFacadeEjb ;
5260import de .symeda .sormas .backend .person .PersonFacadeEjb ;
5361
54- import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .EMAIL_TAKEN ;
55- import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .INVALID_BIRTHDATE ;
56- import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .INVALID_EMAIL ;
57- import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .INVALID_PHONE ;
58- import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .NO_PHONE_OR_EMAIL ;
59- import static de .symeda .sormas .api .externaljournal .patientdiary .PatientDiaryValidationError .PHONE_TAKEN ;
60-
6162/**
6263 * This service provides methods for communicating with external symptom journals.
6364 * <br>
@@ -207,7 +208,7 @@ public void notifyExternalJournalFollowUpUntilUpdate(ContactDto contact, Date pr
207208 * @return true if the person data change was considered relevant for external journals, false otherwise.
208209 *
209210 */
210- public boolean notifyExternalJournalPersonUpdate (de . symeda . sormas . api . person . PersonDto existingPerson , de . symeda . sormas . api . person . PersonDto updatedPerson ) {
211+ public boolean notifyExternalJournalPersonUpdate (PersonDto existingPerson , PersonDto updatedPerson ) {
211212 boolean shouldNotify = shouldNotify (existingPerson , updatedPerson );
212213 if (shouldNotify ) {
213214 if (configFacade .getSymptomJournalConfig ().getUrl () != null ) {
@@ -224,17 +225,17 @@ public boolean notifyExternalJournalPersonUpdate(de.symeda.sormas.api.person.Per
224225 * Note: This method just checks for changes in the Person data.
225226 * It can not check for Contact related data such as FollowUpUntil dates.
226227 */
227- private boolean shouldNotify (de . symeda . sormas . api . person . PersonDto existingPerson , de . symeda . sormas . api . person . PersonDto updatedPerson ) {
228+ private boolean shouldNotify (PersonDto existingPerson , PersonDto updatedPerson ) {
228229 boolean relevantPerson = SymptomJournalStatus .ACCEPTED .equals (existingPerson .getSymptomJournalStatus ())
229230 || SymptomJournalStatus .REGISTERED .equals (existingPerson .getSymptomJournalStatus ());
230- boolean relevantFieldsUpdated = Comparator .comparing (de . symeda . sormas . api . person . PersonDto ::getFirstName , Comparator .nullsLast (Comparator .naturalOrder ()))
231- .thenComparing (de . symeda . sormas . api . person . PersonDto ::getLastName , Comparator .nullsLast (Comparator .naturalOrder ()))
232- .thenComparing (de . symeda . sormas . api . person . PersonDto ::getEmailAddress , Comparator .nullsLast (Comparator .naturalOrder ()))
233- .thenComparing (de . symeda . sormas . api . person . PersonDto ::getPhone , Comparator .nullsLast (Comparator .naturalOrder ()))
234- .thenComparing (de . symeda . sormas . api . person . PersonDto ::getBirthdateDD , Comparator .nullsLast (Comparator .naturalOrder ()))
235- .thenComparing (de . symeda . sormas . api . person . PersonDto ::getBirthdateMM , Comparator .nullsLast (Comparator .naturalOrder ()))
236- .thenComparing (de . symeda . sormas . api . person . PersonDto ::getBirthdateYYYY , Comparator .nullsLast (Comparator .naturalOrder ()))
237- .thenComparing (de . symeda . sormas . api . person . PersonDto ::getSex , Comparator .nullsLast (Comparator .naturalOrder ()))
231+ boolean relevantFieldsUpdated = Comparator .comparing (PersonDto ::getFirstName , Comparator .nullsLast (Comparator .naturalOrder ()))
232+ .thenComparing (PersonDto ::getLastName , Comparator .nullsLast (Comparator .naturalOrder ()))
233+ .thenComparing (PersonDto ::getEmailAddress , Comparator .nullsLast (Comparator .naturalOrder ()))
234+ .thenComparing (PersonDto ::getPhone , Comparator .nullsLast (Comparator .naturalOrder ()))
235+ .thenComparing (PersonDto ::getBirthdateDD , Comparator .nullsLast (Comparator .naturalOrder ()))
236+ .thenComparing (PersonDto ::getBirthdateMM , Comparator .nullsLast (Comparator .naturalOrder ()))
237+ .thenComparing (PersonDto ::getBirthdateYYYY , Comparator .nullsLast (Comparator .naturalOrder ()))
238+ .thenComparing (PersonDto ::getSex , Comparator .nullsLast (Comparator .naturalOrder ()))
238239 .compare (existingPerson , updatedPerson )
239240 != 0 ;
240241 return relevantPerson && relevantFieldsUpdated ;
@@ -385,24 +386,28 @@ public ExternalJournalValidation validatePatientDiaryPerson(de.symeda.sormas.api
385386 }
386387
387388 private boolean isEmailAvailable (de .symeda .sormas .api .person .PersonDto person ) {
388- PatientDiaryQueryResponse response = queryPatientDiary (EMAIL_QUERY_PARAM , person .getEmailAddress ())
389+ PatientDiaryQueryResponse response = queryPatientDiary (EMAIL_QUERY_PARAM , person .getEmailAddress ())
389390 .orElseThrow (() -> new RuntimeException ("Could not query patient diary for Email address availability" ));
390391 boolean notUsed = response .getCount () == 0 ;
391- boolean samePerson = response .getResults ().stream ().map (PatientDiaryPersonData ::getIdatId )
392- .map (PatientDiaryIdatId ::getIdat )
393- .map (PatientDiaryPersonDto ::getPersonUUID )
394- .anyMatch (uuid -> person .getUuid ().equals (uuid ));
392+ boolean samePerson = response .getResults ()
393+ .stream ()
394+ .map (PatientDiaryPersonData ::getIdatId )
395+ .map (PatientDiaryIdatId ::getIdat )
396+ .map (PatientDiaryPersonDto ::getPersonUUID )
397+ .anyMatch (uuid -> person .getUuid ().equals (uuid ));
395398 return notUsed || samePerson ;
396399 }
397400
398401 private boolean isPhoneAvailable (de .symeda .sormas .api .person .PersonDto person , String phone ) {
399402 PatientDiaryQueryResponse response = queryPatientDiary (MOBILE_PHONE_QUERY_PARAM , phone )
400- .orElseThrow (() -> new RuntimeException ("Could not query patient diary for phone number availability" ));
403+ .orElseThrow (() -> new RuntimeException ("Could not query patient diary for phone number availability" ));
401404 boolean notUsed = response .getCount () == 0 ;
402- boolean samePerson = response .getResults ().stream ().map (PatientDiaryPersonData ::getIdatId )
403- .map (PatientDiaryIdatId ::getIdat )
404- .map (PatientDiaryPersonDto ::getPersonUUID )
405- .anyMatch (uuid -> person .getUuid ().equals (uuid ));
405+ boolean samePerson = response .getResults ()
406+ .stream ()
407+ .map (PatientDiaryPersonData ::getIdatId )
408+ .map (PatientDiaryIdatId ::getIdat )
409+ .map (PatientDiaryPersonDto ::getPersonUUID )
410+ .anyMatch (uuid -> person .getUuid ().equals (uuid ));
406411 return notUsed || samePerson ;
407412 }
408413
@@ -435,8 +440,8 @@ public Optional<PatientDiaryQueryResponse> queryPatientDiary(String key, String
435440
436441 private String getValidationMessage (EnumSet <PatientDiaryValidationError > validationErrors ) {
437442 return validationErrors .stream ()
438- .map (PatientDiaryValidationError ::getErrorLanguageKey )
439- .map (I18nProperties ::getValidationError )
440- .collect (Collectors .joining ("\n " ));
443+ .map (PatientDiaryValidationError ::getErrorLanguageKey )
444+ .map (I18nProperties ::getValidationError )
445+ .collect (Collectors .joining ("\n " ));
441446 }
442447}
0 commit comments