From 411eed494267035917acf82ad389af40dcd32926 Mon Sep 17 00:00:00 2001 From: Richard Richter Date: Tue, 9 Jun 2020 17:45:20 +0200 Subject: [PATCH] SqlRepositoryConfiguration.java: added "fullObjectFormat" repo attribute --- .../sql/testing/TestSqlRepositoryFactory.java | 25 ++++--- .../repo/sql/SqlRepositoryConfiguration.java | 73 +++++++++++++------ 2 files changed, 66 insertions(+), 32 deletions(-) diff --git a/repo/repo-sql-impl-test/src/main/java/com/evolveum/midpoint/repo/sql/testing/TestSqlRepositoryFactory.java b/repo/repo-sql-impl-test/src/main/java/com/evolveum/midpoint/repo/sql/testing/TestSqlRepositoryFactory.java index 9feb579d2f3..c78b1c421ac 100644 --- a/repo/repo-sql-impl-test/src/main/java/com/evolveum/midpoint/repo/sql/testing/TestSqlRepositoryFactory.java +++ b/repo/repo-sql-impl-test/src/main/java/com/evolveum/midpoint/repo/sql/testing/TestSqlRepositoryFactory.java @@ -6,12 +6,7 @@ */ package com.evolveum.midpoint.repo.sql.testing; -import com.evolveum.midpoint.repo.api.RepositoryServiceFactoryException; -import com.evolveum.midpoint.repo.sql.SqlRepositoryFactory; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import org.apache.commons.configuration2.Configuration; -import org.apache.commons.lang.StringUtils; +import static com.evolveum.midpoint.repo.sql.SqlRepositoryConfiguration.*; import java.io.File; import java.io.FileInputStream; @@ -20,7 +15,13 @@ import java.nio.charset.StandardCharsets; import java.util.Properties; -import static com.evolveum.midpoint.repo.sql.SqlRepositoryConfiguration.*; +import org.apache.commons.configuration2.Configuration; +import org.apache.commons.lang.StringUtils; + +import com.evolveum.midpoint.repo.api.RepositoryServiceFactoryException; +import com.evolveum.midpoint.repo.sql.SqlRepositoryFactory; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; /** * This repository factory should be used for testing purposes only. It behaves like {@link com.evolveum.midpoint.repo.sql.SqlRepositoryFactory}, @@ -39,7 +40,7 @@ public class TestSqlRepositoryFactory extends SqlRepositoryFactory { public synchronized void init(Configuration configuration) throws RepositoryServiceFactoryException { String configFile = System.getProperty(PROPERTY_CONFIG); if (StringUtils.isNotEmpty(configFile)) { - LOGGER.info("Overriding loaded configuration with values from '{}'", new Object[]{configFile}); + LOGGER.info("Overriding loaded configuration with values from '{}'", new Object[] { configFile }); updateConfigurationFromFile(configuration, configFile); } @@ -52,7 +53,7 @@ private void updateConfigurationFromFile(Configuration configuration, String fil Properties properties = new Properties(); try { File file = new File(filePath); - LOGGER.debug("Config file absolute path '{}'.", new Object[]{file.getAbsolutePath()}); + LOGGER.debug("Config file absolute path '{}'.", new Object[] { file.getAbsolutePath() }); if (!file.exists() || !file.isFile() || !file.canRead()) { throw new RepositoryServiceFactoryException("Config file '" + filePath + "' doesn't exist or can't be read."); } @@ -108,6 +109,7 @@ private void updateConfigurationFromProperties(Configuration configuration, Prop updateConfigurationStringProperty(configuration, properties, PROPERTY_MAX_OBJECTS_FOR_IMPLICIT_FETCH_ALL_ITERATION_METHOD); updateConfigurationBooleanProperty(configuration, properties, PROPERTY_USE_ZIP); + updateConfigurationStringProperty(configuration, properties, PROPERTY_FULL_OBJECT_FORMAT); updateConfigurationIntegerProperty(configuration, properties, PROPERTY_MIN_POOL_SIZE); updateConfigurationIntegerProperty(configuration, properties, PROPERTY_MAX_POOL_SIZE); @@ -131,7 +133,7 @@ private void updateConfigurationFromProperties(Configuration configuration, Prop private void updateConfigurationIntegerProperty(Configuration configuration, Properties properties, String propertyName) { String value = properties != null ? properties.getProperty(propertyName) : System.getProperty(propertyName); - if (value == null || !value.matches("[1-9]{1}[0-9]*")) { + if (value == null || !value.matches("[1-9][0-9]*")) { return; } int val = Integer.parseInt(value); @@ -153,7 +155,8 @@ private void updateConfigurationStringProperty(Configuration configuration, Prop updateConfigurationStringProperty(configuration, properties, propertyName, null); } - private void updateConfigurationStringProperty(Configuration configuration, Properties properties, String propertyName, String defaultValue) { + private void updateConfigurationStringProperty( + Configuration configuration, Properties properties, String propertyName, String defaultValue) { String value = properties != null ? properties.getProperty(propertyName) : System.getProperty(propertyName); if (value == null) { value = defaultValue; diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryConfiguration.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryConfiguration.java index 3b49935b163..8675b2940df 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryConfiguration.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryConfiguration.java @@ -7,30 +7,38 @@ package com.evolveum.midpoint.repo.sql; +import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; + +import static com.evolveum.midpoint.repo.sql.SqlRepositoryConfiguration.Database.*; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.apache.commons.configuration2.Configuration; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.h2.Driver; +import org.hibernate.dialect.H2Dialect; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import com.evolveum.midpoint.common.configuration.api.MidpointConfiguration; +import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.repo.api.RepositoryServiceFactoryException; import com.evolveum.midpoint.repo.sql.helpers.OrgClosureManager; import com.evolveum.midpoint.repo.sql.perf.SqlPerformanceMonitorImpl; -import com.evolveum.midpoint.repo.sql.util.*; +import com.evolveum.midpoint.repo.sql.util.MidPointMySQLDialect; +import com.evolveum.midpoint.repo.sql.util.MidPointOracleDialect; +import com.evolveum.midpoint.repo.sql.util.MidPointPostgreSQLDialect; +import com.evolveum.midpoint.repo.sql.util.UnicodeSQLServer2008Dialect; import com.evolveum.midpoint.util.MiscUtil; import com.evolveum.midpoint.util.exception.SystemException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import org.apache.commons.configuration2.Configuration; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; -import org.h2.Driver; -import org.hibernate.dialect.*; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.*; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import static com.evolveum.midpoint.repo.sql.SqlRepositoryConfiguration.Database.*; -import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; /** * This class is used for SQL repository configuration. It reads values from Apache configuration object (xml). @@ -51,7 +59,7 @@ public enum Database { // order is important! (the first value is the default) H2(DRIVER_H2, - H2Dialect.class.getName()), + H2Dialect.class.getName()), MYSQL(DRIVER_MYSQL, MidPointMySQLDialect.class.getName(), org.hibernate.dialect.MySQLDialect.class.getName(), @@ -148,7 +156,7 @@ public enum MissingSchemaAction { */ CREATE("create"); - private String value; + private final String value; MissingSchemaAction(String value) { this.value = value; @@ -188,7 +196,7 @@ public enum UpgradeableSchemaAction { */ UPGRADE("upgrade"); - private String value; + private final String value; UpgradeableSchemaAction(String value) { this.value = value; @@ -224,7 +232,7 @@ public enum IncompatibleSchemaAction { */ WARN("warn"); - private String value; + private final String value; IncompatibleSchemaAction(String value) { this.value = value; @@ -272,6 +280,12 @@ public static IncompatibleSchemaAction fromValue(String text) { public static final String PROPERTY_JDBC_URL = "jdbcUrl"; public static final String PROPERTY_DATASOURCE = "dataSource"; public static final String PROPERTY_USE_ZIP = "useZip"; + + /** + * Specifies language used for writing fullObject attribute. + * See LANG constants in {@link com.evolveum.midpoint.prism.PrismContext} for supported values. + */ + public static final String PROPERTY_FULL_OBJECT_FORMAT = "fullObjectFormat"; public static final String PROPERTY_MIN_POOL_SIZE = "minPoolSize"; public static final String PROPERTY_MAX_POOL_SIZE = "maxPoolSize"; public static final String PROPERTY_MAX_LIFETIME = "maxLifetime"; @@ -353,6 +367,7 @@ public static IncompatibleSchemaAction fromValue(String text) { private final Long maxLifetime; private final Long idleTimeout; private final boolean useZip; + private String fullObjectFormat; // non-final for testing private TransactionIsolation defaultTransactionIsolation; private boolean defaultLockForUpdateViaHibernate; @@ -468,6 +483,8 @@ public SqlRepositoryConfiguration(Configuration configuration) { idleTimeout = configuration.getLong(PROPERTY_IDLE_TIMEOUT, null); useZip = configuration.getBoolean(PROPERTY_USE_ZIP, false); + fullObjectFormat = configuration.getString( + PROPERTY_FULL_OBJECT_FORMAT, PrismContext.LANG_XML); // requires asServer, baseDir, fileName, port jdbcUrl = configuration.getString(PROPERTY_JDBC_URL, embedded ? getDefaultEmbeddedJdbcUrl() : null); @@ -592,7 +609,6 @@ public String getDefaultEmbeddedJdbcUrlPrefix() { return jdbcUrl.toString(); } - // The methods below are static to highlight their data dependencies and to avoid using properties // that were not yet initialized. private static String getDefaultDriverClassName(String dataSource, Database database) { @@ -896,6 +912,21 @@ public boolean isUseZip() { return useZip; } + /** + * This is normally not used outside of tests, but should be safe to change any time. + */ + public void setFullObjectFormat(String fullObjectFormat) { + this.fullObjectFormat = fullObjectFormat; + } + + /** + * Returns serialization format (language) for writing fullObject. + * Also see {@link #PROPERTY_FULL_OBJECT_FORMAT}. + */ + public String getFullObjectFormat() { + return fullObjectFormat; + } + public boolean isIgnoreOrgClosure() { return ignoreOrgClosure; }