diff --git a/README.md b/README.md index 037a28c..ad0eb2b 100644 --- a/README.md +++ b/README.md @@ -50,3 +50,16 @@ The UI is customized using [Thymeleaf](https://www.thymeleaf.org/) template file Several template files that can be customized are found in the following directory: [https://github.com/hapifhir/hapi-fhir-jpaserver-starter/tree/master/src/main/webapp/WEB-INF/templates](https://github.com/hapifhir/hapi-fhir-jpaserver-starter/tree/master/src/main/webapp/WEB-INF/templates) +# Configuration + +Much of this HAPI starter project can be configured using the properties file in *src/main/resources/hapi.properties*. By default, this starter project is configured to use Derby as the database. + +## MySql + +To configure the starter app to use MySQL, instead of the default Derby, update the hapi.properties file to have the following: + +* datasource.driver=com.mysql.jdbc.Driver +* datasource.url=jdbc:mysql://localhost:3306/hapi_dstu3 +* hibernate.dialect=org.hibernate.dialect.MySQL5Dialect + +It is important to use MySQL5Dialect when using MySQL version 5+. \ No newline at end of file diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java index 5962e70..e128044 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java @@ -24,25 +24,43 @@ import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor; @EnableTransactionManagement() public class FhirServerConfigCommon { + private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirServerConfigCommon.class); + /** * Configure FHIR properties around the the JPA server via this bean */ @Bean() public DaoConfig daoConfig() { DaoConfig retVal = new DaoConfig(); - retVal.setAllowMultipleDelete(HapiProperties.getAllowMultipleDelete()); - retVal.setAllowExternalReferences(HapiProperties.getAllowExternalReferences()); - retVal.setExpungeEnabled(HapiProperties.getExpungeEnabled()); + Boolean allowMultipleDelete = HapiProperties.getAllowMultipleDelete(); + retVal.setAllowMultipleDelete(allowMultipleDelete); + ourLog.info("Server configured to " + (allowMultipleDelete ? "allow" : "deny") + " multiple deletes"); + + Boolean allowExternalReferences = HapiProperties.getAllowExternalReferences(); + retVal.setAllowExternalReferences(allowExternalReferences); + ourLog.info("Server configured to " + (allowExternalReferences ? "allow" : "deny") + " external references"); + + Boolean expungeEnabled = HapiProperties.getExpungeEnabled(); + retVal.setExpungeEnabled(expungeEnabled); + ourLog.info("Server configured to " + (expungeEnabled ? "enable" : "disable") + " expunges"); + + Boolean allowPlaceholderReferences = HapiProperties.getAllowPlaceholderReferences(); + retVal.setAutoCreatePlaceholderReferenceTargets(allowPlaceholderReferences); + ourLog.info("Server configured to " + (allowPlaceholderReferences ? "allow" : "deny") + " placeholder references"); + // You can enable these if you want to support Subscriptions from your server - if (false) { + if (HapiProperties.getSubscriptionRestHookEnabled()) { + ourLog.info("Enabling REST-hook subscriptions"); retVal.addSupportedSubscriptionType(Subscription.SubscriptionChannelType.RESTHOOK); } - if (false) { + + if (HapiProperties.getSubscriptionEmailEnabled()) { + ourLog.info("Enabling email subscriptions"); retVal.addSupportedSubscriptionType(Subscription.SubscriptionChannelType.EMAIL); } - return retVal; + return retVal; } @Bean diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirTesterConfig.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirTesterConfig.java index 8a99968..f7d8a77 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirTesterConfig.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirTesterConfig.java @@ -41,7 +41,7 @@ public class FhirTesterConfig { .addServer() .withId(HapiProperties.getServerId()) .withFhirVersion(HapiProperties.getFhirVersion()) - .withBaseUrl("${serverBase}" + HapiProperties.getServerBase()) + .withBaseUrl(HapiProperties.getServerAddress()) .withName(HapiProperties.getServerName()); return retVal; } diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/HapiProperties.java b/src/main/java/ca/uhn/fhir/jpa/starter/HapiProperties.java index b47b05d..f4fb68b 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/HapiProperties.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/HapiProperties.java @@ -10,32 +10,36 @@ import java.io.InputStream; import java.util.Properties; public class HapiProperties { - public static final String SERVER_ADDRESS = "server_address"; - public static final String DEFAULT_PRETTY_PRINT = "default_pretty_print"; - public static final String MAX_PAGE_SIZE = "max_page_size"; - public static final String DEFAULT_PAGE_SIZE = "default_page_size"; - public static final String LOGGER_NAME = "logger.name"; - public static final String LOGGER_FORMAT = "logger.format"; - public static final String ALLOW_EXTERNAL_REFERENCES = "allow_external_references"; - public static final String ALLOW_MULTIPLE_DELETE = "allow_multiple_delete"; - public static final String DATASOURCE_PASSWORD = "datasource.password"; - public static final String DATASOURCE_USERNAME = "datasource.username"; - public static final String DATASOURCE_URL = "datasource.url"; - public static final String DATASOURCE_DRIVER = "datasource.driver"; - public static final String LOGGER_LOG_EXCEPTIONS = "logger.log_exceptions"; - public static final String LOGGER_ERROR_FORMAT = "logger.error_format"; - public static final String PERSISTENCE_UNIT_NAME = "persistence_unit_name"; - public static final String SERVER_BASE = "server.base"; - public static final String TEST_PORT = "test.port"; - public static final String SERVER_NAME = "server.name"; - public static final String SERVER_ID = "server.id"; - private static final String HAPI_PROPERTIES = "hapi.properties"; + static final String ALLOW_EXTERNAL_REFERENCES = "allow_external_references"; + static final String ALLOW_MULTIPLE_DELETE = "allow_multiple_delete"; + static final String ALLOW_PLACEHOLDER_REFERENCES = "allow_placeholder_references"; + static final String DATASOURCE_DRIVER = "datasource.driver"; + static final String DATASOURCE_PASSWORD = "datasource.password"; + static final String DATASOURCE_URL = "datasource.url"; + static final String DATASOURCE_USERNAME = "datasource.username"; + static final String DEFAULT_ENCODING = "default_encoding"; + static final String DEFAULT_PAGE_SIZE = "default_page_size"; + static final String DEFAULT_PRETTY_PRINT = "default_pretty_print"; + static final String ETAG_SUPPORT = "etag_support"; static final String FHIR_VERSION = "fhir_version"; - private static final String DEFAULT_ENCODING = "default_encoding"; - private static final String ETAG_SUPPORT = "etag_support"; + static final String HAPI_PROPERTIES = "hapi.properties"; + static final String LOGGER_ERROR_FORMAT = "logger.error_format"; + static final String LOGGER_FORMAT = "logger.format"; + static final String LOGGER_LOG_EXCEPTIONS = "logger.log_exceptions"; + static final String LOGGER_NAME = "logger.name"; + static final String MAX_PAGE_SIZE = "max_page_size"; + static final String PERSISTENCE_UNIT_NAME = "persistence_unit_name"; + static final String SERVER_ADDRESS = "server_address"; + static final String SERVER_BASE = "server.base"; + static final String SERVER_ID = "server.id"; + static final String SERVER_NAME = "server.name"; + static final String SUBSCRIPTION_EMAIL_ENABLED = "subscription.email.enabled"; + static final String SUBSCRIPTION_RESTHOOK_ENABLED = "subscription.resthook.enabled"; + static final String TEST_PORT = "test.port"; + private static Properties properties; - /** + /* * Force the configuration to be reloaded */ public static void forceReload() { @@ -219,4 +223,16 @@ public class HapiProperties { public static String getServerId() { return HapiProperties.getProperty(SERVER_ID, "home"); } + + public static Boolean getAllowPlaceholderReferences() { + return HapiProperties.getBooleanProperty(ALLOW_PLACEHOLDER_REFERENCES, true); + } + + public static Boolean getSubscriptionEmailEnabled() { + return HapiProperties.getBooleanProperty(SUBSCRIPTION_EMAIL_ENABLED, true); + } + + public static Boolean getSubscriptionRestHookEnabled() { + return HapiProperties.getBooleanProperty(SUBSCRIPTION_RESTHOOK_ENABLED, true); + } } diff --git a/src/main/resources/hapi.properties b/src/main/resources/hapi.properties index df33856..332825e 100644 --- a/src/main/resources/hapi.properties +++ b/src/main/resources/hapi.properties @@ -18,6 +18,7 @@ default_page_size=20 max_page_size=200 allow_multiple_delete=true allow_external_references=true +allow_placeholder_references=true expunge_enabled=true persistence_unit_name=HAPI_PU logger.name=fhirtest.access @@ -31,7 +32,8 @@ datasource.password= server.name=Local Tester server.id=home test.port= - +subscription.email.enabled=true +subscription.resthook.enabled=true hibernate.dialect=ca.uhn.fhir.jpa.util.DerbyTenSevenHapiFhirDialect hibernate.search.model_mapping=ca.uhn.fhir.jpa.search.LuceneSearchMappingFactory hibernate.format_sql=false