Skip to content

Commit

Permalink
SqlRepositoryConfiguration.java: added "fullObjectFormat" repo attribute
Browse files Browse the repository at this point in the history
  • Loading branch information
virgo47 committed Jun 9, 2020
1 parent e699be4 commit 411eed4
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 32 deletions.
Expand Up @@ -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;
Expand All @@ -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},
Expand All @@ -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);
}

Expand All @@ -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.");
}
Expand Down Expand Up @@ -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);

Expand All @@ -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);
Expand All @@ -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;
Expand Down
Expand Up @@ -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).
Expand All @@ -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(),
Expand Down Expand Up @@ -148,7 +156,7 @@ public enum MissingSchemaAction {
*/
CREATE("create");

private String value;
private final String value;

MissingSchemaAction(String value) {
this.value = value;
Expand Down Expand Up @@ -188,7 +196,7 @@ public enum UpgradeableSchemaAction {
*/
UPGRADE("upgrade");

private String value;
private final String value;

UpgradeableSchemaAction(String value) {
this.value = value;
Expand Down Expand Up @@ -224,7 +232,7 @@ public enum IncompatibleSchemaAction {
*/
WARN("warn");

private String value;
private final String value;

IncompatibleSchemaAction(String value) {
this.value = value;
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 411eed4

Please sign in to comment.