From 4aed4ae668a00b060606d901d1b9c3700a042265 Mon Sep 17 00:00:00 2001 From: Pa-Touche <47572440+Pa-Touche@users.noreply.github.com> Date: Tue, 20 Jan 2026 10:31:58 +0100 Subject: [PATCH 01/46] Added properties, started cleanup. --- .run-configs/re-build-deploy-ear.sh | 22 ++++ .../src/main/resources/strings.properties | 101 ++++++++++++++++++ .../common/messaging/EmailService.java | 4 +- .../backend/common/messaging/SmsService.java | 3 +- .../SystemConfigurationValueEjb.java | 1 + 5 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 .run-configs/re-build-deploy-ear.sh diff --git a/.run-configs/re-build-deploy-ear.sh b/.run-configs/re-build-deploy-ear.sh new file mode 100644 index 00000000000..ac7e47ab0e3 --- /dev/null +++ b/.run-configs/re-build-deploy-ear.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +echo "Build started at: $(date '+%H:%M:%S.%3N')" + +cd ./sormas-base + +echo "Executed from path: $(pwd)" + +set MAVEN_OPTS=-Xmx4g -Xms2g -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+UseParallelGC +mvnd.cmd package -o -nsu -pl ../sormas-ear -Dmaven.test.skip \ +-Dmaven.javadoc.skip=true \ +-Dmaven.source.skip=true \ +-Dmaven.compile.fork=true \ +-Dlicense.skip=true + +echo "un/deploy sormas-ear" +# asadmin.bat --port 6048 undeploy sormas-ear 2>/dev/null || true +asadmin.bat --port 6048 deploy --force ../sormas-ear/target/sormas-ear.war + +END_TIME=$(date +%s) +echo "Build finished: $(date -d @$END_TIME '+%H:%M:%S.%3N')" + diff --git a/sormas-api/src/main/resources/strings.properties b/sormas-api/src/main/resources/strings.properties index 62384e048e9..351889eee32 100644 --- a/sormas-api/src/main/resources/strings.properties +++ b/sormas-api/src/main/resources/strings.properties @@ -1980,6 +1980,107 @@ infoSystemConfigurationValueDescriptionEmailSenderName=Name that will be set as infoSystemConfigurationValueDescriptionSmsSenderName=Name that will be set as the sender of SMS notifications sent out by the system. infoSystemConfigurationValueDescriptionSmsAuthKey=SORMAS supports the delivery of SMS notifications via Vonage (https://www.vonage.com/communications-apis/). You need to specify a valid authentication key and secret in order to use this feature. SORMAS will not attempt to send out SMS if these properties are left empty. infoSystemConfigurationValueDescriptionSmsAuthSecret=Secret for SMS authentication. +infoSystemConfigurationValueDescription.AUTHENTICATION_PROVIDER=Specifies the authentication provider to be used for the user interface and the ReST API. +infoSystemConfigurationValueDescription.SMS_AUTH_SECRET=SORMAS supports the delivery of SMS notifications via Vonage (https://www.vonage.com/communications-apis/). You need to specify a valid authentication key and secret in order to use this feature. SORMAS will not attempt to send out SMS if these properties are left empty. +infoSystemConfigurationValueDescription.MAP_TILES_URL=Tileset of the map +infoSystemConfigurationValueDescription.SORMAS2SORMAS_ID=The S2S ID of this instance +infoSystemConfigurationValueDescription.CENTRAL_ETCD_HOST=The hostname of the etcd instance providing data. +infoSystemConfigurationValueDescription.GEOCODING_LONGITUDE_JSON_PATH=JSON paths of the longitude and latitude in the result of the geocoding service calls. +infoSystemConfigurationValueDescription.INTERFACE_SYMPTOMJOURNAL_URL=SYMPTOM JOURNALS (e.g. PIA) Website that is displayed inside an iFrame to create a symptom journal user account for a contact person. If left empty, this feature will be disabled. +infoSystemConfigurationValueDescription.COUNTRY_NAME=The name of the country this SORMAS instance is used in. If the database contains countries, this property must be filled in and match the name of one of those countries for SORMAS to work properly. The country will be used to pre-fill the country fields of locations. +infoSystemConfigurationValueDescription.CUSTOM_BRANDING_USELOGINSIDEBAR=Determines whether the login sidebar that contains the SORMAS logo, description, and logos of the original creators should be shown. +infoSystemConfigurationValueDescription.DASHBOARD_MAP_MARKER_LIMIT=Maximum number of cases, contacts and events to be displayed automatically on the Dashboard and Statistics maps. If the amount of markers exceed this threshold, a warning message is displayed instead. Leaving this empty means that markers are always shown. Please note that this could significantly slow down your systems if there are a lot of markers to be displayed. +infoSystemConfigurationValueDescription.INTERFACE_EXTERNAL_MESSAGE_ADAPTER_JNDI_NAME=JNDI name of the external message adapter that is connected to this SORMAS instance. Specifies where additionally deployed modules are stored. +infoSystemConfigurationValueDescription.DAYS_AFTER_SYSTEM_EVENT_GETS_DELETED=Number of days after which system events are deleted from the database. An example for a system event is the last date at which data from an external service was pulled. default: 90 +infoSystemConfigurationValueDescription.CREATE_DEFAULT_ENTITIES=Determines whether default infrastructure data and users are created when the server is starting with an empty database. Please note that a default admin user is always created to make sure that you can log in and use the system. +infoSystemConfigurationValueDescription.COUNTRY_CENTER_LATITUDE=GPS coordinates of the geographical center of the country SORMAS is used in. The maps on the Dashboard and in the Statistics screen will be centered to these coordinates, if no user-region is provided or map.usecountrycenter=true +infoSystemConfigurationValueDescription.NAME_SIMILARITY_THRESHOLD=The similarity threshold after which two names are identified as similar enough to consider them for duplicate detection. The default value should work for most servers. If you need to change it, please change it carefully as slightly higher or lower values already lead to significant differences. The D after the number is required and specified that it is a decimal number. Value-Range: 0.0D - 1.0D +infoSystemConfigurationValueDescription.CENTRAL_ETCD_CLIENT_NAME=The client name used in etcd authentication +infoSystemConfigurationValueDescription.SORMAS2SORMAS_KEYSTORE_NAME=Name of the key store file. +infoSystemConfigurationValueDescription.STEP_SIZE_FOR_CSV_EXPORT=Number of entries in detailed CSV exports that are processed in one batch. Only change this value if there is a good reason for it, i.e. there are performance issues with the detailed exports that could be improved by it. +infoSystemConfigurationValueDescription.CENTRAL_LOCATION_SYNC=If set to true, all infrastructure data from the central server will be synchronized into the local SORMAS database at startup and on a nightly basis. +infoSystemConfigurationValueDescription.AUTHENTICATION_PROVIDER_USER_SYNC_AT_STARTUP=Specifies whether server startup will trigger a user sync to Keycloak. Since this is mainly needed for an initial sync, it is recommended to disable this property once that initial sync has been performed. +infoSystemConfigurationValueDescription.SORMAS2SORMAS_TRUSTSTORE_NAME=Name of the trust store file. +infoSystemConfigurationValueDescription.AUDITOR_ATTRIBUTE_LOGGING=Determines whether database logs storing the information which user changed which data at which point in time also includes the specific values that were changed. +infoSystemConfigurationValueDescription.INTERFACE_PATIENTDIARY_FRONTEND_AUTHURL=URL used to retrieve tokens for frontend requests. If not specified, the authurl is used instead. +infoSystemConfigurationValueDescription.CUSTOM_BRANDING_NAME=Custom name that is used instead of SORMAS for this instance. +infoSystemConfigurationValueDescription.COUNTRY_EPID_PREFIX=If your country is using so-called EPID numbers to identify cases, you need to specify the country prefix here. +infoSystemConfigurationValueDescription.UI_URL=Path to the folder on the server where documents added as attachments to cases, contacts or events are stored. URL of the SORMAS UI Will be used in email and SMS notifications to link to a specific page. +infoSystemConfigurationValueDescription.INTERFACE_SYMPTOMJOURNAL_AUTHURL=Authentication details necessary to access the external symptom journal. +infoSystemConfigurationValueDescription.SKIP_DEFAULT_PASSWORD_CHECK=Determines whether logging in as a default user using a default password will bring up a prompt that asks the user to change their password. +infoSystemConfigurationValueDescription.APP.URL=The URL that can be used to download the Android .apk file. Must contain a placeholder for the app version, or a specific version number (not recommended). If you want to use the mobile app, this property must be filled in because the app is using it to automatically download new versions. Example: https://SERVER-NAME/downloads/sormas-%version-release.apk +infoSystemConfigurationValueDescription.SORMAS2SORMAS_IGNORE_PROPERTY_EXTERNAL_ID=Control which values are ignored when shared / overwritten trough S2S. Is applied to all entities shared trough S2S +infoSystemConfigurationValueDescription.INTERFACE_PATIENT_DIARY_ACCEPT_PHONE_CONTACT=Configure weather the phone number is accepted for registering a person in the patient diary +infoSystemConfigurationValueDescription.CASE_CLASSIFICATION_ALL=Configuration for case classification calculation for all diseases. +infoSystemConfigurationValueDescription.MAP_TILES_ATTRIBUTION=Attribution of the tileset, required for tiles from OpenStreatMap @see https://www.openstreetmap.org/copyright +infoSystemConfigurationValueDescription.IMPORT_FILE_SIZE_LIMIT_MB=Maximum file size allowed to upload for import +infoSystemConfigurationValueDescription.INTERFACE_PATIENT_DIARY_PASSWORD=Credentials used for both authurls. +infoSystemConfigurationValueDescription.MINIMUM_EMANCIPATED_AGE=Minimum emancipated age +infoSystemConfigurationValueDescription.SORMAS2SORMAS_OIDC_REALM=Name of our authorization realm. +infoSystemConfigurationValueDescription.CUSTOM_BRANDING_LOGINBACKGROUND_PATH=The path on the server to an image file to replace the standard world map background of the login page. Please have a look at the "File Paths" section to see how paths are supposed to be formatted depending on your operating system. +infoSystemConfigurationValueDescription.CENTRAL_ETCD_CA_PATH=The path to the CA cert trusted by etcd clients. +infoSystemConfigurationValueDescription.INTERFACE_PATIENTDIARY_PROBANDSURL=URL that is used to register new persons in the patient diary. +infoSystemConfigurationValueDescription.GEOCODING_SERVICE_URL_TEMPLATE=URL template used to access a geocoding service. If specified, the application can generate geo coordinates based on entered addresses. Example (Germany): https://sg.geodatenzentrum.de/gdz_geokodierung_bund__{credentials}/geosearch.json?query=${street}+${houseNumber},${postalCode}+${city}&filter=typ:haus&count1 Example (France): https://api-adresse.data.gouv.fr/search?q=${houseNumber}+${street},${postalCode}+${city}&type=housenumber&limit=1 +infoSystemConfigurationValueDescription.ALLOWED_FILE_EXTENSIONS=A list of allowed file types to be uploaded +infoSystemConfigurationValueDescription.SORMAS2SORMAS_ETCD_KEY_PREFIX=The etcd key prefix which is used to store s2s related information +infoSystemConfigurationValueDescription.CUSTOM_BRANDING_LOGO_PATH=The path on the server to an image file to replace the standard SORMAS logo. Please have a look at the "File Paths" section to see how paths are supposed to be formatted depending on your operating system. +infoSystemConfigurationValueDescription.CASE_CLASSIFICATION_CHOLERA=Configuration for case classification calculation for specific diseases. +infoSystemConfigurationValueDescription.DOCUMENTS_PATH=Path were SORMAS will store documents added by users +infoSystemConfigurationValueDescription.INTERFACE_PATIENT_DIARY_AUTHURL=Configure weather the phone number is accepted for registering a person in the patient diary +infoSystemConfigurationValueDescription.GENERATED_PATH=Path where generated files, such as import templates or the data dictionary, are stored. +infoSystemConfigurationValueDescription.DOCGENERATION_NULL_REPLACEMENT=Replacement for empty variables in generated documents. +infoSystemConfigurationValueDescription.INTERFACE_PATIENTDIARY_EMAIL=Credentials used for both authurls. +infoSystemConfigurationValueDescription.AUTHENTICATION_PROVIDER_SYNCED_NEW_USER_ROLE=Specifies what user role should be used as default for new users synced from the authentication provider (e.g. Keycloak). Must be set to the name of an existing user role in the database when the feature AUTH_PROVIDER_TO_SORMAS_USER_SYNC is active +infoSystemConfigurationValueDescription.DOCUMENT_UPLOAD_SIZE_LIMIT_MB=Maximum file size allowed for document and document template upload +infoSystemConfigurationValueDescription.SORMAS2SORMAS_KEYSTORE_PASS=Password of the key store. +infoSystemConfigurationValueDescription.GEOCODING_LATITUDE_JSON_PATH=JSON paths of the longitude and latitude in the result of the geocoding service calls. +infoSystemConfigurationValueDescription.SORMAS2SORMAS_OIDC_CLIENT_ID=The client ID used in OIDC. +infoSystemConfigurationValueDescription.CASE_CLASSIFICATION_CORONAVIRUS=Configuration for case classification calculation for specific diseases. +infoSystemConfigurationValueDescription.NEGATIVE-COVID-TESTS-MAX-AGE-DAYS=Number of days after which system events are deleted from the database. An example for a system event is the last date at which data from an external service was pulled. default: 90 +infoSystemConfigurationValueDescription.TEMP_PATH=Path where temporary files will be stored. Both Payara and PostgreSQL need read and write access to this folder. Temporary files are deleted on a nightly basis, so make sure to not store any important files here. +infoSystemConfigurationValueDescription.INTERFACE_SYMPTOM_JOURNAL_CLIENTID=Authentication details necessary to access the external symptom journal. +infoSystemConfigurationValueDescription.SORMAS2SORMAS_OIDC_CLIENT_SECRET=The client secret used in OIDC. +infoSystemConfigurationValueDescription.MAP_ZOOM=Initial zoom level of the maps on the Dashboard and the Statistics screen +infoSystemConfigurationValueDescription.AUDIT_LOGGER_CONFIG=Config file path of the audit logger +infoSystemConfigurationValueDescription.INFRASTRUCTURE_SYNC_THRESHOLD=The maximum number of communities and facilities that can be synchronized in a single infrastructure synchronization call. Lower this value if you expect mobile app users to have a bad internet connection frequently. +infoSystemConfigurationValueDescription.AUDIT_SOURCE_SITE=Identifies the SORMAS instance in the audit log +infoSystemConfigurationValueDescription.SORMAS2SORMAS_IGNORE_PROPERTY_ADDITIONAL_DETAILS=Control which values are ignored when shared / overwritten trough S2S. Is applied to all entities shared trough S2S +infoSystemConfigurationValueDescription.SORMAS2SORMAS_IGNORE_PROPERTY_INTERNAL_TOKEN=Control which values are ignored when shared / overwritten trough S2S. Is applied to all entities shared trough S2S +infoSystemConfigurationValueDescription.INTERFACE_PATIENTDIARY_DEFAULTUSER_USERNAME=Credentials of the default user used by the patient diary to communicate with the SORMAS API. Can be used to automate the setup process of new systems. +infoSystemConfigurationValueDescription.SMS_SENDER_NAME=Name that will be set as the sender of SMS notifications sent out by the system. +infoSystemConfigurationValueDescription.CENTRAL_OIDC_URL=SORMAS Central URL of the OIDC server (e.g., Keycloak) authenticating 3rd party requests. +infoSystemConfigurationValueDescription.SURVNET_VERSION_ENDPOINT=Name of the endpoint for getting the version of the SurvNet Gateway +infoSystemConfigurationValueDescription.SMS_AUTH_KEY=SORMAS supports the delivery of SMS notifications via Vonage (https://www.vonage.com/communications-apis/). You need to specify a valid authentication key and secret in order to use this feature. SORMAS will not attempt to send out SMS if these properties are left empty. +infoSystemConfigurationValueDescription.COUNTRY_CENTER_LONGITUDE=GPS coordinates of the geographical center of the country SORMAS is used in. The maps on the Dashboard and in the Statistics screen will be centered to these coordinates, if no user-region is provided or map.usecountrycenter=true +infoSystemConfigurationValueDescription.DUPLICATE_CHECKS_EXCLUDE_PERSONS_ONLY_LINKED_TO_ARCHIVED_ENTRIES=Excludes persons that are only related to archived cases, contacts or event participants when searching for duplicate persons during case, contact or event participant creation. Setting this value to true might increase performance during imports and entity creation, but will likely lead to more duplicate persons in the system. +infoSystemConfigurationValueDescription.INTERFACE_SYMPTOM_JOURNAL_SECRET=Authentication details necessary to access the external symptom journal. +infoSystemConfigurationValueDescription.CUSTOM_BRANDING=SORMAS allows server administrators to customize the name and logo of the application. This will for example affect the login page, main menu, and generated files (like exports or import templates). Further customization can be done by editing the files in the custom directory, e.g. to add additional supporter logos to the sidebar or a disclaimer text to the login area. Determines whether custom branding is supposed to be used. If custom branding is disabled, the following properties as well as the files in the custom directory will have no effect. +infoSystemConfigurationValueDescription.INTERFACE_PATIENTDIARY_URL=PATIENT DIARIES (e.g. Climedo) Website that is displayed inside an iFrame to create a patient diary user account for a contact person. If left empty, this feature will be disabled. +infoSystemConfigurationValueDescription.SORMAS2SORMAS_DISTRICT_EXTERNAL_ID=External id of the district to which the Cases/Contacts to be assigned when accepting a share request +infoSystemConfigurationValueDescription.GEOCODING_EPSG4326_WKT=EPSG4326 WKT string used to interpret geo coordinates (e.g. axis order). +infoSystemConfigurationValueDescription.SORMAS_STATS_URL=URL of the SORMAS STATS app Will be used to create a link inside SORMAS. Must be HTTPS. +infoSystemConfigurationValueDescription.INTERFACE_SYMPTOM_JOURNAL_DEFAULTUSER_USERNAME=Credentials of the default user used by the symptom journal to communicate with the SORMAS API. Can be used to automate the setup process of new systems. +infoSystemConfigurationValueDescription.EMAIL_SENDER_NAME=Name that will be set as the sender of email notifications sent out by the system. +infoSystemConfigurationValueDescription.COUNTRY_LOCALE=The default locale each user will be using as long as they don't overwrite it in their settings. It impacts both the language that SORMAS is displayed in as well as the date and number formats. This property must be filled in for SORMAS to work properly. If it's not specified, the application will try to fall back to English. +infoSystemConfigurationValueDescription.INTERFACE_PATIENTDIARY_TOKEN_LIFETIME=Number of seconds tokens fetched via the authurl (and frontendAuthurl) are cached. Defaults to 21600 (6 hrs.). +infoSystemConfigurationValueDescription.CENTRAL_ETCD_CLIENT_PASSWORD=The client password used in etcd authentication +infoSystemConfigurationValueDescription.SORMAS2SORMAS_PATH=SORMAS2SORMAS INTERFACE Path on the server where certificates and files related to SORMAS2SORMAS are stored. Please have a look at the "File Paths" section to see how paths are supposed to be formatted depending on your operating system. +infoSystemConfigurationValueDescription.MAP_USECOUNTRYCENTER=Forces the dashboard map to always center on the country.center coordinates defined above. +infoSystemConfigurationValueDescription.INTERFACE_PATIENT_DIARY_DEFAULTUSER_PASSWORD=Authentication details necessary to access the external patient diary. URL used to retrieve tokens for backend requests. +infoSystemConfigurationValueDescription.CUSTOM_PATH=Path where custom files that are used by the system for various purposes can be stored, e.g. HTML content for the login page or a custom logo. +infoSystemConfigurationValueDescription.SORMAS2SORMAS_ROOT_CA_ALIAS=The alias of the trusted root CA +infoSystemConfigurationValueDescription.EMAIL_SENDER_ADDRESS=^.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ +infoSystemConfigurationValueDescription.DUPLICATECHECKS_NATIONAL_HEALTH_ID_OVERRIDES_CRITERIA=Determines whether the national health ID is used to unambiguously identify duplicate persons irrespective of whether other fields match or not. +infoSystemConfigurationValueDescription.INTERFACE_SYMPTOM_JOURNAL_DEFAULTUSER_PASSWORD=Credentials of the default user used by the symptom journal to communicate with the SORMAS API. Can be used to automate the setup process of new systems. +infoSystemConfigurationValueDescription.MINIMUM_ADULT_AGE=Minimum adult age +infoSystemConfigurationValueDescription.SORMAS2SORMAS_IGNORE_PROPERTY_EXTERNAL_TOKEN=Control which values are ignored when shared / overwritten trough S2S. Is applied to all entities shared trough S2S +infoSystemConfigurationValueDescription.RSCRIPT_EXECUTABLE=Path to the R script executable +infoSystemConfigurationValueDescription.SURVNET_URL=URL of the SurvNet Gateway. Leaving this empty will disable all features related to SurvNet. +infoSystemConfigurationValueDescription.SORMAS2SORMAS_TRUSTSTORE_PASS=Password of the trust store. +infoSystemConfigurationValueDescription.CSV_SEPARATOR=The character used in .csv files to separate columns from each other. Should match the separator that is commonly used in the locale specified in country.locale. +infoSystemConfigurationValueDescription.DEV_MODE=Dev mode allows administrators to use functionalities that are not intended for live systems, such as creating random cases for testing or training purposes. +infoSystemConfigurationValueDescription.MENU_BACKGROUND_COLOR=Allows to distinguish various SORMAS instances by specifying a custom background color. You can either use defaults: default|red|green|indigo|gray or use the hexadecimal format, example: #dd2b0e or #4AA +infoSystemConfigurationValueDescription.MENU_SUBTITLE=Will be displayed under the application name in the menu. Can be used to define name of the environment: PRODUCTION - TEST etc. notificationCannotCreate=Cannot Create Or Edit Notification notificationCreationNotAllowedWithoutSurveillanceReport=Notifier creation or modification is not allowed when a surveillance report already exists for this case. diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/EmailService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/EmailService.java index 7b82ac87172..89ef7a1c276 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/EmailService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/EmailService.java @@ -39,11 +39,11 @@ import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; -import de.symeda.sormas.api.systemconfiguration.SystemConfigurationValueFacade; -import de.symeda.sormas.backend.systemconfiguration.SystemConfigurationValueEjb; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import de.symeda.sormas.api.systemconfiguration.SystemConfigurationValueFacade; + @Stateless(name = "EmailService") @LocalBean public class EmailService { diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/SmsService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/SmsService.java index 99d9eef0a5a..381482d5e2e 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/SmsService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/SmsService.java @@ -24,8 +24,6 @@ import javax.ejb.LocalBean; import javax.ejb.Stateless; -import de.symeda.sormas.api.systemconfiguration.SystemConfigurationValueFacade; -import de.symeda.sormas.backend.systemconfiguration.SystemConfigurationValueEjb; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,6 +38,7 @@ import com.nexmo.client.sms.SmsSubmissionResponseMessage; import com.nexmo.client.sms.messages.TextMessage; +import de.symeda.sormas.api.systemconfiguration.SystemConfigurationValueFacade; import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; @Stateless(name = "SmsService") diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/systemconfiguration/SystemConfigurationValueEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/systemconfiguration/SystemConfigurationValueEjb.java index 195d080bc22..3146598b319 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/systemconfiguration/SystemConfigurationValueEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/systemconfiguration/SystemConfigurationValueEjb.java @@ -132,6 +132,7 @@ public String getValue(final String key) { } @PermitAll + @Override public boolean exists(final String key) { return configurationValuesByKey.containsKey(key); } From b56ac3cfb63598b72147640845cd06c8f5c2d361 Mon Sep 17 00:00:00 2001 From: Pa-Touche <47572440+Pa-Touche@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:29:40 +0100 Subject: [PATCH 02/46] Started refactoring to use new facade. --- .run-configs/AGENTS.md | 277 ++++++++++++++++++ .../de/symeda/sormas/api/FacadeProvider.java | 16 +- .../SystemConfiguration.java | 106 +++++++ .../SystemConfigurationAccessorFacade.java | 63 ++++ .../SystemConfigurationValueDataProvider.java | 8 +- ...temConfigurationValueDiseasesProvider.java | 1 - .../sormas/api/systemconfiguration/Test.java | 4 + .../sormas/api/utils/CsvStreamUtils.java | 17 +- .../de/symeda/sormas/api/utils/Tuple.java | 20 ++ .../src/main/resources/strings.properties | 2 +- .../sormas/backend/caze/CaseFacadeEjb.java | 4 +- .../CaseClassificationFacadeEjb.java | 4 +- .../SurveillanceReportFacadeEjb.java | 2 +- .../ClinicalVisitFacadeEjb.java | 4 +- .../sormas/backend/common/CronService.java | 3 +- .../common/StartupShutdownService.java | 2 +- .../backend/common/messaging/SmsService.java | 6 +- .../backend/contact/ContactFacadeEjb.java | 5 +- .../docgeneration/DocGenerationHelper.java | 3 +- .../DocumentTemplateFacadeEjb.java | 3 +- .../document/DocumentStorageService.java | 3 +- .../EpipulseDiseaseExportFacadeEjb.java | 4 +- .../event/EventParticipantFacadeEjb.java | 4 +- .../externalemail/ExternalEmailFacadeEjb.java | 5 +- .../AutomaticLabMessageProcessor.java | 4 +- ...ernalSurveillanceToolGatewayFacadeEjb.java | 4 +- .../backend/geo/GeoShapeProviderEjb.java | 3 +- .../backend/geocoding/GeocodingService.java | 25 +- .../immunization/ImmunizationFacadeEjb.java | 6 +- .../importexport/DatabaseExportService.java | 4 +- .../backend/importexport/ExportFacadeEjb.java | 3 +- .../backend/importexport/ImportFacadeEjb.java | 3 +- .../sormas/backend/info/InfoFacadeEjb.java | 3 +- .../ClientInfraSyncFacadeEjb.java | 3 +- .../country/CountryFacadeEjb.java | 3 +- .../backend/person/PersonFacadeEjb.java | 2 +- .../sormas/backend/person/PersonService.java | 5 +- .../sample/AdditionalTestFacadeEjb.java | 3 +- .../backend/sample/PathogenTestFacadeEjb.java | 2 +- .../sormas/backend/sample/SampleService.java | 3 +- .../AbstractSormasToSormasInterface.java | 3 +- .../SormasToSormasFacadeEjb.java | 2 +- .../SormasToSormasEncryptionFacadeEjb.java | 2 +- .../SormasToSormasEntitiesHelper.java | 2 +- .../share/ShareDataBuilderHelper.java | 2 +- .../SystemConfigurationAccessorEjb.java | 145 +++++++++ .../sormas/backend/task/TaskFacadeEjb.java | 2 +- .../therapy/PrescriptionFacadeEjb.java | 2 +- .../TravelEntryImportFacadeEjb.java | 2 +- .../sormas/backend/user/KeycloakService.java | 3 +- .../sormas/backend/user/UserFacadeEjb.java | 2 +- .../visualization/VisualizationFacadeEjb.java | 2 +- .../src/main/resources/sql/sormas_schema.sql | 38 ++- .../de/symeda/sormas/rest/RestConfig.java | 3 +- .../sormas/rest/filter/SessionFilter.java | 4 +- .../rest/resources/BAGExportResource.java | 4 +- .../sormas/rest/resources/InfoResource.java | 37 ++- .../MultiAuthenticationMechanism.java | 11 +- .../rest/security/s2s/oidc/S2SAuthFilter.java | 4 +- .../java/de/symeda/sormas/ui/AboutView.java | 10 +- .../ActivityAsCase/ActivityAsCaseField.java | 4 +- .../ui/ActivityAsCase/ActivityAsCaseForm.java | 8 +- .../java/de/symeda/sormas/ui/MainScreen.java | 2 +- .../main/java/de/symeda/sormas/ui/Menu.java | 8 +- .../java/de/symeda/sormas/ui/SormasUI.java | 2 +- .../sormas/ui/StartupShutdownService.java | 3 +- .../AefiInvestigationDataForm.java | 4 +- .../components/form/AefiDataForm.java | 2 +- .../sormas/ui/caze/AbstractCaseGrid.java | 4 +- .../sormas/ui/caze/AbstractCaseView.java | 4 +- .../symeda/sormas/ui/caze/CaseController.java | 2 +- .../symeda/sormas/ui/caze/CaseCreateForm.java | 2 +- .../symeda/sormas/ui/caze/CaseDataForm.java | 23 +- .../symeda/sormas/ui/caze/CaseDataView.java | 3 +- .../symeda/sormas/ui/caze/CaseFilterForm.java | 2 +- .../sormas/ui/caze/CaseGridDetailed.java | 2 +- .../symeda/sormas/ui/caze/CaseInfoLayout.java | 2 +- .../de/symeda/sormas/ui/caze/CasesView.java | 9 +- .../caseselection/CaseSelectionGrid.java | 2 +- .../linelisting/LineListingLayout.java | 2 +- .../porthealthinfo/PortHealthInfoForm.java | 2 +- .../ui/clinicalcourse/ClinicalCourseForm.java | 2 +- .../ui/clinicalcourse/ClinicalVisitForm.java | 2 +- .../ui/clinicalcourse/ClinicalVisitGrid.java | 4 +- .../AbstractConfigurationView.java | 4 +- .../sormas/ui/configuration/DevModeView.java | 12 +- .../SystemConfigurationValueEditForm.java | 1 + .../ui/contact/AbstractContactGrid.java | 8 +- .../sormas/ui/contact/AdoptAddressLayout.java | 2 +- .../sormas/ui/contact/ContactCreateForm.java | 5 +- .../sormas/ui/contact/ContactDataForm.java | 15 +- .../sormas/ui/contact/ContactDataView.java | 7 +- .../ui/contact/ContactFollowUpGrid.java | 6 +- .../sormas/ui/contact/ContactsFilterForm.java | 4 +- .../sormas/ui/contact/ContactsView.java | 4 +- .../contactfield/ContactLineField.java | 3 +- .../customexport/CustomExportController.java | 6 +- .../contacts/ContactsDashboardView.java | 2 +- .../gis/GisDashboardMapComponent.java | 2 +- .../map/BaseDashboardMapComponent.java | 10 +- .../dashboard/map/DashboardMapComponent.java | 2 +- .../builders/CaseStatusCurveBuilder.java | 4 +- .../statistics/CaseStatisticsComponent.java | 4 +- .../summary/DiseaseSummaryComponent.java | 4 +- .../DocGenerationController.java | 2 +- .../ui/environment/EnvironmentCreateForm.java | 2 +- .../ui/environment/EnvironmentDataForm.java | 2 +- .../sormas/ui/epidata/CaseEpiDataView.java | 2 +- .../symeda/sormas/ui/epidata/EpiDataForm.java | 10 +- .../ui/epipulse/EpiPulseExportController.java | 2 +- .../sormas/ui/events/EventDataForm.java | 4 +- .../ui/events/EventParticipantsView.java | 2 +- .../sormas/ui/events/EventsFilterForm.java | 2 +- .../symeda/sormas/ui/events/EventsView.java | 2 +- .../sormas/ui/exposure/ExposureForm.java | 2 +- .../sormas/ui/exposure/ExposuresField.java | 6 +- .../ExternalMessageController.java | 4 +- .../externalmessage/ExternalMessageGrid.java | 4 +- .../externalmessage/ExternalMessagesView.java | 2 +- .../hospitalization/HospitalizationForm.java | 2 +- .../form/ImmunizationCreationForm.java | 2 +- .../components/form/ImmunizationDataForm.java | 2 +- .../ui/importer/AbstractImportLayout.java | 2 +- .../sormas/ui/importer/DataImporter.java | 4 +- .../ui/importer/DocumentMultiFileUpload.java | 2 +- .../ui/importer/DocumentTemplateReceiver.java | 4 +- .../DocumentUploadFinishedHandler.java | 2 +- .../ui/importer/DocumentUploadReceiver.java | 2 +- .../sormas/ui/importer/ImportReceiver.java | 4 +- .../sormas/ui/location/LocationEditForm.java | 2 +- .../ui/login/DefaultPasswordUIHelper.java | 2 +- .../symeda/sormas/ui/login/LoginHelper.java | 2 +- .../symeda/sormas/ui/login/LoginScreen.java | 21 +- .../de/symeda/sormas/ui/login/LoginUI.java | 6 +- .../de/symeda/sormas/ui/map/LeafletMap.java | 4 +- .../ui/person/PersonContactDetailsField.java | 4 +- .../sormas/ui/person/PersonCreateForm.java | 6 +- .../sormas/ui/person/PersonEditForm.java | 17 +- .../ui/person/PersonSelectionField.java | 3 +- .../person/PersonSideComponentsElement.java | 4 +- .../aggregate/AggregateReportsFilterForm.java | 2 +- .../sormas/ui/samples/AbstractSampleForm.java | 3 +- .../ui/samples/PathogenTestController.java | 4 +- .../sormas/ui/samples/PathogenTestForm.java | 19 +- .../EnvironmentSampleEditForm.java | 3 +- .../samples/humansample/HumanSampleGrid.java | 2 +- .../MultiAuthenticationMechanism.java | 2 +- .../ui/selfreport/SelfReportDataForm.java | 6 +- .../ui/statistics/AbstractStatisticsView.java | 2 +- .../ui/statistics/DatabaseExportView.java | 8 +- .../sormas/ui/statistics/StatisticsView.java | 4 +- .../sormas/ui/symptoms/SymptomsForm.java | 6 +- .../symeda/sormas/ui/task/TaskEditForm.java | 2 +- .../de/symeda/sormas/ui/task/TaskGrid.java | 4 +- .../ui/therapy/DrugSusceptibilityForm.java | 2 +- .../sormas/ui/therapy/PrescriptionGrid.java | 4 +- .../symeda/sormas/ui/therapy/TherapyForm.java | 4 +- .../sormas/ui/therapy/TreatmentGrid.java | 4 +- .../ui/travelentry/TravelEntryDataForm.java | 2 +- .../ui/travelentry/TravelEntryFilterForm.java | 2 +- .../components/TravelEntryCreateForm.java | 2 +- .../symeda/sormas/ui/user/UserController.java | 6 +- .../de/symeda/sormas/ui/user/UserGrid.java | 3 +- .../sormas/ui/user/UserSettingsForm.java | 2 +- .../sormas/ui/user/UserSyncHandler.java | 4 +- .../symeda/sormas/ui/utils/AbstractForm.java | 2 +- .../sormas/ui/utils/CustomizableGrid.java | 6 +- .../symeda/sormas/ui/utils/DownloadUtil.java | 10 +- .../sormas/ui/utils/ExportEntityName.java | 2 +- .../sormas/ui/utils/ExternalJournalUtil.java | 14 +- .../FieldAccessColumnStyleGenerator.java | 5 +- .../sormas/ui/utils/FieldAccessHelper.java | 4 +- .../ui/utils/GridExportStreamResource.java | 2 +- .../ui/utils/V7GridExportStreamResource.java | 2 +- .../ui/vaccination/VaccinationEditForm.java | 2 +- 175 files changed, 1060 insertions(+), 363 deletions(-) create mode 100644 .run-configs/AGENTS.md create mode 100644 sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfiguration.java create mode 100644 sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationAccessorFacade.java create mode 100644 sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/Test.java create mode 100644 sormas-api/src/main/java/de/symeda/sormas/api/utils/Tuple.java create mode 100644 sormas-backend/src/main/java/de/symeda/sormas/backend/systemconfiguration/SystemConfigurationAccessorEjb.java diff --git a/.run-configs/AGENTS.md b/.run-configs/AGENTS.md new file mode 100644 index 00000000000..0fb6067331e --- /dev/null +++ b/.run-configs/AGENTS.md @@ -0,0 +1,277 @@ +# AGENTS.md + +## Overview + +SORMAS (Surveillance Outbreak Response Management and Analysis System) is an open-source eHealth system designed for public health authorities to monitor infectious diseases and manage outbreak responses [1](#1-0) . The system consists of separate web and mobile applications optimized for disease surveillance, contact tracing, and outbreak management. + +## System Architecture + +### Multi-Module Maven Structure + +SORMAS follows a multi-module Maven architecture with clear separation of concerns [2](#1-1) : + +- **sormas-api**: Shared DTOs, interfaces, and business logic definitions +- **sormas-backend**: Server-side implementation with facades and services +- **sormas-ui**: Vaadin-based web application +- **sormas-rest**: REST API interface +- **sormas-app**: Android mobile application +- **sormas-base**: Parent POM with build configuration +- **sormas-cargoserver**: Local development server setup + +### Technology Stack + +The system uses Java EE 8 on Payara Server 5.2022.5 [3](#1-2) with: + +- **Backend**: EJB 3.2, JPA 2.2, JAX-RS 2.1, CDI 2.0 +- **Database**: PostgreSQL with Hibernate 5.6.15 +- **Web UI**: Vaadin 8.14.3 with GWT compiler +- **Mobile**: Android with ORMLite for SQLite +- **Authentication**: Keycloak 21.1.2 for OIDC/OAuth2 +- **API Documentation**: Swagger/OpenAPI 2.2.15 + +## Core Domain Model + +SORMAS manages public health data through interconnected entities: + +- **Person**: Central entity for demographic data +- **Case**: Disease cases with classification and outcome tracking +- **Contact**: Exposed individuals with follow-up status +- **Event**: Outbreaks or gatherings with participants +- **Sample & PathogenTest**: Laboratory specimen tracking +- **Immunization**: Vaccination history and records + +## Development Environment + +### Prerequisites + +- Java 11 JDK for backend development [4](#1-3) +- Maven 3.6.3+ for build management +- PostgreSQL database +- Payara Server for deployment + +### Setup Process + +1. Clone repository and configure Git for rebase workflow +2. Install Java 11 JDK and Maven +3. Set up local SORMAS server using Maven Cargo or Docker +4. Configure IDE (IntelliJ or Eclipse) with proper plugins +5. Build project with `mvn install` from sormas-base directory + +## Key Development Patterns + +### Facade-Service Architecture + +Backend follows a clear separation: + +- **Facades**: EJBs with `@RightsAllowed` annotations for security +- **Services**: Business logic implementation with JPA queries +- **DTOs**: Data transfer objects for client communication + +### Testing Framework + +Uses comprehensive testing approach [5](#1-4) : + +- JUnit 5 for core testing +- Hamcrest for matchers +- Mockito for mocking +- ArchUnit for architectural rules +- Testcontainers for PostgreSQL integration tests + +### Security Model + +Multi-layered security with: + +- OIDC/OAuth2 via Keycloak +- Role-based access control with `@RightsAllowed` +- Jurisdiction-based data filtering +- Pseudonymization for GDPR compliance + +## Important Configuration + +### sormas.properties + +Main configuration file controls [6](#1-5) : + +- Feature flags and server settings +- Authentication providers +- Database connections +- File paths and external service URLs + +### Feature Management + +System uses feature toggles in `FeatureType` enum [7](#1-6) to enable/disable functionality per deployment. + +## API Documentation + +REST API is automatically documented with OpenAPI specification [8](#1-7) : + +- Semantic versioning (X.Y.Z) +- Development branch for ongoing work +- Feature branches for new functionality +- Pull requests with code review requirements + +## Documentation Structure + +Comprehensive documentation in docs/ folder: + +- `CONTRIBUTING.md`: Development guidelines +- `DEVELOPMENT_ENVIRONMENT.md`: Setup instructions +- `SERVER_SETUP.md`: Production deployment +- `SERVER_CUSTOMIZATION.md`: Configuration options + +## Notes + +This reference document provides essential technical information for understanding and working with the SORMAS codebase. For detailed implementation specifics, refer to the individual module README files and the comprehensive wiki documentation available at https://wiki.sorm.as. + +Wiki pages you might want to explore: + +- [Overview (SORMAS-Foundation/SORMAS-Project)](/wiki/SORMAS-Foundation/SORMAS-Project#1) + +### Citations + +**File:** README.md (L16-19) + +```markdown +# SORMAS + +**SORMAS** (Surveillance Outbreak Response Management and Analysis System) is an open source eHealth system - consisting of separate web and mobile apps - that is geared towards optimizing the processes used in monitoring the spread of infectious diseases and responding to outbreak situations. + +``` + +**File:** README.md (L77-93) + +```markdown +## Project Structure + +The project consists of the following modules: + +- [**sormas-api:**](/sormas-api) General business logic and definitions for data exchange between app and server +- [**sormas-app:**](/sormas-app) The Android app +- [**sormas-backend:**](/sormas-backend) Server entity services, facades, etc. +- [**sormas-base:**](/sormas-base) Base project that also contains build scripts +- [**sormas-cargoserver:**](/sormas-cargoserver) Setup for a local dev server using maven-cargo +- [**sormas-e2e-performance-tests:**](/sormas-e2e-performance-tests) Automated performance tests addressing the ReST interface (sormas-rest) +- [**sormas-e2e-tests:**](/sormas-e2e-tests) Automated frontend tests addressing sormas-ui **and** API tests against sormas-rest. The API steps are partly used to prepare data for UI tests. +- [**sormas-ear:**](/sormas-ear) The ear needed to build the application +- [**sormas-keycloak-service-provider:**](/sormas-keycloak-service-provider) Custom Keycloak SPI for SORMAS +- [**sormas-rest:**](/sormas-rest) The REST interface; see [`sormas-rest/README.md`](sormas-rest/README.md) +- [**sormas-serverlibs:**](/sormas-serverlibs) Dependencies to be deployed with the payara server +- [**sormas-ui:**](/sormas-ui) The web application +- [**sormas-widgetset:**](/sormas-widgetset) The GWT widgetset generated by Vaadin +- [**sormas-e2e-tests:**](/sormas-e2e-tests) Automated tests addressing the sormas-ui, and the ReST interface +``` + +**File:** sormas-base/pom.xml (L20-27) + +```text + + 2.3.7 + 2.13.4 + 1.2.2 + 8.0.1 + 2.37 + + 5.2022.5 +``` + +**File:** docs/DEVELOPMENT_ENVIRONMENT.md (L14-18) + +```markdown +## Step 2: Install Java + +Download and install the **Java 11 JDK** (not JRE) for your operating system, which is also needed for the [Server Setup](SERVER_SETUP.md). +We suggest using [Zulu OpenJDK](https://www.azul.com/downloads/?version=java-11-lts&package=jdk). If you're running Linux, please refer to the [official documentation](https://docs.azul.com/zulu/zuludocs/ZuluUserGuide/PrepareZuluPlatform/AttachAPTRepositoryUbuntuOrDebianSys.htm) on how to install Zulu OpenJDK on your system. + +Note: To work with the Android app JDK 17 is needed for the gradle build. The needed JDK is part of Android Studio, thus there is no need to manually install it. +``` + +**File:** sormas-backend/README.md (L5-19) + +```markdown +## Unit Testing + +### JUnit 5, Hamcrest & Mockito + +* [Junit 5](https://junit.org/junit5/) is the core testing framework used here. +* [Hamcrest](https://hamcrest.org/JavaHamcrest/index) is used to define declarative matchers.\ + A good tutorial can be found here: [Hamcrest Guide](https://www.baeldung.com/java-junit-hamcrest-guide). +* [Mockito](https://site.mockito.org/) is used to mock unavailable or unwanted behaviour of classes and methods.\ + An extensive tutorial can be found here: [Mockito Tutorial](https://www.baeldung.com/mockito-series). + +### Jakarta EE Testing + +The relevant aspects of Jakarta EE are covered in the following sub chapters. + +Most important: + +* **The `AbstractBeanTest` class should be used as a super class** for all EJB unit test classes. It initializes all needed mocks (e.g. `javax.ejb.SessionContext`) and provides some utility methods like `loginWith` and `executeInTransaction` (see below). +* The TestDataCreator class should be used to generated test entities and dtos where needed. +``` + +**File:** sormas-base/setup/sormas.properties (L114-128) + +```properties +# Determines whether default infrastructure data and users are created when the server is starting with an empty database. +# Please note that a default admin user is always created to make sure that you can log in and use the system. +# Default: false +# Possible Values: true, false +#createDefaultEntities=false +# Determines whether logging in as a default user using a default password will bring up a prompt that asks the user to change their password. +# Default: false +# Possible Values: true, false +#skipDefaultPasswordCheck=false +# Dev mode allows administrators to use functionalities that are not intended for live systems, such as creating random cases for testing or training purposes. +# Default: false +# Possible Values: true, false +#devmode=false +``` + +**File:** sormas-api/src/main/java/de/symeda/sormas/api/feature/FeatureType.java (L340-371) + +```java + public static final FeatureType[] SURVEILLANCE_FEATURE_TYPES = { + FeatureType.CASE_SURVEILANCE, + FeatureType.EVENT_SURVEILLANCE, + FeatureType.AGGREGATE_REPORTING}; + +/** + * Server feature means that the feature only needs to be configured once per server since they define the way the system + * is supposed to operate. + */ +private final boolean serverFeature; + +/** + * Is the feature enabled by default? + */ +private final boolean enabledDefault; + +private final FeatureType[] dependentFeatures; +private final List entityTypes; +private final Map supportedPropertyDefaults; + +FeatureType( + boolean serverFeature, + boolean enabledDefault, + FeatureType[] dependentFeatures, + List entityTypes, + Map supportedPropertyDefaults) { + this.serverFeature = serverFeature; + this.enabledDefault = enabledDefault; + this.dependentFeatures = dependentFeatures; + this.entityTypes = entityTypes; + this.supportedPropertyDefaults = supportedPropertyDefaults; +} +``` + +**File:** sormas-rest/README.md (L19-25) + +```markdown +## API Documentation + +The SORMAS REST API is documented automatically. The OpenAPI specification files are generated during the build process +and can be found at `${Project Root}/sormas-rest/target/swagger.{json,yaml}`. + +You can render the OpenAPI specification with tools like +[editor.swagger.io](https://editor.swagger.io/?url=https://raw.githubusercontent.com/sormas-foundation/SORMAS-Project/development/sormas-rest/swagger.yaml). +This allows you to inspect endpoints and example payloads, generate a matching API client for many languages, and to easily interact with the API of a live instance. +``` diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/FacadeProvider.java b/sormas-api/src/main/java/de/symeda/sormas/api/FacadeProvider.java index 1b2e5edcb41..298e6113b91 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/FacadeProvider.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/FacadeProvider.java @@ -14,7 +14,6 @@ */ package de.symeda.sormas.api; -import javax.naming.ConfigurationException; import javax.naming.InitialContext; import javax.naming.NamingException; @@ -108,6 +107,8 @@ import de.symeda.sormas.api.survey.SurveyFacade; import de.symeda.sormas.api.survey.SurveyTokenFacade; import de.symeda.sormas.api.symptoms.SymptomsFacade; +import de.symeda.sormas.api.systemconfiguration.SystemConfiguration; +import de.symeda.sormas.api.systemconfiguration.SystemConfigurationAccessorFacade; import de.symeda.sormas.api.systemconfiguration.SystemConfigurationCategoryFacade; import de.symeda.sormas.api.systemconfiguration.SystemConfigurationValueFacade; import de.symeda.sormas.api.systemevents.SystemEventFacade; @@ -297,6 +298,10 @@ public static ConfigFacade getConfigFacade() { return get().lookupEjbRemote(ConfigFacade.class); } + public static SystemConfigurationAccessorFacade getSystemConfigFacade() { + return get().lookupEjbRemote(SystemConfigurationAccessorFacade.class); + } + public static ExportFacade getExportFacade() { return get().lookupEjbRemote(ExportFacade.class); } @@ -471,13 +476,8 @@ public static ExternalMessageFacade getExternalMessageFacade() { } public static ExternalMessageAdapterFacade getExternalLabResultsFacade() throws NamingException { - - String jndiName = FacadeProvider.getConfigFacade().getExternalMessageAdapterJndiName(); - if (jndiName == null) { - throw new ConfigurationException("No LabResultAdapter JNDI name is configured in the sormas.properties"); - } else { - return (ExternalMessageAdapterFacade) get().ic.lookup(jndiName); - } + return (ExternalMessageAdapterFacade) get().ic + .lookup(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.INTERFACE_EXTERNAL_MESSAGE_ADAPTER_JNDI_NAME)); } public static SurveillanceReportFacade getSurveillanceReportFacade() { diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfiguration.java b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfiguration.java new file mode 100644 index 00000000000..e47d3ef5f24 --- /dev/null +++ b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfiguration.java @@ -0,0 +1,106 @@ +package de.symeda.sormas.api.systemconfiguration; + +public enum SystemConfiguration { + AUTHENTICATION_PROVIDER, + SMS_AUTH_SECRET, + MAP_TILES_URL, + SORMAS2SORMAS_ID, + CENTRAL_ETCD_HOST, + GEOCODING_LONGITUDE_JSON_PATH, + INTERFACE_SYMPTOMJOURNAL_URL, + COUNTRY_NAME, + CUSTOM_BRANDING_USELOGINSIDEBAR, + DASHBOARD_MAP_MARKER_LIMIT, + INTERFACE_EXTERNAL_MESSAGE_ADAPTER_JNDI_NAME, + DAYS_AFTER_SYSTEM_EVENT_GETS_DELETED, + CREATE_DEFAULT_ENTITIES, + COUNTRY_CENTER_LATITUDE, + NAME_SIMILARITY_THRESHOLD, + CENTRAL_ETCD_CLIENT_NAME, + SORMAS2SORMAS_KEYSTORE_NAME, + STEP_SIZE_FOR_CSV_EXPORT, + CENTRAL_LOCATION_SYNC, + AUTHENTICATION_PROVIDER_USER_SYNC_AT_STARTUP, + SORMAS2SORMAS_TRUSTSTORE_NAME, + AUDITOR_ATTRIBUTE_LOGGING, + INTERFACE_PATIENTDIARY_FRONTEND_AUTHURL, + CUSTOM_BRANDING_NAME, + COUNTRY_EPID_PREFIX, + UI_URL, + INTERFACE_SYMPTOMJOURNAL_AUTHURL, + SKIP_DEFAULT_PASSWORD_CHECK, + APP_URL, + APP_LEGACY_URL, + SORMAS2SORMAS_IGNORE_PROPERTY_EXTERNAL_ID, + INTERFACE_PATIENT_DIARY_ACCEPT_PHONE_CONTACT, + CASE_CLASSIFICATION_ALL, + MAP_TILES_ATTRIBUTION, + IMPORT_FILE_SIZE_LIMIT_MB, + INTERFACE_PATIENT_DIARY_PASSWORD, + MINIMUM_EMANCIPATED_AGE, + SORMAS2SORMAS_OIDC_REALM, + CUSTOM_BRANDING_LOGINBACKGROUND_PATH, + CENTRAL_ETCD_CA_PATH, + INTERFACE_PATIENTDIARY_PROBANDSURL, + GEOCODING_SERVICE_URL_TEMPLATE, + ALLOWED_FILE_EXTENSIONS, + SORMAS2SORMAS_ETCD_KEY_PREFIX, + CUSTOM_BRANDING_LOGO_PATH, + CASE_CLASSIFICATION_CHOLERA, + DOCUMENTS_PATH, + INTERFACE_PATIENT_DIARY_AUTHURL, + GENERATED_PATH, + DOCGENERATION_NULL_REPLACEMENT, + INTERFACE_PATIENTDIARY_EMAIL, + AUTHENTICATION_PROVIDER_SYNCED_NEW_USER_ROLE, + DOCUMENT_UPLOAD_SIZE_LIMIT_MB, + SORMAS2SORMAS_KEYSTORE_PASS, + GEOCODING_LATITUDE_JSON_PATH, + SORMAS2SORMAS_OIDC_CLIENT_ID, + CASE_CLASSIFICATION_CORONAVIRUS, + NEGATIVE, + TEMP_PATH, + INTERFACE_SYMPTOM_JOURNAL_CLIENTID, + SORMAS2SORMAS_OIDC_CLIENT_SECRET, + MAP_ZOOM, + AUDIT_LOGGER_CONFIG, + INFRASTRUCTURE_SYNC_THRESHOLD, + AUDIT_SOURCE_SITE, + SORMAS2SORMAS_IGNORE_PROPERTY_ADDITIONAL_DETAILS, + SORMAS2SORMAS_IGNORE_PROPERTY_INTERNAL_TOKEN, + INTERFACE_PATIENTDIARY_DEFAULTUSER_USERNAME, + SMS_SENDER_NAME, + CENTRAL_OIDC_URL, + SURVNET_VERSION_ENDPOINT, + SMS_AUTH_KEY, + COUNTRY_CENTER_LONGITUDE, + DUPLICATE_CHECKS_EXCLUDE_PERSONS_ONLY_LINKED_TO_ARCHIVED_ENTRIES, + INTERFACE_SYMPTOM_JOURNAL_SECRET, + CUSTOM_BRANDING, + INTERFACE_PATIENTDIARY_URL, + SORMAS2SORMAS_DISTRICT_EXTERNAL_ID, + GEOCODING_EPSG4326_WKT, + SORMAS_STATS_URL, + INTERFACE_SYMPTOM_JOURNAL_DEFAULTUSER_USERNAME, + EMAIL_SENDER_NAME, + COUNTRY_LOCALE, + INTERFACE_PATIENTDIARY_TOKEN_LIFETIME, + CENTRAL_ETCD_CLIENT_PASSWORD, + SORMAS2SORMAS_PATH, + MAP_USECOUNTRYCENTER, + INTERFACE_PATIENT_DIARY_DEFAULTUSER_PASSWORD, + CUSTOM_PATH, + SORMAS2SORMAS_ROOT_CA_ALIAS, + EMAIL_SENDER_ADDRESS, + DUPLICATECHECKS_NATIONAL_HEALTH_ID_OVERRIDES_CRITERIA, + INTERFACE_SYMPTOM_JOURNAL_DEFAULTUSER_PASSWORD, + MINIMUM_ADULT_AGE, + SORMAS2SORMAS_IGNORE_PROPERTY_EXTERNAL_TOKEN, + RSCRIPT_EXECUTABLE, + SURVNET_URL, + SORMAS2SORMAS_TRUSTSTORE_PASS, + CSV_SEPARATOR, + DEV_MODE, + MENU_BACKGROUND_COLOR, + MENU_SUBTITLE; +} diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationAccessorFacade.java b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationAccessorFacade.java new file mode 100644 index 00000000000..6becf2baff9 --- /dev/null +++ b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationAccessorFacade.java @@ -0,0 +1,63 @@ +package de.symeda.sormas.api.systemconfiguration; + +import org.apache.commons.lang3.CharUtils; + +import java.util.Optional; + +public interface SystemConfigurationAccessorFacade { + + boolean isPresent(SystemConfiguration config); + + default boolean isAbsent(SystemConfiguration config) { + return !isPresent(config); + } + + Optional getAsInteger(SystemConfiguration config); + + Optional getAsDouble(SystemConfiguration config); + + Optional getAsLong(SystemConfiguration config); + + Optional getAsString(SystemConfiguration config); + + boolean getAsBoolean(SystemConfiguration config); + + default Integer getAsIntegerOrThrow(SystemConfiguration config) { + return getAsInteger(config).orElseThrow(() -> buildIllegalStateException(config)); + } + + private static IllegalStateException buildIllegalStateException(SystemConfiguration config) { + return new IllegalStateException(String.format("Required configuration '%s' not found or invalid", config.name())); + } + + default Double getAsDoubleOrThrow(SystemConfiguration config) { + return getAsDouble(config).orElseThrow(() -> buildIllegalStateException(config)); + } + + default Long getAsLongOrThrow(SystemConfiguration config) { + return getAsLong(config).orElseThrow(() -> buildIllegalStateException(config)); + } + + default String getAsStringOrThrow(SystemConfiguration config) { + return getAsString(config).orElseThrow(() -> buildIllegalStateException(config)); + } + + default char getAsCharOrThrow(SystemConfiguration config) { + return getAsString(config).map(CharUtils::toChar).orElseThrow(() -> buildIllegalStateException(config)); + } + + String getCountryCode(); + +// boolean isConfiguredCountry(String countryCode); +// +// GeoLatLon getCountryCenter(); +// +// SymptomJournalConfig getSymptomJournalConfig(); +// +// PatientDiaryConfig getPatientDiaryConfig(); +// +// SormasToSormasConfig getS2SConfig(); +// +// CaseClassificationCalculationMode getCaseClassificationCalculationMode(Disease disease); + +} diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationValueDataProvider.java b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationValueDataProvider.java index e608a0e1bf2..6c2d259bac2 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationValueDataProvider.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationValueDataProvider.java @@ -34,7 +34,7 @@ public interface SystemConfigurationValueDataProvider extends Serializable { * * @return a set of key names. */ - public Set getKeys(); + Set getKeys(); /** * Retrieves the available options for the provided data. @@ -42,7 +42,7 @@ public interface SystemConfigurationValueDataProvider extends Serializable { * * @return a map of options where the key is the option name and the value is the option value. */ - public Map getOptions(); + Map getOptions(); /** * Applies the provided values to the system configuration. @@ -54,7 +54,7 @@ public interface SystemConfigurationValueDataProvider extends Serializable { * @param dto * the data transfer object containing the system configuration values. */ - public void applyValues(@Nonnull Map values, @Nonnull SystemConfigurationValueDto dto); + void applyValues(@Nonnull Map values, @Nonnull SystemConfigurationValueDto dto); /** * Retrieves the current values from the system configuration. @@ -65,6 +65,6 @@ public interface SystemConfigurationValueDataProvider extends Serializable { * the data transfer object containing the system configuration value. * @return a map where the key is the mapped keyname and the value is the corresponding option value. */ - public Map getMappedValues(@Nonnull SystemConfigurationValueDto dto); + Map getMappedValues(@Nonnull SystemConfigurationValueDto dto); } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationValueDiseasesProvider.java b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationValueDiseasesProvider.java index da0c4bd5464..8ebbfeb6277 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationValueDiseasesProvider.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/SystemConfigurationValueDiseasesProvider.java @@ -52,7 +52,6 @@ public Set getKeys() { */ @Override public Map getOptions() { - return Collections .unmodifiableMap(Arrays.stream(Disease.values()).distinct().collect(Collectors.toMap(Disease::getName, Disease::toShortString))); } diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/Test.java b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/Test.java new file mode 100644 index 00000000000..1de576ff1f5 --- /dev/null +++ b/sormas-api/src/main/java/de/symeda/sormas/api/systemconfiguration/Test.java @@ -0,0 +1,4 @@ +package de.symeda.sormas.api.systemconfiguration; + +public interface Test { +} diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/utils/CsvStreamUtils.java b/sormas-api/src/main/java/de/symeda/sormas/api/utils/CsvStreamUtils.java index 81b4e9c1401..32ff91fb0b3 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/utils/CsvStreamUtils.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/utils/CsvStreamUtils.java @@ -34,7 +34,6 @@ import com.opencsv.CSVWriter; -import de.symeda.sormas.api.ConfigFacade; import de.symeda.sormas.api.EntityDto; import de.symeda.sormas.api.importexport.ExportConfigurationDto; import de.symeda.sormas.api.importexport.ExportEntity; @@ -42,6 +41,8 @@ import de.symeda.sormas.api.importexport.format.ExportFormat; import de.symeda.sormas.api.importexport.format.FormatterProvider; import de.symeda.sormas.api.importexport.format.IExportFormatter; +import de.symeda.sormas.api.systemconfiguration.SystemConfiguration; +import de.symeda.sormas.api.systemconfiguration.SystemConfigurationAccessorFacade; import de.symeda.sormas.api.utils.fieldvisibility.checkers.CountryFieldVisibilityChecker; public class CsvStreamUtils { @@ -52,15 +53,21 @@ public static void writeCsvContentToStream( SupplierBiFunction, String> propertyIdCaptionSupplier, ExportConfigurationDto exportConfiguration, final Predicate redMethodFilter, - ConfigFacade configFacade, + SystemConfigurationAccessorFacade configFacade, OutputStream out) { try ( - CSVWriter writer = CSVUtils.createCSVWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8.name()), configFacade.getCsvSeparator())) { + CSVWriter writer = CSVUtils.createCSVWriter( + new OutputStreamWriter(out, StandardCharsets.UTF_8.name()), + configFacade.getAsCharOrThrow(SystemConfiguration.CSV_SEPARATOR))) { // 1. fields in order of declaration - not using Introspector here, because it gives properties in alphabetical order List readMethods = - getExportRowClassReadMethods(csvRowClass, exportConfiguration, redMethodFilter, configFacade.getCountryLocale()); + getExportRowClassReadMethods( + csvRowClass, + exportConfiguration, + redMethodFilter, + configFacade.getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)); // 2. replace entity fields with all the columns of the entity Map> subEntityProviders = new HashMap>(); @@ -130,7 +137,7 @@ public static void writeCsvContentToStream( writer.writeNext(labels, false); int startIndex = 0; - int stepSize = configFacade.getStepSizeForCsvExport(); + int stepSize = configFacade.getAsIntegerOrThrow(SystemConfiguration.STEP_SIZE_FOR_CSV_EXPORT); List exportRows; do { diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/utils/Tuple.java b/sormas-api/src/main/java/de/symeda/sormas/api/utils/Tuple.java new file mode 100644 index 00000000000..1a8a7144bd8 --- /dev/null +++ b/sormas-api/src/main/java/de/symeda/sormas/api/utils/Tuple.java @@ -0,0 +1,20 @@ +package de.symeda.sormas.api.utils; + +public class Tuple { + + private final F first; + private final S second; + + public Tuple(final F first, final S second) { + this.first = first; + this.second = second; + } + + public F getFirst() { + return first; + } + + public S getSecond() { + return second; + } +} diff --git a/sormas-api/src/main/resources/strings.properties b/sormas-api/src/main/resources/strings.properties index 351889eee32..9414a1d650a 100644 --- a/sormas-api/src/main/resources/strings.properties +++ b/sormas-api/src/main/resources/strings.properties @@ -2008,7 +2008,7 @@ infoSystemConfigurationValueDescription.COUNTRY_EPID_PREFIX=If your country is u infoSystemConfigurationValueDescription.UI_URL=Path to the folder on the server where documents added as attachments to cases, contacts or events are stored. URL of the SORMAS UI Will be used in email and SMS notifications to link to a specific page. infoSystemConfigurationValueDescription.INTERFACE_SYMPTOMJOURNAL_AUTHURL=Authentication details necessary to access the external symptom journal. infoSystemConfigurationValueDescription.SKIP_DEFAULT_PASSWORD_CHECK=Determines whether logging in as a default user using a default password will bring up a prompt that asks the user to change their password. -infoSystemConfigurationValueDescription.APP.URL=The URL that can be used to download the Android .apk file. Must contain a placeholder for the app version, or a specific version number (not recommended). If you want to use the mobile app, this property must be filled in because the app is using it to automatically download new versions. Example: https://SERVER-NAME/downloads/sormas-%version-release.apk +infoSystemConfigurationValueDescription.APP_URL=The URL that can be used to download the Android .apk file. Must contain a placeholder for the app version, or a specific version number (not recommended). If you want to use the mobile app, this property must be filled in because the app is using it to automatically download new versions. Example: https://SERVER-NAME/downloads/sormas-%version-release.apk infoSystemConfigurationValueDescription.SORMAS2SORMAS_IGNORE_PROPERTY_EXTERNAL_ID=Control which values are ignored when shared / overwritten trough S2S. Is applied to all entities shared trough S2S infoSystemConfigurationValueDescription.INTERFACE_PATIENT_DIARY_ACCEPT_PHONE_CONTACT=Configure weather the phone number is accepted for registering a person in the patient diary infoSystemConfigurationValueDescription.CASE_CLASSIFICATION_ALL=Configuration for case classification calculation for all diseases. diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java index e81ac43c9c9..d4987e14339 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java @@ -240,7 +240,6 @@ import de.symeda.sormas.backend.clinicalcourse.HealthConditionsMapper; import de.symeda.sormas.backend.common.AbstractCoreFacadeEjb; import de.symeda.sormas.backend.common.AbstractDomainObject; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import de.symeda.sormas.backend.common.CriteriaBuilderHelper; import de.symeda.sormas.backend.common.CriteriaBuilderHelper.OrderBuilder; import de.symeda.sormas.backend.common.NotificationService; @@ -331,6 +330,7 @@ import de.symeda.sormas.backend.symptoms.Symptoms; import de.symeda.sormas.backend.symptoms.SymptomsFacadeEjb; import de.symeda.sormas.backend.symptoms.SymptomsFacadeEjb.SymptomsFacadeEjbLocal; +import de.symeda.sormas.backend.systemconfiguration.SystemConfigurationAccessorEjb; import de.symeda.sormas.backend.task.Task; import de.symeda.sormas.backend.task.TaskService; import de.symeda.sormas.backend.therapy.Prescription; @@ -436,7 +436,7 @@ public class CaseFacadeEjb extends AbstractCoreFacadeEjb regionMultiPolygons = new HashMap<>(); private final Map regionShapes = new HashMap<>(); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/geocoding/GeocodingService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/geocoding/GeocodingService.java index 27e3ba65d21..a21216814c7 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/geocoding/GeocodingService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/geocoding/GeocodingService.java @@ -47,9 +47,10 @@ import com.jayway.jsonpath.PathNotFoundException; import de.symeda.sormas.api.geo.GeoLatLon; +import de.symeda.sormas.api.systemconfiguration.SystemConfiguration; import de.symeda.sormas.api.utils.DataHelper; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import de.symeda.sormas.backend.location.Location; +import de.symeda.sormas.backend.systemconfiguration.SystemConfigurationAccessorEjb; import de.symeda.sormas.backend.util.ClientHelper; @Stateless @@ -64,10 +65,10 @@ public class GeocodingService { private static final String CITY_PLACEHOLDER = "city"; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; public boolean isEnabled() { - return configFacade.getGeocodingServiceUrlTemplate() != null; + return configFacade.isPresent(SystemConfiguration.GEOCODING_SERVICE_URL_TEMPLATE); } public GeoLatLon getLatLon(Location location) { @@ -83,15 +84,11 @@ public GeoLatLon getLatLon(Location location) { } public GeoLatLon getLatLon(LocationQuery query) { - - String urlTemplate = configFacade.getGeocodingServiceUrlTemplate(); - if (DataHelper.isNullOrEmpty(urlTemplate) - || DataHelper.isNullOrEmpty(configFacade.getGeocodingLatitudeJsonPath()) - || DataHelper.isNullOrEmpty(configFacade.getGeocodingLongitudeJsonPath())) { - return null; - } - - return getLatLon(query, urlTemplate); + return configFacade.getAsString(SystemConfiguration.GEOCODING_SERVICE_URL_TEMPLATE) + .filter(ignored -> configFacade.isPresent(SystemConfiguration.GEOCODING_LATITUDE_JSON_PATH)) + .filter(ignored -> configFacade.isPresent(SystemConfiguration.GEOCODING_LONGITUDE_JSON_PATH)) + .map(urlTemplate -> getLatLon(query, urlTemplate)) + .orElse(null); } private GeoLatLon getLatLon(LocationQuery query, String urlTemplate) { @@ -133,9 +130,9 @@ private GeoLatLon getLatLon(LocationQuery query, String urlTemplate) { // read values as object, than parse to double // JsonPath.read sometimes returns Integer that can't be casted to double, @see #6506 try { - jsonLatitude = JsonPath.read(responseText, configFacade.getGeocodingLatitudeJsonPath()); + jsonLatitude = JsonPath.read(responseText, configFacade.getAsStringOrThrow(SystemConfiguration.GEOCODING_LATITUDE_JSON_PATH)); Double latitude = jsonLatitude != null ? Double.parseDouble(jsonLatitude.toString()) : null; - jsonLongitude = JsonPath.read(responseText, configFacade.getGeocodingLongitudeJsonPath()); + jsonLongitude = JsonPath.read(responseText, configFacade.getAsStringOrThrow(SystemConfiguration.GEOCODING_LONGITUDE_JSON_PATH)); Double longitude = jsonLongitude != null ? Double.parseDouble(jsonLongitude.toString()) : null; return new GeoLatLon(latitude, longitude); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationFacadeEjb.java index 2c3922bfb62..c4b68204e78 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/immunization/ImmunizationFacadeEjb.java @@ -41,9 +41,6 @@ import javax.validation.Valid; import javax.validation.constraints.NotNull; -import de.symeda.sormas.api.ConfigFacade; -import de.symeda.sormas.backend.common.ConfigFacadeEjb; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -115,6 +112,7 @@ import de.symeda.sormas.backend.sormastosormas.share.outgoing.ShareInfoHelper; import de.symeda.sormas.backend.sormastosormas.share.outgoing.ShareRequestInfo; import de.symeda.sormas.backend.specialcaseaccess.SpecialCaseAccessService; +import de.symeda.sormas.backend.systemconfiguration.SystemConfigurationAccessorEjb; import de.symeda.sormas.backend.user.User; import de.symeda.sormas.backend.user.UserFacadeEjb; import de.symeda.sormas.backend.util.DtoHelper; @@ -174,7 +172,7 @@ public class ImmunizationFacadeEjb @EJB private SpecialCaseAccessService specialCaseAccessService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; public ImmunizationFacadeEjb() { } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/DatabaseExportService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/DatabaseExportService.java index 757f8d28940..4aa6078d4df 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/DatabaseExportService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/DatabaseExportService.java @@ -42,7 +42,6 @@ import de.symeda.sormas.api.feature.FeatureConfigurationDto; import de.symeda.sormas.api.importexport.DatabaseTable; -import de.symeda.sormas.api.therapy.Drug; import de.symeda.sormas.backend.action.Action; import de.symeda.sormas.backend.activityascase.ActivityAsCase; import de.symeda.sormas.backend.campaign.Campaign; @@ -56,7 +55,6 @@ import de.symeda.sormas.backend.clinicalcourse.ClinicalCourse; import de.symeda.sormas.backend.clinicalcourse.ClinicalVisit; import de.symeda.sormas.backend.clinicalcourse.HealthConditions; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import de.symeda.sormas.backend.contact.Contact; import de.symeda.sormas.backend.customizableenum.CustomizableEnumValue; import de.symeda.sormas.backend.deletionconfiguration.DeletionConfiguration; @@ -225,7 +223,7 @@ public class DatabaseExportService { @EJB private FeatureConfigurationFacadeEjbLocal featureConfigurationFacade; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; public void exportAsCsvFiles(ZipOutputStream zos, List databaseTables) throws IOException { diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ExportFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ExportFacadeEjb.java index ced0a57365e..c8c978d7ccd 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ExportFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ExportFacadeEjb.java @@ -54,7 +54,6 @@ import de.symeda.sormas.api.utils.ExportErrorException; import de.symeda.sormas.backend.caze.CaseFacadeEjb.CaseFacadeEjbLocal; import de.symeda.sormas.backend.caze.CaseService; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import de.symeda.sormas.backend.common.CriteriaBuilderHelper; import de.symeda.sormas.backend.epidata.EpiDataService; import de.symeda.sormas.backend.hospitalization.HospitalizationService; @@ -78,7 +77,7 @@ public class ExportFacadeEjb implements ExportFacade { private EntityManager em; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @EJB private CaseFacadeEjbLocal caseFacade; @EJB diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ImportFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ImportFacadeEjb.java index 89d291686a0..dbb50b1c462 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ImportFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ImportFacadeEjb.java @@ -144,7 +144,6 @@ import de.symeda.sormas.api.utils.fieldvisibility.checkers.FeatureTypeFieldVisibilityChecker; import de.symeda.sormas.api.vaccination.VaccinationDto; import de.symeda.sormas.backend.campaign.form.CampaignFormMetaFacadeEjb.CampaignFormMetaFacadeEjbLocal; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import de.symeda.sormas.backend.common.EnumService; import de.symeda.sormas.backend.disease.DiseaseConfigurationFacadeEjb.DiseaseConfigurationFacadeEjbLocal; import de.symeda.sormas.backend.feature.FeatureConfigurationFacadeEjb.FeatureConfigurationFacadeEjbLocal; @@ -187,7 +186,7 @@ public class ImportFacadeEjb implements ImportFacade { private static final List VACCINATION_COLUMNS_TO_REMOVE = Collections.singletonList(VaccinationDto.IMMUNIZATION); @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @EJB private FeatureConfigurationFacadeEjbLocal featureConfigurationFacade; @EJB diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/info/InfoFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/info/InfoFacadeEjb.java index 3e0c1fa8ff5..21a370efdce 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/info/InfoFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/info/InfoFacadeEjb.java @@ -105,7 +105,6 @@ import de.symeda.sormas.api.utils.fieldvisibility.checkers.FeatureTypeFieldVisibilityChecker; import de.symeda.sormas.api.vaccination.VaccinationDto; import de.symeda.sormas.api.visit.VisitDto; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import de.symeda.sormas.backend.disease.DiseaseConfigurationFacadeEjb.DiseaseConfigurationFacadeEjbLocal; import de.symeda.sormas.backend.feature.FeatureConfigurationFacadeEjb.FeatureConfigurationFacadeEjbLocal; import de.symeda.sormas.backend.info.EntityColumns.EntityColumn; @@ -161,7 +160,7 @@ public class InfoFacadeEjb implements InfoFacade { } @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @EJB private UserService userService; @EJB diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/ClientInfraSyncFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/ClientInfraSyncFacadeEjb.java index 9defd1a008d..091a57dad4a 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/ClientInfraSyncFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/ClientInfraSyncFacadeEjb.java @@ -11,7 +11,6 @@ import de.symeda.sormas.backend.campaign.CampaignFacadeEjb; import de.symeda.sormas.backend.campaign.form.CampaignFormMetaFacadeEjb; import de.symeda.sormas.backend.caze.classification.CaseClassificationFacadeEjb.CaseClassificationFacadeEjbLocal; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import de.symeda.sormas.backend.disease.DiseaseConfigurationFacadeEjb.DiseaseConfigurationFacadeEjbLocal; import de.symeda.sormas.backend.feature.FeatureConfigurationFacadeEjb.FeatureConfigurationFacadeEjbLocal; import de.symeda.sormas.backend.infrastructure.area.AreaFacadeEjb; @@ -62,7 +61,7 @@ public class ClientInfraSyncFacadeEjb implements ClientInfraSyncFacade { @EJB private CommunityService communityService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @EJB private FeatureConfigurationFacadeEjbLocal featureConfigurationFacade; @EJB diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/country/CountryFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/country/CountryFacadeEjb.java index e15bcc40435..860a81e673f 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/country/CountryFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/country/CountryFacadeEjb.java @@ -55,7 +55,6 @@ import de.symeda.sormas.api.utils.EmptyValueException; import de.symeda.sormas.api.utils.SortProperty; import de.symeda.sormas.backend.common.AbstractDomainObject; -import de.symeda.sormas.backend.common.ConfigFacadeEjb; import de.symeda.sormas.backend.feature.FeatureConfigurationFacadeEjb.FeatureConfigurationFacadeEjbLocal; import de.symeda.sormas.backend.infrastructure.AbstractInfrastructureFacadeEjb; import de.symeda.sormas.backend.infrastructure.InfrastructureAdo; @@ -80,7 +79,7 @@ public class CountryFacadeEjb private SubcontinentService subcontinentService; @EJB - private ConfigFacadeEjb.ConfigFacadeEjbLocal configFacadeEjb; + private SystemConfigurationAccessorEjb configFacadeEjb; public CountryFacadeEjb() { } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/person/PersonFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/person/PersonFacadeEjb.java index 89bc670f782..92b5bd581d1 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/person/PersonFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/person/PersonFacadeEjb.java @@ -260,7 +260,7 @@ public class PersonFacadeEjb extends AbstractBaseEjb getSimilarPersonDtos(Integer limit, PersonSimilari // Find similar persons by permitted associations, optionally limited to active entries Predicate personSimilarityFilter = buildSimilarityCriteriaFilter(criteria, cb, personRoot); - Predicate associationFilter = buildAssociationFilter(queryContext, configFacade.isDuplicateChecksExcludePersonsOfArchivedEntries()); + Predicate associationFilter = buildAssociationFilter(queryContext, configFacade.getAsString()); personQuery.where(and(cb, personSimilarityFilter, associationFilter)); personQuery.distinct(true); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/AdditionalTestFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/AdditionalTestFacadeEjb.java index 394de84a91b..47fa57def0f 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/AdditionalTestFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/AdditionalTestFacadeEjb.java @@ -20,7 +20,6 @@ import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.utils.SortProperty; import de.symeda.sormas.backend.FacadeHelper; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import de.symeda.sormas.backend.user.User; import de.symeda.sormas.backend.user.UserService; import de.symeda.sormas.backend.util.DtoHelper; @@ -40,7 +39,7 @@ public class AdditionalTestFacadeEjb implements AdditionalTestFacade { @EJB private UserService userService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @Override public AdditionalTestDto getByUuid(String uuid) { diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/PathogenTestFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/PathogenTestFacadeEjb.java index 0cdb7288b91..dbdaa60e551 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/PathogenTestFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/PathogenTestFacadeEjb.java @@ -126,7 +126,7 @@ public class PathogenTestFacadeEjb implements PathogenTestFacade { @EJB private SpecialCaseAccessService specialCaseAccessService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @EJB private DrugSusceptibilityMapper drugSusceptibilityMapper; diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleService.java index 458059e7624..1ef9d3d931c 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleService.java @@ -54,6 +54,7 @@ import javax.persistence.criteria.Selection; import javax.persistence.criteria.Subquery; +import de.symeda.sormas.backend.systemconfiguration.SystemConfigurationAccessorEjb; import org.apache.commons.collections4.CollectionUtils; import de.symeda.sormas.api.Disease; @@ -153,7 +154,7 @@ public class SampleService extends AbstractDeletableAdoService @EJB private SpecialCaseAccessService specialCaseAccessService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; public SampleService() { super(Sample.class, DeletableEntityType.SAMPLE); diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/AbstractSormasToSormasInterface.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/AbstractSormasToSormasInterface.java index 2bb97ed0102..3603784daec 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/AbstractSormasToSormasInterface.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/AbstractSormasToSormasInterface.java @@ -85,7 +85,6 @@ import de.symeda.sormas.backend.caze.surveillancereport.SurveillanceReport; import de.symeda.sormas.backend.caze.surveillancereport.SurveillanceReportService; import de.symeda.sormas.backend.common.AbstractCoreAdoService; -import de.symeda.sormas.backend.common.ConfigFacadeEjb; import de.symeda.sormas.backend.common.CoreAdo; import de.symeda.sormas.backend.common.QueryJoins; import de.symeda.sormas.backend.contact.Contact; @@ -157,7 +156,7 @@ public abstract class AbstractSormasToSormasInterface getAsInteger(SystemConfiguration config) { + return Optional.empty(); + } + + private T parseProperty(String propertyName, T defaultValue, Function parse) { + + String prop = systemConfigurationValueEjb.getValue(propertyName); + if (prop == null) { + return defaultValue; + } + + try { + if (prop.isEmpty()) { + logger.debug("The property '" + propertyName + "' is set to empty value"); + } + + return parse.apply(prop); + } catch (Exception e) { + logger.error("Could not parse value of property '" + propertyName + "': " + e.getMessage()); + return defaultValue; + } + } + + @Override + public Optional getAsDouble(SystemConfiguration config) { + return Optional.empty(); + } + + @Override + public Optional getAsLong(SystemConfiguration config) { + return Optional.empty(); + } + + @Override + public Optional getAsString(SystemConfiguration config) { + return Optional.empty(); + } + + @Override + public boolean getAsBoolean(SystemConfiguration config) { + return false; + } + + @Override + public String getCountryCode() { + String locale = getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE); + String normalizedLocale = normalizeLocaleString(locale); + + if (normalizedLocale.contains("-")) { + return normalizedLocale.substring(normalizedLocale.lastIndexOf("-") + 1); + } else { + return normalizedLocale; + } + } + + private String normalizeLocaleString(String locale) { + locale = locale.trim(); + int pos = Math.max(locale.indexOf('-'), locale.indexOf('_')); + if (pos < 0) { + locale = locale.toLowerCase(); + } else { + locale = locale.substring(0, pos).toLowerCase(Locale.ENGLISH) + '-' + locale.substring(pos + 1).toUpperCase(Locale.ENGLISH); + } + return locale; + } + + public SystemConfigurationValueEjb getSystemConfigurationValueEjb() { + return systemConfigurationValueEjb; + } + + public void setSystemConfigurationValueEjb(SystemConfigurationValueEjb systemConfigurationValueEjb) { + this.systemConfigurationValueEjb = systemConfigurationValueEjb; + } + +// more complex configurations + +// @Override +// public boolean isConfiguredCountry(String countryCode) { +// return false; +// } +// +// @Override +// public GeoLatLon getCountryCenter() { +// return null; +// } +// +// @Override +// public SymptomJournalConfig getSymptomJournalConfig() { +// return null; +// } +// +// @Override +// public PatientDiaryConfig getPatientDiaryConfig() { +// return null; +// } +// +// @Override +// public SormasToSormasConfig getS2SConfig() { +// return null; +// } +// +// @Override +// public CaseClassificationCalculationMode getCaseClassificationCalculationMode(Disease disease) { +// return null; +// } + +} diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java index 6067f8e63f3..c815d3c3dd1 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java @@ -156,7 +156,7 @@ public class TaskFacadeEjb implements TaskFacade { @EJB private MessagingService messagingService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @EJB private TravelEntryService travelEntryService; @EJB diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/therapy/PrescriptionFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/therapy/PrescriptionFacadeEjb.java index 188e78bec4f..7e1c7adf94d 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/therapy/PrescriptionFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/therapy/PrescriptionFacadeEjb.java @@ -58,7 +58,7 @@ public class PrescriptionFacadeEjb implements PrescriptionFacade { @EJB private CaseService caseService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @Override public List getIndexList(PrescriptionCriteria criteria) { diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/travelentry/travelentryimport/TravelEntryImportFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/travelentry/travelentryimport/TravelEntryImportFacadeEjb.java index e3a7d6f469b..420e053eee4 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/travelentry/travelentryimport/TravelEntryImportFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/travelentry/travelentryimport/TravelEntryImportFacadeEjb.java @@ -111,7 +111,7 @@ public class TravelEntryImportFacadeEjb implements TravelEntryImportFacade { @EJB private EnumService enumService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @Override public ImportLineResultDto importData( diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/user/KeycloakService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/user/KeycloakService.java index 80cc8aa939d..c99ebd1dd1f 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/user/KeycloakService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/user/KeycloakService.java @@ -60,7 +60,6 @@ import de.symeda.sormas.api.Language; import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.utils.DataHelper.Pair; -import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal; import de.symeda.sormas.backend.user.event.PasswordResetEvent; import de.symeda.sormas.backend.user.event.SyncUsersFromProviderEvent; import de.symeda.sormas.backend.user.event.UserCreateEvent; @@ -79,7 +78,7 @@ public class KeycloakService { private final Logger logger = LoggerFactory.getLogger(getClass()); @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; private static final String OIDC_REALM = "realm"; private static final String OIDC_SERVER_URL = "auth-server-url"; diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/user/UserFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/user/UserFacadeEjb.java index ff85ead49dd..6f74739d7f1 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/user/UserFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/user/UserFacadeEjb.java @@ -193,7 +193,7 @@ public class UserFacadeEjb implements UserFacade { @EJB private PersonService personService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @Inject private Event userCreateEvent; @Inject diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/visualization/VisualizationFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/visualization/VisualizationFacadeEjb.java index 56d43214704..d8852f816e4 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/visualization/VisualizationFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/visualization/VisualizationFacadeEjb.java @@ -98,7 +98,7 @@ public class VisualizationFacadeEjb implements VisualizationFacade { @EJB private ContactService contactService; @EJB - private ConfigFacadeEjbLocal configFacade; + private SystemConfigurationAccessorEjb configFacade; @Override public String buildTransmissionChainJson( diff --git a/sormas-backend/src/main/resources/sql/sormas_schema.sql b/sormas-backend/src/main/resources/sql/sormas_schema.sql index 3b941bd6e76..b1529caaafa 100644 --- a/sormas-backend/src/main/resources/sql/sormas_schema.sql +++ b/sormas-backend/src/main/resources/sql/sormas_schema.sql @@ -13893,7 +13893,7 @@ CREATE TRIGGER delete_history_trigger FOR EACH ROW EXECUTE PROCEDURE delete_history_trigger('systemconfigurationcategory_history', 'id'); ALTER TABLE systemconfigurationcategory_history OWNER TO sormas_user; -INSERT INTO systemconfigurationcategory(id, uuid, changedate, creationdate, name, caption, description) +INSERT INTO systemconfigurationcategory(id, uuid, changedate, creationdate, name, caption, description) VALUES (nextval('entity_seq'), generate_base32_uuid(), now(), now(), 'GENERAL_CATEGORY', 'i18n/General/categoryGeneral', 'i18n/General/categoryGeneral'); CREATE TABLE systemconfigurationvalue ( @@ -15062,4 +15062,40 @@ ALTER TABLE testreport_history ADD COLUMN serotype character varying(255); ALTER TABLE testreport_history ADD COLUMN straincallstatus character varying(255); INSERT INTO schema_version (version_number, comment) VALUES (602, 'External message additional fields'); + + +-- Migrating sormas.properties to system configurations + +ALTER TABLE systemconfigurationvalue + ADD COLUMN IF NOT EXISTS default_value TEXT; + +DO +$$ + DECLARE + email_configuration_id bigint; sms_configuration_id bigint; system_configuration_id bigint; general_configuration_id bigint; + BEGIN + + SELECT id + INTO email_configuration_id + FROM systemconfigurationcategory + WHERE name = 'EMAIL'; + + SELECT id + INTO sms_configuration_id + FROM systemconfigurationcategory + WHERE name = 'SMS'; + + INTO general_configuration_id + FROM systemconfigurationcategory + WHERE + name = 'GENERAL_CATEGORY'; + + + END +$$ +LANGUAGE plpgsql; + + +INSERT INTO schema_version (version_number, comment) +VALUES (604, 'Migrating sormas.properties to system configurations'); -- *** Insert new sql commands BEFORE this line. Remember to always consider _history tables. *** diff --git a/sormas-rest/src/main/java/de/symeda/sormas/rest/RestConfig.java b/sormas-rest/src/main/java/de/symeda/sormas/rest/RestConfig.java index 9ab12329e31..e9c0db008f5 100644 --- a/sormas-rest/src/main/java/de/symeda/sormas/rest/RestConfig.java +++ b/sormas-rest/src/main/java/de/symeda/sormas/rest/RestConfig.java @@ -24,6 +24,7 @@ import javax.servlet.annotation.WebListener; import javax.ws.rs.ApplicationPath; +import de.symeda.sormas.api.systemconfiguration.SystemConfiguration; import org.apache.commons.collections4.SetUtils; import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.server.ResourceConfig; @@ -97,7 +98,7 @@ public static class FilterStartupListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { ServletContext ctx = sce.getServletContext(); - String authenticationProvider = FacadeProvider.getConfigFacade().getAuthenticationProvider(); + String authenticationProvider = FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.AUTHENTICATION_PROVIDER); if (authenticationProvider.equalsIgnoreCase(AuthProvider.KEYCLOAK)) { FilterRegistration.Dynamic filterRegistration = ctx.addFilter("KeycloakFilter", KeycloakFilter.class); filterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); diff --git a/sormas-rest/src/main/java/de/symeda/sormas/rest/filter/SessionFilter.java b/sormas-rest/src/main/java/de/symeda/sormas/rest/filter/SessionFilter.java index 1e109090f52..ec4e1d563a8 100644 --- a/sormas-rest/src/main/java/de/symeda/sormas/rest/filter/SessionFilter.java +++ b/sormas-rest/src/main/java/de/symeda/sormas/rest/filter/SessionFilter.java @@ -50,12 +50,12 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha final RequestContextTO requestContext = new RequestContextTO(isMobileSyncHeader != null ? Boolean.valueOf(isMobileSyncHeader) : false); RequestContextHolder.setRequestContext(requestContext); - FacadeProvider.getConfigFacade().setRequestContext(requestContext); + FacadeProvider.getSystemConfigFacade().setRequestContext(requestContext); chain.doFilter(req, response); }, request, response); } finally { RequestContextHolder.reset(); - FacadeProvider.getConfigFacade().resetRequestContext(); + FacadeProvider.getSystemConfigFacade().resetRequestContext(); } } diff --git a/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/BAGExportResource.java b/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/BAGExportResource.java index 19ee8ed4aa1..3b78ef56c34 100644 --- a/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/BAGExportResource.java +++ b/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/BAGExportResource.java @@ -52,7 +52,7 @@ public Response exportCases(String file) { (propertyId, type) -> propertyId, null, null, - FacadeProvider.getConfigFacade(), + FacadeProvider.getSystemConfigFacade(), output), "sormas_BAG_cases_", "csv"); @@ -68,7 +68,7 @@ public Response exportContacts(String file) { (propertyId, type) -> propertyId, null, null, - FacadeProvider.getConfigFacade(), + FacadeProvider.getSystemConfigFacade(), output), "sormas_BAG_contacts_", "csv"); diff --git a/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/InfoResource.java b/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/InfoResource.java index c290324f207..fb825f44e85 100644 --- a/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/InfoResource.java +++ b/sormas-rest/src/main/java/de/symeda/sormas/rest/resources/InfoResource.java @@ -22,8 +22,10 @@ import javax.ws.rs.core.MediaType; import de.symeda.sormas.api.FacadeProvider; +import de.symeda.sormas.api.systemconfiguration.SystemConfiguration; import de.symeda.sormas.api.utils.CompatibilityCheckResponse; import de.symeda.sormas.api.utils.InfoProvider; +import de.symeda.sormas.api.utils.Tuple; import de.symeda.sormas.api.utils.VersionHelper; @Path("/info") @@ -39,28 +41,33 @@ public String getVersion() { @GET @Path("/appurl") public String getAppUrl(@QueryParam("appVersion") String appVersionString) { - int[] appVersion = VersionHelper.extractVersion(appVersionString); - String appLegacyUrl = FacadeProvider.getConfigFacade().getAppLegacyUrl(); - int[] appLegacyVersion = VersionHelper.extractVersion(appLegacyUrl); - if (VersionHelper.isVersion(appLegacyVersion)) { - if (!VersionHelper.isVersion(appVersion)) { - return appLegacyUrl; // no version -> likely old app 0.22.0 or older - } else if (VersionHelper.isEqual(appVersion, appLegacyVersion)) { - return null; // keep legacy version - } else if (VersionHelper.isBefore(appVersion, appLegacyVersion)) { - return appLegacyUrl; - } - } + return FacadeProvider.getSystemConfigFacade() + .getAsString(SystemConfiguration.APP_LEGACY_URL) + .map(legacyUrl -> new Tuple<>(legacyUrl, VersionHelper.extractVersion(legacyUrl))) + .filter(tuple -> VersionHelper.isVersion(tuple.getSecond())) + .map(tuple -> { + String appLegacyUrl = tuple.getFirst(); + int[] appLegacyVersion = tuple.getSecond(); + + if (!VersionHelper.isVersion(appVersion)) { + return appLegacyUrl; // no version -> likely old app 0.22.0 or older + } else if (VersionHelper.isEqual(appVersion, appLegacyVersion)) { + return null; // keep legacy version + } else if (VersionHelper.isBefore(appVersion, appLegacyVersion)) { + return appLegacyUrl; + } - return FacadeProvider.getConfigFacade().getAppUrl(); + return null; + }) + .orElseGet(() -> FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.APP_URL)); } @GET @Path("/locale") public String getLocale() { - return FacadeProvider.getConfigFacade().getCountryLocale(); + return FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE); } @GET @@ -72,6 +79,6 @@ public CompatibilityCheckResponse isCompatibleToApi(@QueryParam("appVersion") St @GET @Path("/countryname") public String getCountryName() { - return FacadeProvider.getConfigFacade().getCountryName(); + return FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_NAME); } } diff --git a/sormas-rest/src/main/java/de/symeda/sormas/rest/security/MultiAuthenticationMechanism.java b/sormas-rest/src/main/java/de/symeda/sormas/rest/security/MultiAuthenticationMechanism.java index 33b051c73cb..62563249312 100644 --- a/sormas-rest/src/main/java/de/symeda/sormas/rest/security/MultiAuthenticationMechanism.java +++ b/sormas-rest/src/main/java/de/symeda/sormas/rest/security/MultiAuthenticationMechanism.java @@ -24,24 +24,23 @@ import javax.security.enterprise.authentication.mechanism.http.BasicAuthenticationMechanismDefinition; import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism; import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext; -import javax.security.enterprise.credential.CallerOnlyCredential; -import javax.security.enterprise.credential.Credential; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpHeaders; -import org.glassfish.soteria.Utils; import org.glassfish.soteria.cdi.BasicAuthenticationMechanismDefinitionAnnotationLiteral; import org.glassfish.soteria.mechanisms.BasicAuthenticationMechanism; import org.keycloak.KeycloakSecurityContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import de.symeda.sormas.api.AuthProvider; import de.symeda.sormas.api.ConfigFacade; import de.symeda.sormas.api.FacadeProvider; import de.symeda.sormas.api.sormastosormas.SormasToSormasApiConstants; +import de.symeda.sormas.api.systemconfiguration.SystemConfiguration; import de.symeda.sormas.api.user.UserDto; import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.utils.DefaultEntityHelper; @@ -50,8 +49,6 @@ import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.security.SecurityScheme; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Mechanism which allows configuration of multiple providers trough a system property. @@ -96,7 +93,7 @@ public class MultiAuthenticationMechanism implements HttpAuthenticationMechanism @Inject public MultiAuthenticationMechanism(KeycloakHttpAuthenticationMechanism keycloakHttpAuthenticationMechanism) { - String authenticationProvider = FacadeProvider.getConfigFacade().getAuthenticationProvider(); + String authenticationProvider = FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.AUTHENTICATION_PROVIDER); if (authenticationProvider.equals(AuthProvider.KEYCLOAK)) { authenticationMechanism = keycloakHttpAuthenticationMechanism; diff --git a/sormas-rest/src/main/java/de/symeda/sormas/rest/security/s2s/oidc/S2SAuthFilter.java b/sormas-rest/src/main/java/de/symeda/sormas/rest/security/s2s/oidc/S2SAuthFilter.java index 704e547c6e7..f8ad1d01070 100644 --- a/sormas-rest/src/main/java/de/symeda/sormas/rest/security/s2s/oidc/S2SAuthFilter.java +++ b/sormas-rest/src/main/java/de/symeda/sormas/rest/security/s2s/oidc/S2SAuthFilter.java @@ -77,7 +77,7 @@ private boolean isValidToken(String token, String orgIdSender) throws Verificati TokenVerifier tokenVerifier = TokenVerifier.create(token, AccessToken.class); - SormasToSormasConfig sormasToSormasConfig = FacadeProvider.getConfigFacade().getS2SConfig(); + SormasToSormasConfig sormasToSormasConfig = FacadeProvider.getSystemConfigFacade().getS2SConfig(); // We assert the following: // 1. The token was issued by the realm we are trusting @@ -111,7 +111,7 @@ private boolean isValidToken(String token, String orgIdSender) throws Verificati } private PublicKey fetchPublicKey() throws VerificationException { - SormasToSormasConfig sormasToSormasConfig = FacadeProvider.getConfigFacade().getS2SConfig(); + SormasToSormasConfig sormasToSormasConfig = FacadeProvider.getSystemConfigFacade().getS2SConfig(); ObjectMapper mapper = new ObjectMapper(); JSONWebKeySet jwks; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/AboutView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/AboutView.java index cdb6d84ac7e..1657ece7d1d 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/AboutView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/AboutView.java @@ -121,7 +121,7 @@ private VerticalLayout createInfoSection() { aboutLabel.addStyleName(CssStyles.H1); infoLayout.addComponent(aboutLabel); - ConfigFacade configFacade = FacadeProvider.getConfigFacade(); + ConfigFacade configFacade = FacadeProvider.getSystemConfigFacade(); String infoLabelStr = configFacade.isCustomBranding() ? String.format(I18nProperties.getCaption(Captions.aboutBrandedSormasVersion), configFacade.getCustomBrandingName()) : "SORMAS"; @@ -245,7 +245,7 @@ private VerticalLayout createDocumentsSection() { FacadeProvider.getDiseaseConfigurationFacade().getAllDiseases(true, true, true), I18nProperties.getUserLanguage(), FacadeProvider.getCaseClassificationFacade(), - FacadeProvider.getConfigFacade()), + FacadeProvider.getSystemConfigFacade()), "classification_rules.html", "text/html"); new FileDownloader(classificationResource).extend(classificationDocumentButton); @@ -285,7 +285,7 @@ private VerticalLayout createCustomHtmlSection(String caption, String fileName) String htmlContentString = ""; - Path customHtmlDirectory = Paths.get(FacadeProvider.getConfigFacade().getCustomFilesPath()); + Path customHtmlDirectory = Paths.get(FacadeProvider.getSystemConfigFacade().getCustomFilesPath()); Path customFilePath = customHtmlDirectory.resolve(fileName); try { @@ -332,7 +332,7 @@ private List listCustomDocumentsFiles() { } private boolean shouldShowClassificationDocumentLink() { - return FacadeProvider.getConfigFacade().isAnyCaseClassificationCalculationEnabled() + return FacadeProvider.getSystemConfigFacade().isAnyCaseClassificationCalculationEnabled() && FacadeProvider.getFeatureConfigurationFacade().isFeatureEnabled(FeatureType.CASE_SURVEILANCE); } @@ -342,7 +342,7 @@ private boolean shouldShowDataDictionaryLink() { } private String getCustomDocumentsPath() { - return FacadeProvider.getConfigFacade().getCustomFilesPath() + "aboutfiles"; + return FacadeProvider.getSystemConfigFacade().getCustomFilesPath() + "aboutfiles"; } public void attachDataProtectionDictionaryDownloader(AbstractComponent target) { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/ActivityAsCase/ActivityAsCaseField.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/ActivityAsCase/ActivityAsCaseField.java index fbfc08b132e..752fcd45ac1 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/ActivityAsCase/ActivityAsCaseField.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/ActivityAsCase/ActivityAsCaseField.java @@ -83,7 +83,9 @@ protected void updateColumns() { table.setCellStyleGenerator( FieldAccessCellStyleGenerator.withFieldAccessCheckers( ActivityAsCaseDto.class, - UiFieldAccessCheckers.forSensitiveData(isPseudonymized, FacadeProvider.getConfigFacade().getCountryLocale()))); + UiFieldAccessCheckers.forSensitiveData( + isPseudonymized, + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); for (Object columnId : table.getVisibleColumns()) { if (!columnId.equals(ACTION_COLUMN_ID)) { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/ActivityAsCase/ActivityAsCaseForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/ActivityAsCase/ActivityAsCaseForm.java index 781f899543f..ece0d3dac72 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/ActivityAsCase/ActivityAsCaseForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/ActivityAsCase/ActivityAsCaseForm.java @@ -174,7 +174,9 @@ private void addBasicFields() { ActivityAsCaseDto.ROLE, ActivityAsCaseDto.WORK_ENVIRONMENT); - if (CountryHelper.isCountry(FacadeProvider.getConfigFacade().getCountryLocale(), CountryHelper.COUNTRY_CODE_GERMANY)) { + if (CountryHelper.isCountry( + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE), + CountryHelper.COUNTRY_CODE_GERMANY)) { AbstractSelect field = getField(ActivityAsCaseDto.TYPE_OF_PLACE); field.setCaption(I18nProperties.getCaption(Captions.ActivityAsCase_typeOfPlaceIfSG)); field.removeAllItems(); @@ -264,7 +266,9 @@ private void setUpVisibilityDependencies() { Collections.singletonList(FacilityTypeGroup.WORKING_PLACE), true); - if (CountryHelper.isCountry(FacadeProvider.getConfigFacade().getCountryLocale(), CountryHelper.COUNTRY_CODE_GERMANY)) { + if (CountryHelper.isCountry( + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE), + CountryHelper.COUNTRY_CODE_GERMANY)) { locationForm .setFacilityFieldsVisibleExceptTypeGroupField(TypeOfPlace.isFacilityType(getField(ActivityAsCaseDto.TYPE_OF_PLACE).getValue()), true); getField(ActivityAsCaseDto.TYPE_OF_PLACE).addValueChangeListener( diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java index b35380f5862..b19df815836 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java @@ -323,7 +323,7 @@ && permitted(FeatureType.ADVERSE_EVENTS_FOLLOWING_IMMUNIZATION_MANAGEMENT, UserR } if (permitted(FeatureType.TRAVEL_ENTRIES, UserRight.TRAVEL_ENTRY_MANAGEMENT_ACCESS) - && FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + && FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { ControllerProvider.getTravelEntryController().registerViews(navigator); menu.addView( TravelEntriesView.class, diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/Menu.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/Menu.java index f3c8976dd29..1ec6f3720ba 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/Menu.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/Menu.java @@ -81,13 +81,13 @@ public Menu(Navigator navigator) { top.setDefaultComponentAlignment(Alignment.MIDDLE_CENTER); top.addStyleName(ValoTheme.MENU_TITLE); top.setSpacing(true); - Label title = new Label(FacadeProvider.getConfigFacade().getSormasInstanceName()); + Label title = new Label(FacadeProvider.getSystemConfigFacade().getSormasInstanceName()); title.setSizeUndefined(); Image image; - if (FacadeProvider.getConfigFacade().isCustomBranding() - && StringUtils.isNotBlank(FacadeProvider.getConfigFacade().getCustomBrandingLogoPath())) { - Path logoPath = Paths.get(FacadeProvider.getConfigFacade().getCustomBrandingLogoPath()); + if (FacadeProvider.getSystemConfigFacade().isCustomBranding() + && StringUtils.isNotBlank(FacadeProvider.getSystemConfigFacade().getCustomBrandingLogoPath())) { + Path logoPath = Paths.get(FacadeProvider.getSystemConfigFacade().getCustomBrandingLogoPath()); image = new Image(null, new FileResource(logoPath.toFile())); } else { image = new Image(null, new ThemeResource("img/sormas-logo.png")); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/SormasUI.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/SormasUI.java index a8b926b0921..c3fc06ed7c8 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/SormasUI.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/SormasUI.java @@ -64,7 +64,7 @@ public void init(VaadinRequest vaadinRequest) { VaadinSession.getCurrent().setConverterFactory(new SormasDefaultConverterFactory()); - getPage().setTitle(FacadeProvider.getConfigFacade().getSormasInstanceName()); + getPage().setTitle(FacadeProvider.getSystemConfigFacade().getSormasInstanceName()); initMainScreen(); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/StartupShutdownService.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/StartupShutdownService.java index bf2094ff4e8..2f6c0c88c3c 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/StartupShutdownService.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/StartupShutdownService.java @@ -35,7 +35,8 @@ public class StartupShutdownService { @PostConstruct public void startup() { - I18nProperties.setDefaultLanguage(Language.fromLocaleString(FacadeProvider.getConfigFacade().getCountryLocale())); + I18nProperties.setDefaultLanguage( + Language.fromLocaleString(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))); } @PreDestroy diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/adverseeventsfollowingimmunization/AefiInvestigationDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/adverseeventsfollowingimmunization/AefiInvestigationDataForm.java index 416e6fba5a4..c8e25009227 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/adverseeventsfollowingimmunization/AefiInvestigationDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/adverseeventsfollowingimmunization/AefiInvestigationDataForm.java @@ -52,9 +52,7 @@ import de.symeda.sormas.api.i18n.Validations; import de.symeda.sormas.api.immunization.ImmunizationDto; import de.symeda.sormas.api.utils.YesNoUnknown; -import de.symeda.sormas.api.utils.fieldaccess.UiFieldAccessCheckers; import de.symeda.sormas.api.utils.fieldvisibility.FieldVisibilityCheckers; -import de.symeda.sormas.ui.UserProvider; import de.symeda.sormas.ui.adverseeventsfollowingimmunization.components.fields.vaccines.AefiVaccinationsField; import de.symeda.sormas.ui.adverseeventsfollowingimmunization.components.form.FormSectionAccordion; import de.symeda.sormas.ui.utils.AbstractEditForm; @@ -294,7 +292,7 @@ public AefiInvestigationDataForm(boolean isCreateAction, boolean isPseudonymized AefiInvestigationDto.class, AefiInvestigationDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized)); this.isCreateAction = isCreateAction; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/adverseeventsfollowingimmunization/components/form/AefiDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/adverseeventsfollowingimmunization/components/form/AefiDataForm.java index e5de871f4cc..e46dfe98e19 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/adverseeventsfollowingimmunization/components/form/AefiDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/adverseeventsfollowingimmunization/components/form/AefiDataForm.java @@ -125,7 +125,7 @@ public AefiDataForm(boolean isCreateAction, boolean isPseudonymized, boolean inJ AefiDto.class, AefiDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized)); this.isCreateAction = isCreateAction; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseGrid.java index e0fc73b2a09..9a088867e67 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseGrid.java @@ -144,8 +144,8 @@ protected void initColumns() { setColumns(getGridColumns().toArray(String[]::new)); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) - || FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) + || FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND)) { getColumn(CaseIndexDto.EPID_NUMBER).setHidden(true); } else { getColumn(CaseIndexDto.EXTERNAL_ID).setHidden(true); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseView.java index e7d2c9b1bea..1cf71946e8b 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/AbstractCaseView.java @@ -204,7 +204,7 @@ public void refreshMenu(SubMenu menu, String params) { if (UiUtil.permitted(FeatureType.VIEW_TAB_CASES_THERAPY, UserRight.THERAPY_VIEW) && !caze.checkIsUnreferredPortHealthCase() && UiUtil.enabled(FeatureType.CLINICAL_MANAGEMENT) - && (!(FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) + && (!(FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && THERAPY_DISABLED_DISEASES.contains(caze.getDisease()))) && Disease.INFLUENZA != caze.getDisease()) { // Therapy view is not available for Luxembourg for Measles, IMI, IPI, Gradiastis & Cryptosporidiosis cases. @@ -225,7 +225,7 @@ public void refreshMenu(SubMenu menu, String params) { EnumSet.of(FeatureType.VIEW_TAB_CASES_FOLLOW_UP, FeatureType.VIEW_TAB_CASES_CLINICAL_COURSE, FeatureType.CLINICAL_MANAGEMENT), UserRight.CLINICAL_COURSE_VIEW) && !caze.checkIsUnreferredPortHealthCase() - && !(FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) + && !(FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && CLINICAL_COURSE_DISABLED_DISEASES.contains(caze.getDisease())) && Disease.INFLUENZA != caze.getDisease()) { // clinical course view is not available for Luxembourg for Measles, IMI, IPI, GIARDIASIS, Cryptosporidiosis cases, diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseController.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseController.java index 5270d8c0668..affa11dfbb9 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseController.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseController.java @@ -1669,7 +1669,7 @@ public void openClassificationRulesPopup(DiseaseClassificationCriteriaDto diseas classificationRulesLayout.addComponent(confirmedContent); } - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { if (diseaseCriteria.getConfirmedNoSymptomsCriteria() != null) { Label confirmedNoSymptomsContent = new Label(); confirmedNoSymptomsContent.setContentMode(ContentMode.HTML); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseCreateForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseCreateForm.java index bf267593713..f470ffc5eb4 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseCreateForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseCreateForm.java @@ -165,7 +165,7 @@ public CaseCreateForm(Boolean showHomeAddressForm, Boolean showPersonSearchButto CaseDataDto.class, CaseDataDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()) + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)) .andWithFeatureType(FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()), UiFieldAccessCheckers.getNoop()); this.convertedTravelEntry = convertedTravelEntry; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java index f5ddc8faeea..90324bd1b3b 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java @@ -340,7 +340,7 @@ public CaseDataForm( false, FieldVisibilityCheckers.withDisease(disease) .add(new OutbreakFieldVisibilityChecker(viewMode)) - .add(new CountryFieldVisibilityChecker(FacadeProvider.getConfigFacade().getCountryLocale())) + .add(new CountryFieldVisibilityChecker(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))) .add(new UserRightFieldVisibilityChecker(UiUtil::permitted)) .add(new FeatureTypeFieldVisibilityChecker(FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations())), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized)); @@ -1042,12 +1042,15 @@ protected void addFields() { new HealthConditionsForm( disease, FieldVisibilityCheckers.withDisease(disease) - .add(new CountryFieldVisibilityChecker(FacadeProvider.getConfigFacade().getCountryLocale())), - UiFieldAccessCheckers.getDefault(true, FacadeProvider.getConfigFacade().getCountryLocale()))) + .add( + new CountryFieldVisibilityChecker( + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))), + UiFieldAccessCheckers + .getDefault(true, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))) .setCaption(null); //diagnosis criteria - if ((FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) && disease == Disease.TUBERCULOSIS) { + if ((FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) && disease == Disease.TUBERCULOSIS) { Label diagnosisCriteriaHeadingLabel = new Label(I18nProperties.getString(Strings.headingDiagnosisCriteria)); diagnosisCriteriaHeadingLabel.addStyleName(H3); getContent().addComponent(diagnosisCriteriaHeadingLabel, DIAGNOSIS_CRITERIA_HEADING_LOC); @@ -1087,7 +1090,7 @@ protected void addFields() { setSoftRequired(true, CaseDataDto.INVESTIGATED_DATE, CaseDataDto.OUTCOME_DATE, CaseDataDto.PLAGUE_TYPE, CaseDataDto.SURVEILLANCE_OFFICER); if (diseaseClassificationExists() - && FacadeProvider.getConfigFacade().getCaseClassificationCalculationMode(disease).isManualEnabled() + && FacadeProvider.getSystemConfigFacade().getCaseClassificationCalculationMode(disease).isManualEnabled() && isVisibleAllowed(CaseDataDto.CASE_CLASSIFICATION)) { Button caseClassificationCalculationButton = ButtonHelper.createButton(Captions.caseClassificationCalculationButton, e -> { CaseClassification classification = FacadeProvider.getCaseClassificationFacade().getClassification(getValue()); @@ -1434,7 +1437,7 @@ public String getFormattedHtmlMessage() { } // Make external ID field read-only when SORMAS is connected to a SurvNet instance - if (StringUtils.isNotEmpty(FacadeProvider.getConfigFacade().getExternalSurveillanceToolGatewayUrl())) { + if (StringUtils.isNotEmpty(FacadeProvider.getSystemConfigFacade().getExternalSurveillanceToolGatewayUrl())) { setEnabled(false, CaseDataDto.EXTERNAL_ID); ((TextField) getField(CaseDataDto.EXTERNAL_ID)) .setInputPrompt(I18nProperties.getString(Strings.promptExternalIdExternalSurveillanceTool)); @@ -1834,9 +1837,9 @@ private void setEpidNumberError(TextField epidField, Button assignNewEpidNumberB } private boolean shouldHidePaperFormDates() { - return FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_FRANCE) - || FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) - || FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND); + return FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_FRANCE) + || FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) + || FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND); } private static class DiseaseChangeListener implements ValueChangeListener { @@ -1866,7 +1869,7 @@ public void valueChange(Property.ValueChangeEvent e) { protected void onConfirm() { diseaseField.removeValueChangeListener(DiseaseChangeListener.this); fields.stream().forEach(field -> { - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { if (diseaseField.getValue().equals(Disease.TUBERCULOSIS) && field.getId().equals(CaseDataDto.POST_MORTEM)) { field.setVisible(true); } else { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataView.java index d330539ef5a..e00069a009c 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataView.java @@ -34,6 +34,7 @@ import de.symeda.sormas.api.sample.SampleCriteria; import de.symeda.sormas.api.selfreport.SelfReportCriteria; import de.symeda.sormas.api.selfreport.SelfReportType; +import de.symeda.sormas.api.systemconfiguration.SystemConfiguration; import de.symeda.sormas.api.task.TaskContext; import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.vaccination.VaccinationAssociationType; @@ -150,7 +151,7 @@ protected void initView(String params) { layout.addSidePanelComponent(taskList, TASKS_LOC); } - final boolean isSmsServiceSetUp = FacadeProvider.getConfigFacade().isSmsServiceSetUp(); + final boolean isSmsServiceSetUp = FacadeProvider.getSystemConfigFacade().isPresent(SystemConfiguration.SMS_AUTH_SECRET); if (isSmsServiceSetUp && UiUtil.permitted(FeatureType.MANUAL_EXTERNAL_MESSAGES, UserRight.SEND_MANUAL_EXTERNAL_MESSAGES)) { SmsListComponent smsList = new SmsListComponent(getCaseRef(), caze.getPerson(), isEditAllowed); smsList.addStyleName(CssStyles.SIDE_COMPONENT); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseFilterForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseFilterForm.java index e79c590f53e..b31d38fbee4 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseFilterForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseFilterForm.java @@ -124,7 +124,7 @@ protected CaseFilterForm() { super( CaseCriteria.class, CaseDataDto.I18N_PREFIX, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), JurisdictionFieldConfig.of(CaseDataDto.REGION, CaseDataDto.DISTRICT, CaseDataDto.COMMUNITY)); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseGridDetailed.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseGridDetailed.java index 52a23ebdbcb..e0548b123bd 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseGridDetailed.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseGridDetailed.java @@ -115,7 +115,7 @@ protected void initColumns() { super.initColumns(); - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { getColumn(CaseIndexDetailedDto.RE_INFECTION).setHidden(true); } getColumn(CaseIndexDetailedDto.SEX).setWidth(80); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseInfoLayout.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseInfoLayout.java index 529827e3de6..dc034299ed5 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseInfoLayout.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseInfoLayout.java @@ -78,7 +78,7 @@ private void updateCaseInfo() { caseIdLabel.setId("caseIdLabel"); caseIdLabel.setDescription(caseDto.getUuid()); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { addDescLabel( leftColumnLayout, CaseDataDto.EXTERNAL_ID, diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CasesView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CasesView.java index eab5a99c34b..716516524a9 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CasesView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CasesView.java @@ -77,6 +77,7 @@ import de.symeda.sormas.api.sample.AdditionalTestDto; import de.symeda.sormas.api.sample.SampleDto; import de.symeda.sormas.api.sample.SampleExportDto; +import de.symeda.sormas.api.systemconfiguration.SystemConfiguration; import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.utils.DateHelper; import de.symeda.sormas.api.utils.UtilDate; @@ -248,7 +249,7 @@ private ExportConfigurationDto buildDetailedExportConfiguration() { caseFollowUpEnabled, hasClinicalCourseRight, hasTherapyRight, - FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE), FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()) .stream() .map(ExportPropertyMetaInfo::getPropertyId) @@ -366,7 +367,7 @@ private void addCommonCasesOverviewToolbar() { Strings.infoSampleExport); } - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND) + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND) && UiUtil.permitted(UserRight.BAG_EXPORT)) { StreamResource bagExportResource = DownloadUtil.createCsvExportStreamResource( BAGExportCaseDto.class, @@ -390,7 +391,7 @@ private void addCommonCasesOverviewToolbar() { caseFollowUpEnabled, hasClinicalCourseRight, hasTherapyRight, - FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE), FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()), customExportWindow::close); customExportsLayout.setExportCallback( @@ -740,7 +741,7 @@ public HorizontalLayout createStatusFilterBar() { true); }, hasBulkOperationsRight && UiUtil.permitted(UserRight.CASE_DELETE))); - final boolean isSmsServiceSetUp = FacadeProvider.getConfigFacade().isSmsServiceSetUp(); + final boolean isSmsServiceSetUp = FacadeProvider.getSystemConfigFacade().isPresent(SystemConfiguration.SMS_AUTH_SECRET); if (isSmsServiceSetUp && UiUtil.permitted(FeatureType.MANUAL_EXTERNAL_MESSAGES, UserRight.SEND_MANUAL_EXTERNAL_MESSAGES)) { menuBarItems.add( new MenuBarHelper.MenuBarItem(I18nProperties.getCaption(Captions.messagesSendSMS), VaadinIcons.MOBILE_RETRO, mi -> { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/components/caseselection/CaseSelectionGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/components/caseselection/CaseSelectionGrid.java index 329fdabfc5f..be36ecc3d23 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/components/caseselection/CaseSelectionGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/components/caseselection/CaseSelectionGrid.java @@ -59,7 +59,7 @@ private void buildGrid() { CaseSelectionDto.CASE_CLASSIFICATION, CaseSelectionDto.OUTCOME); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { getColumn(CaseSelectionDto.EPID_NUMBER).setHidden(true); } else { getColumn(CaseSelectionDto.EXTERNAL_ID).setHidden(true); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/components/linelisting/LineListingLayout.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/components/linelisting/LineListingLayout.java index be2923b5df7..194d5ecb67d 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/components/linelisting/LineListingLayout.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/components/linelisting/LineListingLayout.java @@ -573,7 +573,7 @@ private void updateFacilityFields(ComboBox cbFacility, Tex } private boolean shouldShowEpidNumber() { - ConfigFacade configFacade = FacadeProvider.getConfigFacade(); + ConfigFacade configFacade = FacadeProvider.getSystemConfigFacade(); return UiUtil.permitted(UserRight.CASE_CHANGE_EPID_NUMBER) && !configFacade.isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) && !configFacade.isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/porthealthinfo/PortHealthInfoForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/porthealthinfo/PortHealthInfoForm.java index 2fecf46b4c4..02886032a54 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/porthealthinfo/PortHealthInfoForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/caze/porthealthinfo/PortHealthInfoForm.java @@ -81,7 +81,7 @@ public PortHealthInfoForm(PointOfEntryDto pointOfEntry, String pointOfEntryDetai PortHealthInfoDto.class, PortHealthInfoDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, pseudonymized)); this.pointOfEntry = pointOfEntry; this.pointOfEntryDetails = pointOfEntryDetails; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalCourseForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalCourseForm.java index 6b1dec2776f..c889629b37e 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalCourseForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalCourseForm.java @@ -17,7 +17,7 @@ public ClinicalCourseForm(boolean isPseudonymized, boolean inJurisdiction) { ClinicalCourseDto.class, ClinicalCourseDto.I18N_PREFIX, true, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized)); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalVisitForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalVisitForm.java index ce80ece4dbe..51ca0237adf 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalVisitForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalVisitForm.java @@ -40,7 +40,7 @@ public ClinicalVisitForm(boolean create, Disease disease, PersonDto person, bool UiFieldAccessCheckers.forDataAccessLevel( UiUtil.getPseudonymizableDataAccessLevel(inJurisdiction), isPseudonymized, - FacadeProvider.getConfigFacade().getCountryLocale())); + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))); if (create) { hideValidationUntilNextCommit(); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalVisitGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalVisitGrid.java index fbebeec4aa3..6329d7792bf 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalVisitGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/ClinicalVisitGrid.java @@ -68,7 +68,9 @@ public ClinicalVisitGrid(CaseReferenceDto caseRef, boolean isPseudonymized, bool setCellStyleGenerator( FieldAccessCellStyleGenerator.withFieldAccessCheckers( ClinicalVisitIndexDto.class, - UiFieldAccessCheckers.forSensitiveData(isPseudonymized, FacadeProvider.getConfigFacade().getCountryLocale()))); + UiFieldAccessCheckers.forSensitiveData( + isPseudonymized, + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); addItemClickListener(e -> { if (ACTION_BTN_ID.equals(e.getPropertyId()) || e.isDoubleClick()) { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/AbstractConfigurationView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/AbstractConfigurationView.java index 6b7391e6764..feb3f1d8b85 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/AbstractConfigurationView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/AbstractConfigurationView.java @@ -133,7 +133,7 @@ public static Class registerViews(Navigator firstAccessibleView = firstAccessibleView != null ? firstAccessibleView : SystemConfigurationView.class; } - if (FacadeProvider.getConfigFacade().isDevMode() && UiUtil.permitted(UserRight.DEV_MODE)) { + if (FacadeProvider.getSystemConfigFacade().isDevMode() && UiUtil.permitted(UserRight.DEV_MODE)) { navigator.addView(DevModeView.VIEW_NAME, DevModeView.class); firstAccessibleView = firstAccessibleView != null ? firstAccessibleView : DevModeView.class; } @@ -272,7 +272,7 @@ public void refreshMenu(SubMenu menu, String params) { false); } - if (FacadeProvider.getConfigFacade().isDevMode() && UiUtil.permitted(UserRight.DEV_MODE)) { + if (FacadeProvider.getSystemConfigFacade().isDevMode() && UiUtil.permitted(UserRight.DEV_MODE)) { menu.addView( DevModeView.VIEW_NAME, I18nProperties.getPrefixCaption("View", DevModeView.VIEW_NAME.replaceAll("/", ".") + ".short", ""), diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/DevModeView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/DevModeView.java index 33f57b38e01..f43adbf8298 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/DevModeView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/DevModeView.java @@ -984,7 +984,8 @@ private void generateCases(CaseGenerationConfig config) { } fieldVisibilityCheckers = - FieldVisibilityCheckers.withDisease(disease).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()); + FieldVisibilityCheckers.withDisease(disease) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)); LocalDateTime referenceDateTime = getReferenceDateTime(i, config.getEntityCountAsNumber(), baseOffset, disease, config.getStartDate(), daysBetween); @@ -1292,7 +1293,8 @@ private void generateContacts(ContactGenerationConfig contactGenerationConfig) { for (int i = 0; i < contactGenerationConfig.getEntityCountAsNumber(); i++) { fieldVisibilityCheckers = - FieldVisibilityCheckers.withDisease(disease).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()); + FieldVisibilityCheckers.withDisease(disease) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)); LocalDateTime referenceDateTime = getReferenceDateTime( i, @@ -1491,7 +1493,8 @@ private void generateEvents(EventGenerationConfig eventGenerationConfig) { eventGenerationConfig.getStartDate(), daysBetween); fieldVisibilityCheckers = - FieldVisibilityCheckers.withDisease(disease).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()); + FieldVisibilityCheckers.withDisease(disease) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)); } else { referenceDateTime = getReferenceDateTime( i, @@ -1501,7 +1504,8 @@ private void generateEvents(EventGenerationConfig eventGenerationConfig) { eventGenerationConfig.getStartDate(), daysBetween); fieldVisibilityCheckers = - FieldVisibilityCheckers.withDisease(Disease.OTHER).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()); + FieldVisibilityCheckers.withDisease(Disease.OTHER) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)); } // title diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/system/SystemConfigurationValueEditForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/system/SystemConfigurationValueEditForm.java index 391d42e3fab..6662a4af694 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/system/SystemConfigurationValueEditForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/system/SystemConfigurationValueEditForm.java @@ -91,6 +91,7 @@ public SystemConfigurationValueEditForm(final SystemConfigurationValueDto value) } + /** * Adds the fields to the form based on the system configuration value. */ diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AbstractContactGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AbstractContactGrid.java index 7601e9c4668..1eadd4e1142 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AbstractContactGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AbstractContactGrid.java @@ -159,11 +159,11 @@ protected void initColumns() { } setColumns(getColumnList().toArray(String[]::new)); - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { getColumn(ContactIndexDto.CONTACT_CATEGORY).setHidden(true); } - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) - && !FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND)) { + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) + && !FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND)) { getColumn(CaseIndexDto.EXTERNAL_ID).setHidden(true); getColumn(CaseIndexDto.EXTERNAL_TOKEN).setHidden(true); } @@ -172,7 +172,7 @@ protected void initColumns() { ((Column) getColumn(ContactIndexDto.PERSON_UUID)).setRenderer(new UuidRenderer()); ((Column) getColumn(ContactIndexDto.FOLLOW_UP_UNTIL)).setRenderer(new DateRenderer(DateFormatHelper.getDateFormat())); - if (!FacadeProvider.getConfigFacade().isExternalJournalActive()) { + if (!FacadeProvider.getSystemConfigFacade().isExternalJournalActive()) { getColumn(ContactIndexDto.SYMPTOM_JOURNAL_STATUS).setHidden(true); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AdoptAddressLayout.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AdoptAddressLayout.java index 216e82ec64a..161e7866383 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AdoptAddressLayout.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/AdoptAddressLayout.java @@ -47,7 +47,7 @@ public AdoptAddressLayout(CaseReferenceDto caseReference) { private void showAddressOfCasePerson(CaseReferenceDto caseReference) { LocationEditForm locationForm = new LocationEditForm( - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), UiFieldAccessCheckers.getNoop()); locationForm.setValue( FacadeProvider.getPersonFacade() diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java index f209b3be041..ba56c84fc9d 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java @@ -141,7 +141,7 @@ public ContactCreateForm( ContactDto.class, ContactDto.I18N_PREFIX, FieldVisibilityCheckers.withDisease(disease) - .andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)) .andWithFeatureType(FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations())); this.disease = disease; @@ -389,7 +389,8 @@ private void updateContactProximity() { ContactProximity value = (ContactProximity) contactProximity.getNullableValue(); FieldHelper.updateEnumData( contactProximity, - Arrays.asList(ContactProximity.getValues(disease, FacadeProvider.getConfigFacade().getCountryLocale()))); + Arrays.asList( + ContactProximity.getValues(disease, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); contactProximity.setValue(value); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataForm.java index bf4d3f5e447..ad03027438e 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataForm.java @@ -215,14 +215,15 @@ public ContactDataForm(Disease disease, ViewMode viewMode, boolean isPseudonymiz ContactDto.I18N_PREFIX, false, FieldVisibilityCheckers.withDisease(disease) - .andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)) .andWithFeatureType(FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized)); this.viewMode = viewMode; this.disease = disease; this.diseaseHasFollowUp = FacadeProvider.getDiseaseConfigurationFacade().hasFollowUp(disease); - this.luxMeasles = Disease.MEASLES == disease && FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG); + this.luxMeasles = + Disease.MEASLES == disease && FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG); addFields(); } @@ -543,8 +544,11 @@ protected void addFields() { new HealthConditionsForm( disease, FieldVisibilityCheckers.withDisease(disease) - .add(new CountryFieldVisibilityChecker(FacadeProvider.getConfigFacade().getCountryLocale())), - UiFieldAccessCheckers.getDefault(true, FacadeProvider.getConfigFacade().getCountryLocale()))); + .add( + new CountryFieldVisibilityChecker( + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))), + UiFieldAccessCheckers + .getDefault(true, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); clinicalCourseForm.setCaption(null); Label generalCommentLabel = new Label(I18nProperties.getPrefixCaption(ContactDto.I18N_PREFIX, ContactDto.ADDITIONAL_DETAILS)); @@ -914,7 +918,8 @@ private void updateDiseaseConfiguration(Disease disease) { FieldHelper.updateEnumData( contactProximity, - Arrays.asList(ContactProximity.getValues(disease, FacadeProvider.getConfigFacade().getCountryLocale()))); + Arrays.asList( + ContactProximity.getValues(disease, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); } public Disease getSelectedDisease() { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataView.java index b8d28e718d9..05245b6dd5b 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataView.java @@ -14,6 +14,8 @@ */ package de.symeda.sormas.ui.contact; +import java.util.List; + import com.vaadin.server.Page; import com.vaadin.shared.ui.ContentMode; import com.vaadin.ui.Button; @@ -74,8 +76,6 @@ import de.symeda.sormas.ui.utils.components.sidecomponent.SideComponentLayout; import de.symeda.sormas.ui.vaccination.list.VaccinationListComponent; -import java.util.List; - public class ContactDataView extends AbstractContactView implements HasName { private static final long serialVersionUID = -1L; @@ -220,7 +220,8 @@ protected void initView(String params) { layout.addSidePanelComponent(taskList, TASKS_LOC); } - if (!(FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && List.of(Disease.INVASIVE_MENINGOCOCCAL_INFECTION, Disease.MEASLES).contains(contactDto.getDisease()))) { + if (!(FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) + && List.of(Disease.INVASIVE_MENINGOCOCCAL_INFECTION, Disease.MEASLES).contains(contactDto.getDisease()))) { if (UiUtil.permitted(UserRight.SAMPLE_VIEW)) { SampleListComponent sampleList = new SampleListComponent( new SampleCriteria().contact(getContactRef()).disease(contactDto.getDisease()).sampleAssociationType(SampleAssociationType.CONTACT), diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactFollowUpGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactFollowUpGrid.java index 441ebdb3eb8..00ec707c8b5 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactFollowUpGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactFollowUpGrid.java @@ -6,11 +6,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.stream.Collectors; -import com.vaadin.data.provider.DataProvider; import com.vaadin.navigator.View; -import com.vaadin.shared.data.sort.SortDirection; import com.vaadin.ui.DescriptionGenerator; import com.vaadin.ui.Label; import com.vaadin.ui.StyleGenerator; @@ -25,7 +22,6 @@ import de.symeda.sormas.api.followup.FollowUpDto; import de.symeda.sormas.api.i18n.I18nProperties; import de.symeda.sormas.api.utils.DateHelper; -import de.symeda.sormas.api.utils.SortProperty; import de.symeda.sormas.api.visit.VisitResultDto; import de.symeda.sormas.ui.ControllerProvider; import de.symeda.sormas.ui.utils.DateFormatHelper; @@ -64,7 +60,7 @@ public ContactFollowUpGrid(ContactCriteria criteria, Class v ((Column) getColumn(FollowUpDto.REPORT_DATE)).setRenderer(new DateRenderer(DateFormatHelper.getDateFormat())); ((Column) getColumn(FollowUpDto.FOLLOW_UP_UNTIL)).setRenderer(new DateRenderer(DateFormatHelper.getDateFormat())); - if (!FacadeProvider.getConfigFacade().isExternalJournalActive()) { + if (!FacadeProvider.getSystemConfigFacade().isExternalJournalActive()) { getColumn(ContactIndexDto.SYMPTOM_JOURNAL_STATUS).setHidden(true); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsFilterForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsFilterForm.java index 0207f77bffc..9fdbf4c3089 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsFilterForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsFilterForm.java @@ -101,7 +101,7 @@ protected ContactsFilterForm() { super( ContactCriteria.class, ContactIndexDto.I18N_PREFIX, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), JurisdictionFieldConfig.of(ContactCriteria.REGION, ContactCriteria.DISTRICT, ContactCriteria.COMMUNITY)); } @@ -219,7 +219,7 @@ public void addMoreFilters(CustomLayout moreFiltersContainer) { 200)); followUpUntilTo.removeAllValidators(); - if (FacadeProvider.getConfigFacade().isExternalJournalActive()) { + if (FacadeProvider.getSystemConfigFacade().isExternalJournalActive()) { addField( moreFiltersContainer, FieldConfiguration.withCaptionAndPixelSized( diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsView.java index 6bc015a821f..97de3f73da4 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactsView.java @@ -269,7 +269,7 @@ public ContactsView() { exportLayout.addComponent(btnCustomExport); } - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND) + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND) && UiUtil.permitted(UserRight.BAG_EXPORT)) { StreamResource bagExportResource = DownloadUtil.createCsvExportStreamResource( BAGExportContactDto.class, @@ -871,7 +871,7 @@ public static ExportConfigurationDto buildDetailedExportConfiguration() { ImportExportUtils .getContactExportProperties( ContactDownloadUtil::getPropertyCaption, - FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE), FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()) .stream() .map(ExportPropertyMetaInfo::getPropertyId) diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/contactfield/ContactLineField.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/contactfield/ContactLineField.java index 9e61c1ce0fb..a4eb0769db5 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/contactfield/ContactLineField.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/contactfield/ContactLineField.java @@ -85,7 +85,8 @@ protected Component initContent() { } public void updateTypeOfContactValues(Disease disease) { - ContactProximity[] values = ContactProximity.getValues(disease, FacadeProvider.getConfigFacade().getCountryLocale()); + ContactProximity[] values = + ContactProximity.getValues(disease, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)); typeOfContact.setItems(values); if (!Arrays.asList(values).contains(typeOfContact.getValue())) { typeOfContact.setValue(null); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/customexport/CustomExportController.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/customexport/CustomExportController.java index 4e9004ba270..c0f57df5833 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/customexport/CustomExportController.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/customexport/CustomExportController.java @@ -49,7 +49,7 @@ public void openContactExportWindow(ContactCriteria contactCriteria, Supplier new DashboardNetworkComponent(dashboardDataProvider)); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/gis/GisDashboardMapComponent.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/gis/GisDashboardMapComponent.java index b6e824d1000..1955d344347 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/gis/GisDashboardMapComponent.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/gis/GisDashboardMapComponent.java @@ -1377,7 +1377,7 @@ private void showEventMarkers() { if (districtCenter != null) { marker.setLatLon(districtCenter.getLat(), districtCenter.getLon()); } else { - GeoLatLon countryCenter = FacadeProvider.getConfigFacade().getCountryCenter(); + GeoLatLon countryCenter = FacadeProvider.getSystemConfigFacade().getCountryCenter(); marker.setLatLon(countryCenter.getLat(), countryCenter.getLon()); } } else { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/map/BaseDashboardMapComponent.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/map/BaseDashboardMapComponent.java index 5b5757bf497..b21e37e18ce 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/map/BaseDashboardMapComponent.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/map/BaseDashboardMapComponent.java @@ -98,7 +98,7 @@ protected void refreshMap(boolean forced) { Date fromDate = dashboardDataProvider.getFromDate(); Date toDate = dashboardDataProvider.getToDate(); - int maxDisplayCount = FacadeProvider.getConfigFacade().getDashboardMapMarkerLimit(); + int maxDisplayCount = FacadeProvider.getSystemConfigFacade().getDashboardMapMarkerLimit(); Long count = 0L; if (!forced && maxDisplayCount >= 0) { count = getMarkerCount(fromDate, toDate, maxDisplayCount); @@ -273,8 +273,8 @@ protected void addComponents() { final GeoLatLon mapCenter; // If map.usecountrycenter=true, use config coordinates. Else try to calculate the center of the user region/country - if (FacadeProvider.getConfigFacade().isMapUseCountryCenter()) { - mapCenter = FacadeProvider.getConfigFacade().getCountryCenter(); + if (FacadeProvider.getSystemConfigFacade().isMapUseCountryCenter()) { + mapCenter = FacadeProvider.getSystemConfigFacade().getCountryCenter(); map.setCenter(mapCenter); } else { UserDto user = UiUtil.getUser(); @@ -284,13 +284,13 @@ protected void addComponents() { mapCenter = geoShapeProvider.getCenterOfAllRegions(); } - GeoLatLon center = Optional.ofNullable(mapCenter).orElseGet(FacadeProvider.getConfigFacade()::getCountryCenter); + GeoLatLon center = Optional.ofNullable(mapCenter).orElseGet(FacadeProvider.getSystemConfigFacade()::getCountryCenter); map.setCenter(center); } } - map.setZoom(FacadeProvider.getConfigFacade().getMapZoom()); + map.setZoom(FacadeProvider.getSystemConfigFacade().getMapZoom()); // Add components addComponent(createHeader()); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/map/DashboardMapComponent.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/map/DashboardMapComponent.java index a8706c77f67..123b8dcaeb8 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/map/DashboardMapComponent.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/map/DashboardMapComponent.java @@ -997,7 +997,7 @@ private void showEventMarkers(List events) { if (districtCenter != null) { marker.setLatLon(districtCenter.getLat(), districtCenter.getLon()); } else { - GeoLatLon countryCenter = FacadeProvider.getConfigFacade().getCountryCenter(); + GeoLatLon countryCenter = FacadeProvider.getSystemConfigFacade().getCountryCenter(); marker.setLatLon(countryCenter.getLat(), countryCenter.getLon()); } } else { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/epicurve/builders/CaseStatusCurveBuilder.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/epicurve/builders/CaseStatusCurveBuilder.java index 77c1b5d2c74..6e550ba9779 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/epicurve/builders/CaseStatusCurveBuilder.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/epicurve/builders/CaseStatusCurveBuilder.java @@ -40,13 +40,13 @@ List buildEpiCurveSeriesElements(List filteredDates suspectNumbers[i] = caseCounts.getOrDefault(CaseClassification.SUSPECT, 0).intValue(); notYetClassifiedNumbers[i] = caseCounts.getOrDefault(CaseClassification.NOT_CLASSIFIED, 0).intValue(); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { confirmedNoSymptomsNumbers[i] = caseCounts.getOrDefault(CaseClassification.CONFIRMED_NO_SYMPTOMS, 0).intValue(); confirmedUnknownSymptomsNumbers[i] = caseCounts.getOrDefault(CaseClassification.CONFIRMED_UNKNOWN_SYMPTOMS, 0).intValue(); } } - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { return Arrays.asList( new EpiCurveSeriesElement(Captions.dashboardNotYetClassified, "#808080", notYetClassifiedNumbers), new EpiCurveSeriesElement(Captions.dashboardSuspect, "#FFD700", suspectNumbers), diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/statistics/CaseStatisticsComponent.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/statistics/CaseStatisticsComponent.java index fc332c5e7f7..4794d5ca638 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/statistics/CaseStatisticsComponent.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/statistics/CaseStatisticsComponent.java @@ -40,7 +40,7 @@ public CaseStatisticsComponent() { new DashboardStatisticsCountElement(I18nProperties.getCaption(Captions.dashboardNotACase), CountElementStyle.POSITIVE); caseClassificationNotYetClassified = new DashboardStatisticsCountElement(I18nProperties.getCaption(Captions.dashboardNotYetClassified), CountElementStyle.MINOR); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { buildCountLayout( caseClassificationConfirmed, caseClassificationConfirmedNoSymptoms, @@ -63,7 +63,7 @@ public void update(Map cases) { updateTotalLabel(Integer.toString(cases.values().stream().reduce(0, Integer::sum))); caseClassificationConfirmed.updateCountLabel(cases.getOrDefault(CaseClassification.CONFIRMED, 0)); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { caseClassificationConfirmedNoSymptoms.updateCountLabel(cases.getOrDefault(CaseClassification.CONFIRMED_NO_SYMPTOMS, 0)); caseClassificationConfirmedUnknownSymptoms.updateCountLabel(cases.getOrDefault(CaseClassification.CONFIRMED_UNKNOWN_SYMPTOMS, 0)); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/statistics/summary/DiseaseSummaryComponent.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/statistics/summary/DiseaseSummaryComponent.java index 7990f7ebbaf..faa06307a35 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/statistics/summary/DiseaseSummaryComponent.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/surveillance/components/statistics/summary/DiseaseSummaryComponent.java @@ -55,7 +55,7 @@ public DiseaseSummaryComponent() { contactsConvertedToCase = new DiseaseSummaryElementComponent(Strings.headingCasesResultingFromContacts); addComponent(contactsConvertedToCase); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { casesWithReferenceDefinitionFulfilled = new DiseaseSummaryElementComponent(Strings.headingcasesWithReferenceDefinitionFulfilled); addComponent(casesWithReferenceDefinitionFulfilled); } @@ -79,7 +79,7 @@ public void update(DashboardDataProvider dashboardDataProvider) { casesInQuarantineByDate.updateTotalLabel(dashboardDataProvider.getCasesInQuarantineCount().toString()); casesPlacedInQuarantineByDate.updateTotalLabel(dashboardDataProvider.getCasesPlacedInQuarantineCount().toString()); contactsConvertedToCase.updateTotalLabel(dashboardDataProvider.getContactsConvertedToCaseCount().toString()); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { casesWithReferenceDefinitionFulfilled.updateTotalLabel(dashboardDataProvider.getCaseWithReferenceDefinitionFulfilledCount().toString()); } } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/DocGenerationController.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/DocGenerationController.java index cd73d296e73..f4f8b3ad774 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/DocGenerationController.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/docgeneration/DocGenerationController.java @@ -145,7 +145,7 @@ private ByteArrayInputStream generateZip( DocumentTemplateDto template, Boolean shouldUploadGeneratedDoc, Map generatedDocumentContents) { - long fileSizeLimitMB = FacadeProvider.getConfigFacade().getDocumentUploadSizeLimitMb(); + long fileSizeLimitMB = FacadeProvider.getSystemConfigFacade().getDocumentUploadSizeLimitMb(); List fileSizeLimitExceeded = new ArrayList<>(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/environment/EnvironmentCreateForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/environment/EnvironmentCreateForm.java index c7f425313d7..5d4fc2e4509 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/environment/EnvironmentCreateForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/environment/EnvironmentCreateForm.java @@ -48,7 +48,7 @@ public EnvironmentCreateForm() { EnvironmentDto.class, EnvironmentDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), UiFieldAccessCheckers.getNoop()); addFields(); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/environment/EnvironmentDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/environment/EnvironmentDataForm.java index 9750ac12dcc..4bf6e21397a 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/environment/EnvironmentDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/environment/EnvironmentDataForm.java @@ -70,7 +70,7 @@ public EnvironmentDataForm(boolean isPseudonymized, boolean inJurisdiction, bool EnvironmentDto.class, EnvironmentDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized), isEditAllowed); addFields(); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/CaseEpiDataView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/CaseEpiDataView.java index 7eba690feaa..f14d87d6c26 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/CaseEpiDataView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/CaseEpiDataView.java @@ -101,7 +101,7 @@ protected void initView(String params) { } layout.addSidePanelComponent(sourceContactsLayout, LOC_SOURCE_CONTACTS); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) && UiUtil.permitted(FeatureType.TRAVEL_ENTRIES, UserRight.TRAVEL_ENTRY_VIEW)) { TravelEntryListCriteria travelEntryListCriteria = new TravelEntryListCriteria.Builder().withCase(getCaseRef()).build(); layout.addSidePanelComponent( diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/EpiDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/EpiDataForm.java index c2f807af45d..b211b53e16b 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/EpiDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/EpiDataForm.java @@ -117,7 +117,8 @@ public EpiDataForm( EpiDataDto.class, EpiDataDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withDisease(disease).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withDisease(disease) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized), isEditAllowed); this.disease = disease; @@ -141,8 +142,11 @@ protected void addFields() { new ExposuresField( disease, FieldVisibilityCheckers.withDisease(disease) - .add(new CountryFieldVisibilityChecker(FacadeProvider.getConfigFacade().getCountryLocale())), - UiFieldAccessCheckers.getDefault(false, FacadeProvider.getConfigFacade().getCountryLocale()), + .add( + new CountryFieldVisibilityChecker( + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))), + UiFieldAccessCheckers + .getDefault(false, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), true)); exposuresField.setEpiDataParentClass(parentClass); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/epipulse/EpiPulseExportController.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/epipulse/EpiPulseExportController.java index 9a40b134326..5434e39caf2 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/epipulse/EpiPulseExportController.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/epipulse/EpiPulseExportController.java @@ -219,7 +219,7 @@ public void download(EpipulseExportIndexDto exportIndexDto) { return; } - String generatedFilesPath = FacadeProvider.getConfigFacade().getGeneratedFilesPath(); + String generatedFilesPath = FacadeProvider.getSystemConfigFacade().getGeneratedFilesPath(); String exportFilePath = generatedFilesPath + "/" + exportIndexDto.getExportFileName(); File file = new File(exportFilePath); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventDataForm.java index fa474868dd7..7e9ec0397e2 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventDataForm.java @@ -173,7 +173,7 @@ public EventDataForm(boolean create, boolean isPseudonymized, boolean inJurisdic EventDto.class, EventDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), createFieldAccessCheckers(isPseudonymized, inJurisdiction, true)); isCreateForm = create; @@ -615,7 +615,7 @@ protected void addFields() { srcMediaName); // Make external ID field read-only when SORMAS is connected to a SurvNet instance - if (StringUtils.isNotEmpty(FacadeProvider.getConfigFacade().getExternalSurveillanceToolGatewayUrl())) { + if (StringUtils.isNotEmpty(FacadeProvider.getSystemConfigFacade().getExternalSurveillanceToolGatewayUrl())) { setEnabled(false, EventDto.EXTERNAL_ID); ((TextField) getField(EventDto.EXTERNAL_ID)).setInputPrompt(I18nProperties.getString(Strings.promptExternalIdExternalSurveillanceTool)); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantsView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantsView.java index dafea38e8cc..8e7479fb95f 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantsView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventParticipantsView.java @@ -447,7 +447,7 @@ private void addImportExportButtons(HorizontalLayout actionButtonsLayout) { ExportType.EVENT_PARTICIPANTS, ImportExportUtils.getEventParticipantExportProperties( EventParticipantDownloadUtil::getPropertyCaption, - FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE), FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()), customExportWindow::close); customExportsLayout.setExportCallback( diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsFilterForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsFilterForm.java index e62ee6a7305..fdce7b35cd2 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsFilterForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsFilterForm.java @@ -125,7 +125,7 @@ protected EventsFilterForm(boolean hideEventStatusFilter, boolean hideActionFilt super( EventCriteria.class, EventIndexDto.I18N_PREFIX, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), JurisdictionFieldConfig.of(LocationDto.REGION, LocationDto.DISTRICT, LocationDto.COMMUNITY)); this.hideEventStatusFilter = hideEventStatusFilter; this.hideActionFilters = hideActionFilters; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsView.java index 998192c2341..da613b8fbd6 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/events/EventsView.java @@ -752,7 +752,7 @@ private ExportConfigurationDto buildDetailedExportConfiguration() { .getEventExportProperties( EventDownloadUtil::getPropertyCaption, eventGroupFeatureEnabled, - FacadeProvider.getConfigFacade().getCountryLocale(), + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE), FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations()) .stream() .map(ExportPropertyMetaInfo::getPropertyId) diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/exposure/ExposureForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/exposure/ExposureForm.java index 8dc05fb31ce..6801f33215f 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/exposure/ExposureForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/exposure/ExposureForm.java @@ -454,7 +454,7 @@ public void setValue(ExposureDto newFieldValue) throws ReadOnlyException, Conver protected String createHtmlLayout() { //@formatter:off String HTML_LAYOUT = UUID_REPORTING_USER; - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) && epiDataParentClass == CaseDataDto.class) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) && epiDataParentClass == CaseDataDto.class) { HTML_LAYOUT += fluidRowLocs(ExposureDto.PROBABLE_INFECTION_ENVIRONMENT) + (FacadeProvider.getExternalSurveillanceToolFacade().isFeatureEnabled() ? VaadinIcons.INFO_CIRCLE.getHtml() + " " + (I18nProperties.getString(Strings.infoCheckProbableInfectionEnvironment)) + "

" : "

"); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/exposure/ExposuresField.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/exposure/ExposuresField.java index 775efc1c2cd..7a73d268f6c 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/exposure/ExposuresField.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/exposure/ExposuresField.java @@ -19,7 +19,6 @@ import java.util.function.Consumer; import java.util.function.Supplier; -import de.symeda.sormas.api.Disease; import org.apache.commons.lang3.StringUtils; import com.vaadin.icons.VaadinIcons; @@ -32,6 +31,7 @@ import com.vaadin.v7.ui.Label; import com.vaadin.v7.ui.Table; +import de.symeda.sormas.api.Disease; import de.symeda.sormas.api.EntityDto; import de.symeda.sormas.api.FacadeProvider; import de.symeda.sormas.api.caze.CaseDataDto; @@ -119,7 +119,9 @@ protected void updateColumns() { table.setCellStyleGenerator( FieldAccessCellStyleGenerator.withFieldAccessCheckers( ExposureDto.class, - UiFieldAccessCheckers.forSensitiveData(isPseudonymized, FacadeProvider.getConfigFacade().getCountryLocale()))); + UiFieldAccessCheckers.forSensitiveData( + isPseudonymized, + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); for (Object columnId : table.getVisibleColumns()) { if (columnId.equals(ACTION_COLUMN_ID)) { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessageController.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessageController.java index e39d9de3ae8..156b2b51449 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessageController.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessageController.java @@ -96,7 +96,7 @@ public class ExternalMessageController { private static ExternalMessageProcessingFacade getExternalMessageProcessingFacade() { return new ExternalMessageProcessingFacade( FacadeProvider.getExternalMessageFacade(), - FacadeProvider.getConfigFacade(), + FacadeProvider.getSystemConfigFacade(), FacadeProvider.getFeatureConfigurationFacade(), FacadeProvider.getPersonFacade(), FacadeProvider.getCaseFacade(), @@ -357,7 +357,7 @@ private HorizontalLayout getExternalMessageButtonsPanel(ExternalMessageDto exter buttonsPanel.addComponent(deleteButton); } - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { Button unclearButton = ButtonHelper.createButton( Captions.actionUnclearLabMessage, I18nProperties.getCaption(Captions.actionUnclearLabMessage), diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessageGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessageGrid.java index 775f1245eef..9f948a609f5 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessageGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessageGrid.java @@ -100,7 +100,7 @@ public ExternalMessageGrid(ExternalMessageCriteria criteria) { String[] columns = new String[] { SHOW_MESSAGE }; - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { columns = ArrayUtils.add(columns, ExternalMessageIndexDto.UUID); } columns = ArrayUtils.addAll( @@ -121,7 +121,7 @@ public ExternalMessageGrid(ExternalMessageCriteria criteria) { COLUMN_DOWNLOAD); setColumns(columns); - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { ((Column) getColumn(ExternalMessageIndexDto.UUID)).setRenderer(new UuidRenderer()); } ((Column) getColumn(ExternalMessageIndexDto.MESSAGE_DATE_TIME)) diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessagesView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessagesView.java index 02f196f0901..a67934f8e0e 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessagesView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/externalmessage/ExternalMessagesView.java @@ -167,7 +167,7 @@ public HorizontalLayout createStatusFilterBar() { createAndAddStatusButton(ExternalMessageStatus.UNPROCESSED, statusFilterLayout); createAndAddStatusButton(ExternalMessageStatus.PROCESSED, statusFilterLayout); - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { createAndAddStatusButton(ExternalMessageStatus.UNCLEAR, statusFilterLayout); createAndAddStatusButton(ExternalMessageStatus.FORWARDED, statusFilterLayout); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/hospitalization/HospitalizationForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/hospitalization/HospitalizationForm.java index 2d6981a5019..5c3e4780f0a 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/hospitalization/HospitalizationForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/hospitalization/HospitalizationForm.java @@ -106,7 +106,7 @@ public HospitalizationForm(CaseDataDto caze, ViewMode viewMode, boolean isPseudo HospitalizationDto.class, HospitalizationDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()) + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)) .add(new OutbreakFieldVisibilityChecker(viewMode)), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized), isEditAllowed); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/immunization/components/form/ImmunizationCreationForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/immunization/components/form/ImmunizationCreationForm.java index 10004dc032e..a8348df8d4e 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/immunization/components/form/ImmunizationCreationForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/immunization/components/form/ImmunizationCreationForm.java @@ -114,7 +114,7 @@ public ImmunizationCreationForm(PersonReferenceDto personDto, Disease disease) { super( ImmunizationDto.class, ImmunizationDto.I18N_PREFIX, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale())); + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))); this.personDto = personDto; this.disease = disease; setWidth(720, Unit.PIXELS); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/immunization/components/form/ImmunizationDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/immunization/components/form/ImmunizationDataForm.java index b92342267de..edb0835d83b 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/immunization/components/form/ImmunizationDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/immunization/components/form/ImmunizationDataForm.java @@ -141,7 +141,7 @@ public ImmunizationDataForm(boolean isPseudonymized, boolean inJurisdiction, Cas ImmunizationDto.class, ImmunizationDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized)); this.relatedCase = relatedCase; this.actionCallback = actionCallback; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/AbstractImportLayout.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/AbstractImportLayout.java index 74fcdb3291b..307fa770388 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/AbstractImportLayout.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/AbstractImportLayout.java @@ -119,7 +119,7 @@ private ComboBox createSeparatorComboBox() { comboBox.setItems(ValueSeparator.values()); comboBox.setValue(ValueSeparator.DEFAULT); comboBox.setEmptySelectionAllowed(false); - comboBox.setItemCaptionGenerator(item -> ((ValueSeparator) item).getCaption(FacadeProvider.getConfigFacade().getCsvSeparator())); + comboBox.setItemCaptionGenerator(item -> ((ValueSeparator) item).getCaption(FacadeProvider.getSystemConfigFacade().getCsvSeparator())); separator = comboBox; return comboBox; } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DataImporter.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DataImporter.java index 1de00483584..8fafe749bde 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DataImporter.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DataImporter.java @@ -158,7 +158,7 @@ public DataImporter(File inputFile, boolean hasEntityClassRow, UserDto currentUs + DateHelper.formatDateForExport(new Date()) + ".csv"); this.errorReportFilePath = errorReportFilePath.toString(); - this.csvSeparator = ValueSeparator.getSeparator(csvSeparator, FacadeProvider.getConfigFacade().getCsvSeparator()); + this.csvSeparator = ValueSeparator.getSeparator(csvSeparator, FacadeProvider.getSystemConfigFacade().getCsvSeparator()); } /** @@ -756,7 +756,7 @@ protected ImportLineResultDto validateConstraints(T object) { } protected Path getErrorReportFolderPath() { - return Paths.get(FacadeProvider.getConfigFacade().getTempFilesPath()); + return Paths.get(FacadeProvider.getSystemConfigFacade().getTempFilesPath()); } /** diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentMultiFileUpload.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentMultiFileUpload.java index b954780ade0..fdbc505df67 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentMultiFileUpload.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentMultiFileUpload.java @@ -31,7 +31,7 @@ public class DocumentMultiFileUpload extends MultiFileUpload { public DocumentMultiFileUpload(UploadStartedHandler uploadStartedHandler, UploadFinishedHandler uploadFinishedHandler, UploadStateWindow uploadStateWindow, boolean multiple) { super(uploadStartedHandler, uploadFinishedHandler, uploadStateWindow, multiple); - long fileSizeLimitMb = FacadeProvider.getConfigFacade().getDocumentUploadSizeLimitMb(); + long fileSizeLimitMb = FacadeProvider.getSystemConfigFacade().getDocumentUploadSizeLimitMb(); setMaxFileSize(fileSizeLimitMb * 1_000_000); setSizeErrorMsgPattern(I18nProperties.getValidationError(Validations.fileTooBig, fileSizeLimitMb)); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentTemplateReceiver.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentTemplateReceiver.java index ecee6156a43..e9077e30d21 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentTemplateReceiver.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentTemplateReceiver.java @@ -64,7 +64,7 @@ public OutputStream receiveUpload(String fileName, String mimeType) { try { String newFileName = ImportExportUtils.TEMP_FILE_PREFIX + "_template_upload" + DateHelper.formatDateForExport(new Date()) + "_" + DataHelper.getShortUuid(UiUtil.getUserUuid()) + ".docx"; - file = new File(Paths.get(FacadeProvider.getConfigFacade().getTempFilesPath()).resolve(newFileName).toString()); + file = new File(Paths.get(FacadeProvider.getSystemConfigFacade().getTempFilesPath()).resolve(newFileName).toString()); return new FileOutputStream(file); } catch (FileNotFoundException e) { @@ -81,7 +81,7 @@ public OutputStream receiveUpload(String fileName, String mimeType) { @Override public void uploadStarted(StartedEvent startedEvent) { - long fileSizeLimitMb = FacadeProvider.getConfigFacade().getDocumentUploadSizeLimitMb(); + long fileSizeLimitMb = FacadeProvider.getSystemConfigFacade().getDocumentUploadSizeLimitMb(); if (isFileSizeLimitExceeded(startedEvent.getContentLength(), fileSizeLimitMb)) { throw new ValidationRuntimeException(I18nProperties.getValidationError(Validations.fileTooBig, fileSizeLimitMb)); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentUploadFinishedHandler.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentUploadFinishedHandler.java index 4bb9d05421f..968e2428e06 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentUploadFinishedHandler.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentUploadFinishedHandler.java @@ -182,7 +182,7 @@ private void saveDocument( String relatedEntityUuid, byte[] bytes) throws Exception { - long fileSizeLimitMb = FacadeProvider.getConfigFacade().getDocumentUploadSizeLimitMb(); + long fileSizeLimitMb = FacadeProvider.getSystemConfigFacade().getDocumentUploadSizeLimitMb(); if (isFileSizeLimitExceeded(length, fileSizeLimitMb)) { Notification.show(I18nProperties.getValidationError(Validations.fileTooBig, fileSizeLimitMb)); return; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentUploadReceiver.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentUploadReceiver.java index 750ea281f3f..f25294ccb24 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentUploadReceiver.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/DocumentUploadReceiver.java @@ -54,7 +54,7 @@ public OutputStream receiveUpload() { try { String newFileName = ImportExportUtils.TEMP_FILE_PREFIX + "_document_upload" + DateHelper.formatDateForExport(new Date()) + "_" + DataHelper.getShortUuid(UiUtil.getUserUuid()); - file = Paths.get(FacadeProvider.getConfigFacade().getTempFilesPath()).resolve(newFileName).toFile(); + file = Paths.get(FacadeProvider.getSystemConfigFacade().getTempFilesPath()).resolve(newFileName).toFile(); return new BufferedOutputStream(Files.newOutputStream(file.toPath())); } catch (IOException e) { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/ImportReceiver.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/ImportReceiver.java index 6fb31e63f5f..61475cb9f57 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/ImportReceiver.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/importer/ImportReceiver.java @@ -74,7 +74,7 @@ public OutputStream receiveUpload(String fileName, String mimeType) { final FileOutputStream fos; try { - Path tempDirectory = Paths.get(FacadeProvider.getConfigFacade().getTempFilesPath()); + Path tempDirectory = Paths.get(FacadeProvider.getSystemConfigFacade().getTempFilesPath()); if (!tempDirectory.toFile().exists() || !tempDirectory.toFile().canWrite()) { throw new FileNotFoundException("Temp directory doesn't exist or cannot be accessed"); } @@ -99,7 +99,7 @@ public OutputStream receiveUpload(String fileName, String mimeType) { @Override public void uploadStarted(StartedEvent startedEvent) { - long fileSizeLimitMb = FacadeProvider.getConfigFacade().getImportFileSizeLimitMb(); + long fileSizeLimitMb = FacadeProvider.getSystemConfigFacade().getImportFileSizeLimitMb(); if (startedEvent.getContentLength() > fileSizeLimitMb * 1_000_000) { throw new ValidationRuntimeException(I18nProperties.getValidationError(Validations.fileTooBig, fileSizeLimitMb)); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/location/LocationEditForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/location/LocationEditForm.java index cff65110501..2e4858d1b86 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/location/LocationEditForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/location/LocationEditForm.java @@ -180,7 +180,7 @@ protected void addFields() { addressType = addField(LocationDto.ADDRESS_TYPE, ComboBox.class); addressType.setVisible(false); - final PersonAddressType[] personAddressTypeValues = PersonAddressType.getValues(FacadeProvider.getConfigFacade().getCountryCode()); + final PersonAddressType[] personAddressTypeValues = PersonAddressType.getValues(FacadeProvider.getSystemConfigFacade().getCountryCode()); if (!isConfiguredServer("ch")) { addressType.removeAllItems(); addressType.setItemCaptionMode(AbstractSelect.ItemCaptionMode.ID); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/login/DefaultPasswordUIHelper.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/login/DefaultPasswordUIHelper.java index 42b9e1e9cac..07f36bc06f1 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/login/DefaultPasswordUIHelper.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/login/DefaultPasswordUIHelper.java @@ -44,7 +44,7 @@ public class DefaultPasswordUIHelper { static LoginScreen.LoginListener getInterceptionLoginListener(LoginScreen.LoginListener originalLoginListener, UI vaadinUI) { return () -> { List usersWithDefaultPassword; - if (FacadeProvider.getConfigFacade().isSkipDefaultPasswordCheck() + if (FacadeProvider.getSystemConfigFacade().isSkipDefaultPasswordCheck() || (usersWithDefaultPassword = DefaultPasswordUIHelper.getUsersWithDefaultPassword()).isEmpty()) { originalLoginListener.loginSuccessful(); } else { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginHelper.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginHelper.java index c23d4b52245..eebe606f530 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginHelper.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginHelper.java @@ -89,7 +89,7 @@ public static boolean hasApplicationRight() { */ public static boolean logout() { - if (!AuthProvider.getProvider(FacadeProvider.getConfigFacade()).isDefaultProvider()) { + if (!AuthProvider.getProvider(FacadeProvider.getSystemConfigFacade()).isDefaultProvider()) { Page.getCurrent().setLocation("logout"); } else { try { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginScreen.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginScreen.java index f5c100950db..92070ca7094 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginScreen.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginScreen.java @@ -71,17 +71,18 @@ public class LoginScreen extends CssLayout { public LoginScreen(LoginListener loginListener) { this.loginListener = loginListener; - this.isCustomBranding = FacadeProvider.getConfigFacade().isCustomBranding(); + this.isCustomBranding = FacadeProvider.getSystemConfigFacade().isCustomBranding(); buildUI(); } private void buildUI() { addStyleName(CssStyles.LOGINSCREEN_BACK); - if (isCustomBranding && FacadeProvider.getConfigFacade().getLoginBackgroundPath() != null) { + if (isCustomBranding && FacadeProvider.getSystemConfigFacade().getLoginBackgroundPath() != null) { Page.Styles styles = Page.getCurrent().getStyles(); styles.add( - ".v-app .login-screen-back { background-image: url(" + FacadeProvider.getConfigFacade().getLoginBackgroundPath() + ") !important; }"); + ".v-app .login-screen-back { background-image: url(" + FacadeProvider.getSystemConfigFacade().getLoginBackgroundPath() + + ") !important; }"); } CssLayout layout = new CssLayout(); layout.addStyleName(CssStyles.LOGINSCREEN); @@ -90,7 +91,7 @@ private void buildUI() { layout.addComponent(buildLoginLayout()); // custom html layout - if (!isCustomBranding || FacadeProvider.getConfigFacade().isUseLoginSidebar()) { + if (!isCustomBranding || FacadeProvider.getSystemConfigFacade().isUseLoginSidebar()) { Layout loginSidebarLayout = buildLoginSidebarLayout(); layout.addComponent(loginSidebarLayout); } @@ -98,7 +99,7 @@ private void buildUI() { private Component buildLoginLayout() { - Path customHtmlDirectory = Paths.get(FacadeProvider.getConfigFacade().getCustomFilesPath()); + Path customHtmlDirectory = Paths.get(FacadeProvider.getSystemConfigFacade().getCustomFilesPath()); Path filePath = customHtmlDirectory.resolve("loginmain.html"); String html; @@ -137,12 +138,12 @@ private Component buildLogin() { final HorizontalLayout titleLayout = new HorizontalLayout(); titleLayout.setDefaultComponentAlignment(Alignment.MIDDLE_LEFT); titleLayout.setSpacing(false); - Label title = new Label(FacadeProvider.getConfigFacade().getSormasInstanceName()); + Label title = new Label(FacadeProvider.getSystemConfigFacade().getSormasInstanceName()); CssStyles.style(title, CssStyles.H1, CssStyles.VSPACE_NONE, CssStyles.VSPACE_TOP_NONE, CssStyles.HSPACE_LEFT_3); Image image; - if (isCustomBranding && StringUtils.isNotBlank(FacadeProvider.getConfigFacade().getCustomBrandingLogoPath())) { - Path logoPath = Paths.get(FacadeProvider.getConfigFacade().getCustomBrandingLogoPath()); + if (isCustomBranding && StringUtils.isNotBlank(FacadeProvider.getSystemConfigFacade().getCustomBrandingLogoPath())) { + Path logoPath = Paths.get(FacadeProvider.getSystemConfigFacade().getCustomBrandingLogoPath()); image = new Image(null, new FileResource(logoPath.toFile())); image.setWidth(50, Unit.PIXELS); } else { @@ -226,7 +227,7 @@ private CssLayout buildLoginDetails() { htmlLabel.setContentMode(ContentMode.HTML); htmlLabel.setWidth(100, Unit.PERCENTAGE); - Path customHtmlDirectory = Paths.get(FacadeProvider.getConfigFacade().getCustomFilesPath()); + Path customHtmlDirectory = Paths.get(FacadeProvider.getSystemConfigFacade().getCustomFilesPath()); Path filePath = customHtmlDirectory.resolve("logindetails.html"); try { @@ -250,7 +251,7 @@ private Layout buildLoginSidebarLayout() { sidebarHeaderLayout.setSizeUndefined(); sidebarHeaderLayout.setSpacing(false); - Path customHtmlDirectory = Paths.get(FacadeProvider.getConfigFacade().getCustomFilesPath()); + Path customHtmlDirectory = Paths.get(FacadeProvider.getSystemConfigFacade().getCustomFilesPath()); if (isCustomBranding) { Path sidebarHeaderPath = customHtmlDirectory.resolve("loginsidebar-header.html"); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginUI.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginUI.java index bee5810aad0..af9d5ed1d6f 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginUI.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/login/LoginUI.java @@ -77,7 +77,7 @@ public void init(VaadinRequest vaadinRequest) { VaadinSession.getCurrent().setConverterFactory(new SormasDefaultConverterFactory()); - getPage().setTitle(FacadeProvider.getConfigFacade().getSormasInstanceName()); + getPage().setTitle(FacadeProvider.getSystemConfigFacade().getSormasInstanceName()); setContent( new LoginScreen( @@ -101,7 +101,7 @@ public static class OidcLogoutServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - AuthProvider authProvider = AuthProvider.getProvider(FacadeProvider.getConfigFacade()); + AuthProvider authProvider = AuthProvider.getProvider(FacadeProvider.getSystemConfigFacade()); if (AuthProvider.KEYCLOAK.equals(authProvider.getName()) && request != null && response != null) { openIdContext.logout(request, response); } @@ -116,7 +116,7 @@ public static class ServletStartupListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { ServletContext ctx = sce.getServletContext(); - String authenticationProvider = FacadeProvider.getConfigFacade().getAuthenticationProvider(); + String authenticationProvider = FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.AUTHENTICATION_PROVIDER); if (authenticationProvider.equalsIgnoreCase(AuthProvider.SORMAS)) { ServletRegistration.Dynamic servletRegistration = ctx.addServlet("SormasLoginServlet", SormasLoginServlet.class); servletRegistration.addMapping("/login/*", "/VAADIN/*"); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/map/LeafletMap.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/map/LeafletMap.java index 5c52d76df00..7b6bdabfbf3 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/map/LeafletMap.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/map/LeafletMap.java @@ -77,12 +77,12 @@ public LeafletMap() { getState().setTileLayerVisible(true); getState().setTileLayerOpacity(1); - String tilesUrl = FacadeProvider.getConfigFacade().getMapTilersUrl(); + String tilesUrl = FacadeProvider.getSystemConfigFacade().getMapTilersUrl(); if(StringUtils.isNoneBlank(tilesUrl)) { callFunction( "setTileLayer", tilesUrl, - FacadeProvider.getConfigFacade().getMapTilersAttribution()); + FacadeProvider.getSystemConfigFacade().getMapTilersAttribution()); } addFunction("onClick", new JavaScriptFunction() { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonContactDetailsField.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonContactDetailsField.java index 491cd82be6a..8990990a1a9 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonContactDetailsField.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonContactDetailsField.java @@ -164,7 +164,9 @@ protected void updateColumns() { table.setCellStyleGenerator( FieldAccessCellStyleGenerator.withFieldAccessCheckers( PersonContactDetailDto.class, - UiFieldAccessCheckers.forSensitiveData(isPseudonymized, FacadeProvider.getConfigFacade().getCountryLocale()))); + UiFieldAccessCheckers.forSensitiveData( + isPseudonymized, + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); table.setColumnExpandRatio(COLUMN_PRIMARY, 0); table.setColumnExpandRatio(COLUMN_OWNER, 0); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonCreateForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonCreateForm.java index 7be0b02cd71..694d082b939 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonCreateForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonCreateForm.java @@ -114,8 +114,8 @@ public PersonCreateForm( PersonDto.class, PersonDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), - UiFieldAccessCheckers.getDefault(false, FacadeProvider.getConfigFacade().getCountryLocale())); + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), + UiFieldAccessCheckers.getDefault(false, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))); this.showHomeAddressForm = showHomeAddressForm; this.showPresentCondition = showPresentCondition; this.showSymptomsOnsetDate = showSymptomsOnsetDate; @@ -262,7 +262,7 @@ private void addHomeAddressForm() { addressHeader.setVisible(false); homeAddressForm = new LocationEditForm( - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), UiFieldAccessCheckers.getNoop()); homeAddressForm.setValue(new LocationDto()); homeAddressForm.setCaption(null); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonEditForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonEditForm.java index b9e7346b144..300ab92c972 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonEditForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonEditForm.java @@ -238,7 +238,8 @@ public PersonEditForm( false, FieldVisibilityCheckers.withDisease(disease) .add(new OutbreakFieldVisibilityChecker(viewMode)) - .add(new CountryFieldVisibilityChecker(FacadeProvider.getConfigFacade().getCountryLocale())), + .add( + new CountryFieldVisibilityChecker(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized), isEditAllowed); @@ -270,7 +271,8 @@ public PersonEditForm( false, FieldVisibilityCheckers.withDisease(disease) .add(new OutbreakFieldVisibilityChecker(viewMode)) - .add(new CountryFieldVisibilityChecker(FacadeProvider.getConfigFacade().getCountryLocale())), + .add( + new CountryFieldVisibilityChecker(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized)); this.personContext = personContext; @@ -294,7 +296,8 @@ public PersonEditForm(boolean isEditAllowed, boolean isPseudonymized, boolean in PersonDto.I18N_PREFIX, false, new FieldVisibilityCheckers().add(new OutbreakFieldVisibilityChecker(ViewMode.NORMAL)) - .add(new CountryFieldVisibilityChecker(FacadeProvider.getConfigFacade().getCountryLocale())), + .add( + new CountryFieldVisibilityChecker(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized), isEditAllowed); @@ -440,7 +443,7 @@ protected void addFields() { CountryReferenceDto countryRef = (CountryReferenceDto) e.getProperty().getValue(); boolean isForeigner = false; if (countryRef != null) { - isForeigner = FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) + isForeigner = FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && Arrays.asList(CountryHelper.COUNTRY_CODE_LUXEMBOURG, "LUX") .stream() .filter(Objects::nonNull) @@ -687,7 +690,7 @@ protected void addFields() { externalTokenWarningLabel, externalToken -> FacadeProvider.getPersonFacade().doesExternalTokenExist(externalToken, getValue().getUuid())); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { ValidationUtils.initComponentErrorValidator( nationalHealthIdField, nationalHealthIdField.getValue(), @@ -726,8 +729,8 @@ protected void addFields() { hasGuardian.setEnabled(false); hasGuardian.setValue(Boolean.TRUE); nameOfGuardians.setVisible(true); - minimumAdultAge = FacadeProvider.getConfigFacade().getMinimumAdultAge(); - minimumEmancipatedAge = FacadeProvider.getConfigFacade().getMinimumEmancipatedAge(); + minimumAdultAge = FacadeProvider.getSystemConfigFacade().getMinimumAdultAge(); + minimumEmancipatedAge = FacadeProvider.getSystemConfigFacade().getMinimumEmancipatedAge(); if (disease != null && !PERINATAL_DISEASES.contains(disease)) { perinatalDetailsHeader.setVisible(false); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonSelectionField.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonSelectionField.java index 8640ddf7df2..16ff28b48fc 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonSelectionField.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonSelectionField.java @@ -77,7 +77,8 @@ public PersonSelectionField(PersonDto referencePerson, String infoText) { public PersonSelectionField(PersonDto referencePerson, String infoText, String infoTextWithoutMatches) { this.referencePerson = referencePerson; - fieldVisibilityCheckers = FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()); + fieldVisibilityCheckers = + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)); initializeGrid(); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonSideComponentsElement.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonSideComponentsElement.java index 0a3b6b666f9..16064e211e4 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonSideComponentsElement.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonSideComponentsElement.java @@ -150,7 +150,7 @@ && getClass().equals(PersonDataView.class)) { layout.addComponent(sampleListComponentLayout, SAMPLES_LOC); } - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) && UiUtil.permitted(FeatureType.TRAVEL_ENTRIES, UserRight.TRAVEL_ENTRY_VIEW)) { TravelEntryListCriteria travelEntryListCriteria = new TravelEntryListCriteria.Builder().withPerson(person).build(); layout.addComponent( @@ -163,7 +163,7 @@ && getClass().equals(PersonDataView.class)) { TRAVEL_ENTRIES_LOC); } - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && UiUtil.permitted(FeatureType.IMMUNIZATION_MANAGEMENT, UserRight.IMMUNIZATION_VIEW)) { if (!FacadeProvider.getFeatureConfigurationFacade() .isPropertyValueTrue(FeatureType.IMMUNIZATION_MANAGEMENT, FeatureTypeProperty.REDUCED)) { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/reports/aggregate/AggregateReportsFilterForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/reports/aggregate/AggregateReportsFilterForm.java index 65c5dae9367..6370bb9021e 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/reports/aggregate/AggregateReportsFilterForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/reports/aggregate/AggregateReportsFilterForm.java @@ -57,7 +57,7 @@ protected AggregateReportsFilterForm() { super( AggregateReportCriteria.class, AggregateCaseCountDto.I18N_PREFIX, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), null); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/AbstractSampleForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/AbstractSampleForm.java index 6c3d6b4df1e..81424ead627 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/AbstractSampleForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/AbstractSampleForm.java @@ -118,7 +118,8 @@ protected AbstractSampleForm(Class type, String propertyI18nPrefix, D type, propertyI18nPrefix, true, - FieldVisibilityCheckers.withDisease(disease).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withDisease(disease) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), fieldAccessCheckers); this.disease = disease; } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/PathogenTestController.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/PathogenTestController.java index 87c1aa6b0fd..972ff37e466 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/PathogenTestController.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/PathogenTestController.java @@ -329,7 +329,7 @@ public void savePathogenTests(List pathogenTests, SampleReferen pathogenTests.forEach(p -> { p.setSample(sampleRef); - boolean luxTB = FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) + boolean luxTB = FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && Disease.TUBERCULOSIS == p.getTestedDisease(); boolean invasiveDisease = DiseaseHelper.checkDiseaseIsInvasiveBacterialDiseases(p.getTestedDisease()); //the susceptibility test is applicable only for LUX TB and all-countries invasive disease @@ -687,7 +687,7 @@ public static void showCaseCloningWithNewDiseaseDialog( public void showConfirmCaseDialog(CaseDataDto caze) { - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY)) { return; } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/PathogenTestForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/PathogenTestForm.java index 0b6414b28e0..b7d18d5b64a 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/PathogenTestForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/PathogenTestForm.java @@ -285,7 +285,8 @@ public PathogenTestForm(boolean create, int caseSampleCount, boolean isPseudonym PathogenTestDto.class, PathogenTestDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withDisease(disease).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withDisease(disease) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), FieldAccessHelper.getFieldAccessCheckers(create || inJurisdiction, !create && isPseudonymized));// Jurisdiction doesn't matter for creation forms // Pseudonymization doesn't matter for creation forms this.caseSampleCount = caseSampleCount; @@ -332,7 +333,7 @@ private void updateDrugSusceptibilityFieldSpecifications(PathogenTestType testTy // FIXME: why was this here originally? // TODO: move this to another place, should be in listeners for disease/testType. - if ((FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG))) { + if ((FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG))) { // testResult=NOT_APPLICABLE for Tuberculosis diseases, test types BEIJINGGENOTYPING,MIRU_PATTERN_CODE,ANTIBIOTIC_SUSCEPTIBILITY if ((disease == Disease.LATENT_TUBERCULOSIS || disease == Disease.TUBERCULOSIS) @@ -533,7 +534,7 @@ protected void addFields() { testResultField = addField(PathogenTestDto.TEST_RESULT, ComboBox.class); testResultField.removeItem(PathogenTestResultType.NOT_DONE); - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { testResultField.removeItem(PathogenTestResultType.NOT_APPLICABLE); } TextField seroTypeTF = addField(PathogenTestDto.SEROTYPE, TextField.class); @@ -561,12 +562,13 @@ protected void addFields() { PathogenTestDto.DRUG_SUSCEPTIBILITY, new DrugSusceptibilityForm( FieldVisibilityCheckers.getNoop(), - UiFieldAccessCheckers.getDefault(true, FacadeProvider.getConfigFacade().getCountryLocale()))); + UiFieldAccessCheckers + .getDefault(true, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); drugSusceptibilityField.setCaption(null); //drugSusceptibilityField.setVisible(false); addToVisibleAllowedFields(drugSusceptibilityField); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { //tuberculosis-pcr test specification FieldHelper.setVisibleWhen(getFieldGroup(), PathogenTestDto.RIFAMPICIN_RESISTANT, RIFAMPICIN_RESISTANT_VISIBILITY_CONDITIONS, true); @@ -600,7 +602,7 @@ protected void addFields() { seroGrpSpecTxt = addField(PathogenTestDto.SERO_GROUP_SPECIFICATION_TEXT, TextField.class); TextField cqValueField = addField(FieldConfiguration.withConversionError(PathogenTestDto.CQ_VALUE, Validations.onlyNumbersAllowed)); - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { cqValueField.setVisible(false); } @@ -1132,7 +1134,7 @@ protected void addFields() { FieldVisibilityCheckers.withDisease(disease), PathogenTestType.class); - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { FieldHelper.updateItems( strainCallStatusField, Arrays.asList(PathogenStrainCallStatus.values()), @@ -1186,7 +1188,8 @@ protected void addFields() { } // Show tube IGRA fields only for IGRA tests and Luxembourg setVisibleClear( - PathogenTestType.IGRA == testType && FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG), + PathogenTestType.IGRA == testType + && FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG), PathogenTestDto.TUBE_NIL, PathogenTestDto.TUBE_NIL_GT10, PathogenTestDto.TUBE_AG_TB1, diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/environmentsample/EnvironmentSampleEditForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/environmentsample/EnvironmentSampleEditForm.java index 23b1d0e2937..658c920daa6 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/environmentsample/EnvironmentSampleEditForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/environmentsample/EnvironmentSampleEditForm.java @@ -117,7 +117,8 @@ public EnvironmentSampleEditForm(boolean isPseudonymized, boolean isCreate) { EnvironmentSampleDto.I18N_PREFIX, false, FieldVisibilityCheckers.getNoop(), - UiFieldAccessCheckers.getDefault(isPseudonymized, FacadeProvider.getConfigFacade().getCountryLocale())); + UiFieldAccessCheckers + .getDefault(isPseudonymized, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))); this.isCreate = isCreate; addFields(); addValueChangeListener(e -> defaultValueChangeListener((EnvironmentSampleDto) e.getProperty().getValue())); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/humansample/HumanSampleGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/humansample/HumanSampleGrid.java index 5167f6de89d..96b3ae2c02f 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/humansample/HumanSampleGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/samples/humansample/HumanSampleGrid.java @@ -214,7 +214,7 @@ public HumanSampleGrid(SampleCriteria criteria) { } private boolean shouldShowEpidNumber() { - ConfigFacade configFacade = FacadeProvider.getConfigFacade(); + ConfigFacade configFacade = FacadeProvider.getSystemConfigFacade(); return !configFacade.isConfiguredCountry(CountryHelper.COUNTRY_CODE_GERMANY) && !configFacade.isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/security/MultiAuthenticationMechanism.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/security/MultiAuthenticationMechanism.java index bf3b9e1d4de..3dcf3518fb8 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/security/MultiAuthenticationMechanism.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/security/MultiAuthenticationMechanism.java @@ -72,7 +72,7 @@ public MultiAuthenticationMechanism( OpenIdAuthenticationMechanism openIdAuthenticationMechanism, CustomFormAuthenticationMechanism customFormAuthenticationMechanism) { - String authenticationProvider = FacadeProvider.getConfigFacade().getAuthenticationProvider(); + String authenticationProvider = FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.AUTHENTICATION_PROVIDER); if (authenticationProvider.equalsIgnoreCase(AuthProvider.KEYCLOAK)) { try { authenticationMechanism = openIdAuthenticationMechanism; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/selfreport/SelfReportDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/selfreport/SelfReportDataForm.java index 902941e6a3b..0b138f1c6d9 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/selfreport/SelfReportDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/selfreport/SelfReportDataForm.java @@ -93,7 +93,9 @@ public SelfReportDataForm(Disease disease, boolean inJurisdiction, boolean isPse SelfReportDto.class, SelfReportDto.I18N_PREFIX, true, - FieldVisibilityCheckers.withDisease(disease).add(new CountryFieldVisibilityChecker(FacadeProvider.getConfigFacade().getCountryLocale())), + FieldVisibilityCheckers.withDisease(disease) + .add( + new CountryFieldVisibilityChecker(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized)); } @@ -198,7 +200,7 @@ protected void addFields() { setVisible(false, SelfReportDto.DELETION_REASON, SelfReportDto.OTHER_DELETION_REASON); addValueChangeListener(e -> { - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { ValidationUtils.initComponentErrorValidator( nationalHealthIdField, nationalHealthIdField.getValue(), diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/AbstractStatisticsView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/AbstractStatisticsView.java index e99c818157f..09e3fe7a5b2 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/AbstractStatisticsView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/AbstractStatisticsView.java @@ -54,7 +54,7 @@ public void refreshMenu(SubMenu menu, String params) { menu.addView(EpipulseExportView.VIEW_NAME, I18nProperties.getCaption(Captions.statisticsEpipulseExport), params); } - String sormasStatsUrl = FacadeProvider.getConfigFacade().getSormasStatsUrl(); + String sormasStatsUrl = FacadeProvider.getSystemConfigFacade().getSormasStatsUrl(); if (StringUtils.isNotBlank(sormasStatsUrl)) { Link sormasStatsLink = new Link(I18nProperties.getCaption(Captions.statisticsOpenSormasStats), new ExternalResource(sormasStatsUrl)); sormasStatsLink.addStyleNames(CssStyles.LINK_BUTTON, CssStyles.LINK_BUTTON_PRIMARY); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/DatabaseExportView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/DatabaseExportView.java index 124b480c93e..1eaad844241 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/DatabaseExportView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/DatabaseExportView.java @@ -17,9 +17,6 @@ *******************************************************************************/ package de.symeda.sormas.ui.statistics; -import de.symeda.sormas.api.ConfigFacade; -import de.symeda.sormas.api.FacadeProvider; -import de.symeda.sormas.api.feature.FeatureConfigurationDto; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -40,6 +37,9 @@ import com.vaadin.ui.themes.ValoTheme; import com.vaadin.v7.ui.CheckBox; +import de.symeda.sormas.api.ConfigFacade; +import de.symeda.sormas.api.FacadeProvider; +import de.symeda.sormas.api.feature.FeatureConfigurationDto; import de.symeda.sormas.api.i18n.Captions; import de.symeda.sormas.api.i18n.I18nProperties; import de.symeda.sormas.api.i18n.Strings; @@ -169,7 +169,7 @@ private HorizontalLayout createDatabaseTablesLayout() { externalDataLayout.addComponent(externalDataHeadline); List featureConfigurations = FacadeProvider.getFeatureConfigurationFacade().getActiveServerFeatureConfigurations(); - ConfigFacade configFacade = FacadeProvider.getConfigFacade(); + ConfigFacade configFacade = FacadeProvider.getSystemConfigFacade(); for (DatabaseTable databaseTable : DatabaseTable.values()) { if(!databaseTable.isEnabled(featureConfigurations, configFacade)) { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/StatisticsView.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/StatisticsView.java index 2965e8409b7..d69c87b98b9 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/StatisticsView.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/statistics/StatisticsView.java @@ -869,12 +869,12 @@ public void generateMap() { map.setTileLayerOpacity(0.5f); map.setWidth(100, Unit.PERCENTAGE); map.setHeight(580, Unit.PIXELS); - map.setZoom(FacadeProvider.getConfigFacade().getMapZoom()); + map.setZoom(FacadeProvider.getSystemConfigFacade().getMapZoom()); GeoLatLon mapCenter = FacadeProvider.getGeoShapeProvider().getCenterOfAllRegions(); if (mapCenter != null) { map.setCenter(mapCenter); } else { - GeoLatLon countryCenter = FacadeProvider.getConfigFacade().getCountryCenter(); + GeoLatLon countryCenter = FacadeProvider.getSystemConfigFacade().getCountryCenter(); map.setCenter(countryCenter); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/symptoms/SymptomsForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/symptoms/SymptomsForm.java index da4d28f5d3b..aea94728db5 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/symptoms/SymptomsForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/symptoms/SymptomsForm.java @@ -241,7 +241,7 @@ public SymptomsForm( I18N_PREFIX, false, FieldVisibilityCheckers.withDisease(disease) - .andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale()) + .andWithCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)) .add(new OutbreakFieldVisibilityChecker(viewMode)), fieldAccessCheckers); @@ -1018,7 +1018,7 @@ public String getFormattedHtmlMessage() { if (isConfiguredServer(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) { FieldHelper.setVisibleWhen(getFieldGroup(), SKIN_RASH_ONSET_DATE, SKIN_RASH, Arrays.asList(SymptomState.YES), true); } - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && disease == Disease.TUBERCULOSIS) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && disease == Disease.TUBERCULOSIS) { Label localisationHeadingLabel = createLabel(I18nProperties.getString(Strings.headingLocalisation), H3, LOCALISATION_HEADING_LOC); clinicalPresentationHeadingLabel.setVisible(true); @@ -1145,7 +1145,7 @@ protected String createHtmlLayout() { String FINAL_HTML_LAYOUT = HTML_LAYOUT; - if (FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && disease == Disease.TUBERCULOSIS) { + if (FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && disease == Disease.TUBERCULOSIS) { FINAL_HTML_LAYOUT = FINAL_HTML_LAYOUT.replace(onsetDateLoc, emptyLoc) .replace(tbOnsetDateLoc, onsetDateLoc) .replace(clinicalPresentationDetailsLoc, emptyLoc) diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/task/TaskEditForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/task/TaskEditForm.java index 63d02222c71..fb9e522aaee 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/task/TaskEditForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/task/TaskEditForm.java @@ -297,7 +297,7 @@ private void checkIfUserEmailOrPhoneIsProvided( boolean hasEmail = !StringUtils.isEmpty(user.getUserEmail()); boolean hasPhoneNumber = !StringUtils.isEmpty(user.getPhone()); - boolean isSmsServiceSetUp = FacadeProvider.getConfigFacade().isSmsServiceSetUp(); + boolean isSmsServiceSetUp = FacadeProvider.getSystemConfigFacade().isPresent(SystemConfiguration.SMS_AUTH_SECRET); if (isSmsServiceSetUp && !hasEmail && !hasPhoneNumber) { getContent().addComponent(getMissingInfoComponent(I18nProperties.getString(missingEmailOrPhoneLabel)), location); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/task/TaskGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/task/TaskGrid.java index a20d3560303..20a16eedec7 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/task/TaskGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/task/TaskGrid.java @@ -166,7 +166,9 @@ public TaskGrid(TaskCriteria criteria) { getColumn(TaskIndexDto.CONTEXT_REFERENCE).setStyleGenerator(new FieldAccessColumnStyleGenerator<>(task -> { boolean isInJurisdiction = task.getTaskJurisdictionFlagsDto().getInJurisdiction(); - return UiFieldAccessCheckers.getDefault(!isInJurisdiction, FacadeProvider.getConfigFacade().getCountryLocale()).hasRight(); + return UiFieldAccessCheckers + .getDefault(!isInJurisdiction, FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)) + .hasRight(); })); addItemClickListener(new ShowDetailsListener<>(TaskIndexDto.CONTEXT_REFERENCE, false, this::navigateToData)); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/DrugSusceptibilityForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/DrugSusceptibilityForm.java index fef8d0ee77b..690cf7145fd 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/DrugSusceptibilityForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/DrugSusceptibilityForm.java @@ -315,7 +315,7 @@ public void updateFieldsVisibility(Disease disease, PathogenTestType pathogenTes // TODO: this is kind of temporary as it should be consolidated with the logic in the PathogenTestForm // For other countries if the disease is Tuberculosis/Latent Tuberculosis, drug susceptibility fields should remain hidden - if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) + if (!FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG) && (disease == Disease.TUBERCULOSIS || disease == Disease.LATENT_TUBERCULOSIS)) { //quit, we do not want to show the fields if TUBERCULOSIS/LATENT_TUBERCULOSIS and we are not in Luxembourg return; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/PrescriptionGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/PrescriptionGrid.java index 64c9503cf17..a358da0c6aa 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/PrescriptionGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/PrescriptionGrid.java @@ -98,7 +98,9 @@ public Class getType() { setCellStyleGenerator( FieldAccessCellStyleGenerator.withFieldAccessCheckers( PrescriptionIndexDto.class, - UiFieldAccessCheckers.forSensitiveData(isPseudonymized, FacadeProvider.getConfigFacade().getCountryLocale()))); + UiFieldAccessCheckers.forSensitiveData( + isPseudonymized, + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); } addItemClickListener(e -> { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/TherapyForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/TherapyForm.java index 294bc0437a7..cd35c8c9df6 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/TherapyForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/TherapyForm.java @@ -127,7 +127,7 @@ public TherapyForm(CaseDataDto caze, Disease disease, boolean isPseudonymized, b TherapyDto.class, TherapyDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), FieldAccessHelper.getFieldAccessCheckers(inJurisdiction, isPseudonymized), isEditAllowed); this.caze = caze; @@ -148,7 +148,7 @@ protected String createHtmlLayout() { @Override protected void addFields() { - boolean isLuxembourgServer = FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG); + boolean isLuxembourgServer = FacadeProvider.getSystemConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_LUXEMBOURG); CheckBox dotField = addField(TherapyDto.DIRECTLY_OBSERVED_TREATMENT, CheckBox.class); dotField.addStyleName(VSPACE_3); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/TreatmentGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/TreatmentGrid.java index 13d534355bd..c5b500ecfb6 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/TreatmentGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/therapy/TreatmentGrid.java @@ -69,7 +69,9 @@ public TreatmentGrid( setCellStyleGenerator( FieldAccessCellStyleGenerator.withFieldAccessCheckers( TreatmentIndexDto.class, - UiFieldAccessCheckers.forSensitiveData(isPseudonymized, FacadeProvider.getConfigFacade().getCountryLocale()))); + UiFieldAccessCheckers.forSensitiveData( + isPseudonymized, + FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)))); } addItemClickListener(e -> { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/TravelEntryDataForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/TravelEntryDataForm.java index f73ced0d30d..2db40c1ccca 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/TravelEntryDataForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/TravelEntryDataForm.java @@ -126,7 +126,7 @@ public TravelEntryDataForm(String travelEntryUuid, boolean isPseudonymized, bool TravelEntryDto.class, TravelEntryDto.I18N_PREFIX, false, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), createFieldAccessCheckers(isPseudonymized, inJurisdiction, true)); this.travelEntryUuid = travelEntryUuid; addFields(); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/TravelEntryFilterForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/TravelEntryFilterForm.java index 3f1eb858167..73476281a0c 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/TravelEntryFilterForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/TravelEntryFilterForm.java @@ -37,7 +37,7 @@ protected TravelEntryFilterForm() { super( TravelEntryCriteria.class, TravelEntryDto.I18N_PREFIX, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()), + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)), null); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/components/TravelEntryCreateForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/components/TravelEntryCreateForm.java index 0e8e974759a..2826b106d78 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/components/TravelEntryCreateForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/travelentry/components/TravelEntryCreateForm.java @@ -98,7 +98,7 @@ public TravelEntryCreateForm(PersonReferenceDto personDto) { super( TravelEntryDto.class, TravelEntryDto.I18N_PREFIX, - FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale())); + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE))); this.personDto = personDto; setWidth(720, Unit.PIXELS); hideValidationUntilNextCommit(); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserController.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserController.java index 16c4f86b022..00cdf916bf4 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserController.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserController.java @@ -213,7 +213,7 @@ public boolean isLoginUnique(String uuid, String userName) { } public void makeInitialPassword(String userUuid, String userEmail) { - if (StringUtils.isBlank(userEmail) || AuthProvider.getProvider(FacadeProvider.getConfigFacade()).isDefaultProvider()) { + if (StringUtils.isBlank(userEmail) || AuthProvider.getProvider(FacadeProvider.getSystemConfigFacade()).isDefaultProvider()) { String newPassword = FacadeProvider.getUserFacade().resetPassword(userUuid); showPasswordResetInternalSuccessPopup(newPassword); } else { @@ -224,7 +224,7 @@ public void makeInitialPassword(String userUuid, String userEmail) { public void makeNewPassword(String userUuid, String userEmail) { String newPassword = FacadeProvider.getUserFacade().resetPassword(userUuid); - if (StringUtils.isBlank(userEmail) || AuthProvider.getProvider(FacadeProvider.getConfigFacade()).isDefaultProvider()) { + if (StringUtils.isBlank(userEmail) || AuthProvider.getProvider(FacadeProvider.getSystemConfigFacade()).isDefaultProvider()) { showPasswordResetInternalSuccessPopup(newPassword); } else { showPasswordResetExternalSuccessPopup(); @@ -347,7 +347,7 @@ public void setFlagIcons(ComboBox cbLanguage) { public void sync() { if (UiUtil.permitted(FeatureType.AUTH_PROVIDER_TO_SORMAS_USER_SYNC)) { - if (StringUtils.isBlank(FacadeProvider.getConfigFacade().getAuthenticationProviderSyncedNewUserRole())) { + if (StringUtils.isBlank(FacadeProvider.getSystemConfigFacade().getAuthenticationProviderSyncedNewUserRole())) { VaadinUiUtil.showSimplePopupWindow( I18nProperties.getString(Strings.headingSyncUsers), I18nProperties.getString(Strings.messageSyncUsersFromAuthProviderConfigurationError)); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserGrid.java index 8553b89224a..4c4270d9e18 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserGrid.java @@ -77,7 +77,8 @@ public UserGrid() { UserDto.DISTRICT, UserDto.HEALTH_FACILITY)); - if (!AuthProvider.SORMAS.equalsIgnoreCase(FacadeProvider.getConfigFacade().getAuthenticationProvider())) { + if (!AuthProvider.SORMAS + .equalsIgnoreCase(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.AUTHENTICATION_PROVIDER))) { columns.add(UserDto.EXTERNAL_ID); } diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserSettingsForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserSettingsForm.java index f8df1d054a3..485e8863ce0 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserSettingsForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserSettingsForm.java @@ -36,7 +36,7 @@ protected void addFields() { CssStyles.style(cbLanguage, CssStyles.COMBO_BOX_WITH_FLAG_ICON); ControllerProvider.getUserController().setFlagIcons(cbLanguage); - String authenticationProvider = FacadeProvider.getConfigFacade().getAuthenticationProvider(); + String authenticationProvider = FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.AUTHENTICATION_PROVIDER); if (AuthProvider.KEYCLOAK.equals(authenticationProvider)) { emailTf = addField(UserDto.USER_EMAIL, TextField.class); emailTf.setCaption(I18nProperties.getCaption(Captions.User_userEmail)); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserSyncHandler.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserSyncHandler.java index 17fa0bde9a1..df0b5187848 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserSyncHandler.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserSyncHandler.java @@ -90,13 +90,13 @@ public class UserSyncHandler { private CSVWriter errorReportCsvWriter; public UserSyncHandler(UserReferenceDto currentUser) { - Path exportDirectory = Paths.get(FacadeProvider.getConfigFacade().getTempFilesPath()); + Path exportDirectory = Paths.get(FacadeProvider.getSystemConfigFacade().getTempFilesPath()); Path errorReportFilePath = exportDirectory.resolve( ImportExportUtils.TEMP_FILE_PREFIX + "_error_report_" + DataHelper.getShortUuid(currentUser.getUuid()) + "_" + DateHelper.formatDateForExport(new Date()) + ".csv"); this.errorReportFilePath = errorReportFilePath.toString(); - this.csvSeparator = FacadeProvider.getConfigFacade().getCsvSeparator(); + this.csvSeparator = FacadeProvider.getSystemConfigFacade().getCsvSeparator(); } public void startSync(Consumer errorReportConsumer, UI currentUI) { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/AbstractForm.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/AbstractForm.java index 81d33f17ed5..51acf253626 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/AbstractForm.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/AbstractForm.java @@ -530,7 +530,7 @@ protected String getPropertyI18nPrefix() { } protected boolean isConfiguredServer(String countryCode) { - return FacadeProvider.getConfigFacade().isConfiguredCountry(countryCode); + return FacadeProvider.getSystemConfigFacade().isConfiguredCountry(countryCode); } private static class SormasBeanFieldGroup extends BeanFieldGroup { diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/CustomizableGrid.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/CustomizableGrid.java index d26e6106d28..c2e37a51cad 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/CustomizableGrid.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/CustomizableGrid.java @@ -27,14 +27,16 @@ public class CustomizableGrid extends Grid { public void setColumns(Class clazz, List propertyIds) { - FieldVisibilityCheckers fieldVisibilityCheckers = FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()); + FieldVisibilityCheckers fieldVisibilityCheckers = + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)); super.setColumns( propertyIds.stream().filter(propertyId -> fieldVisibilityCheckers.isVisible(clazz, propertyId)).collect(Collectors.toList()).toArray()); } public void setColumns(List columns) { - FieldVisibilityCheckers fieldVisibilityCheckers = FieldVisibilityCheckers.withCountry(FacadeProvider.getConfigFacade().getCountryLocale()); + FieldVisibilityCheckers fieldVisibilityCheckers = + FieldVisibilityCheckers.withCountry(FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE)); super.setColumns( columns.stream() .filter(column -> fieldVisibilityCheckers.isVisible(column.getClazz(), column.getPropertyId())) diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/DownloadUtil.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/DownloadUtil.java index 4813cd5fd6c..e2214230dbf 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/DownloadUtil.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/DownloadUtil.java @@ -189,7 +189,7 @@ public InputStream getStream() { try (ByteArrayOutputStream byteStream = new ByteArrayOutputStream()) { try (CSVWriter writer = CSVUtils.createCSVWriter( new OutputStreamWriter(byteStream, StandardCharsets.UTF_8.name()), - FacadeProvider.getConfigFacade().getCsvSeparator())) { + FacadeProvider.getSystemConfigFacade().getCsvSeparator())) { // Generate and write columns to CSV writer List columnNames = new ArrayList<>(); columnNames.add(I18nProperties.getPrefixCaption(PopulationDataDto.I18N_PREFIX, PopulationDataDto.REGION)); @@ -481,7 +481,9 @@ public static StreamResource createVisitsExportStreamResource( String exportFileName = createFileNameWithCurrentDate(entityName, ".csv"); StreamResource extendedStreamResource = new StreamResource(() -> new DelayedInputStream((out) -> { try (CSVWriter writer = CSVUtils - .createCSVWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8.name()), FacadeProvider.getConfigFacade().getCsvSeparator())) { + .createCSVWriter( + new OutputStreamWriter(out, StandardCharsets.UTF_8.name()), + FacadeProvider.getSystemConfigFacade().getCsvSeparator())) { final List columnNames = new ArrayList<>(); final List dayColumns = new ArrayList<>(); @@ -573,7 +575,7 @@ public static StreamResource createCsvExportStreamResource( propertyIdCaptionFunction, exportConfiguration, (o) -> exportType == null || hasExportTarget(exportType, (Method) o), - FacadeProvider.getConfigFacade(), + FacadeProvider.getSystemConfigFacade(), out); } catch (Exception e) { LoggerFactory.getLogger(DownloadUtil.class).error(e.getMessage(), e); @@ -656,7 +658,7 @@ public static void showExportWaitDialog(AbstractComponent exportComponent, Close } public static String createFileNameWithCurrentDate(ExportEntityName entityName, String fileExtension) { - String instanceName = FacadeProvider.getConfigFacade().getSormasInstanceName().toLowerCase(); + String instanceName = FacadeProvider.getSystemConfigFacade().getSormasInstanceName().toLowerCase(); String processedInstanceName = DataHelper.cleanStringForFileName(instanceName); String processedEntityName = DataHelper.cleanStringForFileName(entityName.getLocalizedNameInSystemLanguage()); String exportDate = DateHelper.formatDateForExport(new Date()); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/ExportEntityName.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/ExportEntityName.java index e00f41dfe45..252b6720037 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/ExportEntityName.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/ExportEntityName.java @@ -59,7 +59,7 @@ public String getLocalizedName() { } public String getLocalizedNameInSystemLanguage() { - String systemLocale = FacadeProvider.getConfigFacade().getCountryLocale(); + String systemLocale = FacadeProvider.getSystemConfigFacade().getAsStringOrThrow(SystemConfiguration.COUNTRY_LOCALE); Language language = Language.fromLocaleString(systemLocale); String entityName = I18nProperties.getString(language, languageKey); return entityName == null ? defaultName : entityName; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/ExternalJournalUtil.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/ExternalJournalUtil.java index 96a0f5d7d7c..9d865160c3d 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/ExternalJournalUtil.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/utils/ExternalJournalUtil.java @@ -10,9 +10,6 @@ import java.util.Optional; import java.util.function.Consumer; -import com.vaadin.ui.HorizontalLayout; -import de.symeda.sormas.api.person.SymptomJournalStatus; -import de.symeda.sormas.api.sormastosormas.SormasToSormasShareableDto; import org.apache.commons.lang3.StringUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -24,6 +21,7 @@ import com.vaadin.server.ThemeResource; import com.vaadin.ui.BrowserFrame; import com.vaadin.ui.Button; +import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Image; import com.vaadin.ui.Label; import com.vaadin.ui.UI; @@ -40,6 +38,8 @@ import de.symeda.sormas.api.i18n.Strings; import de.symeda.sormas.api.i18n.Validations; import de.symeda.sormas.api.person.PersonDto; +import de.symeda.sormas.api.person.SymptomJournalStatus; +import de.symeda.sormas.api.sormastosormas.SormasToSormasShareableDto; import de.symeda.sormas.ui.SormasUI; public class ExternalJournalUtil { @@ -75,13 +75,13 @@ public static Optional