blob: 3d496bc65f05c95f536588b1357886cb20a53de7 [file] [log] [blame]
/*
* Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// dclarke - initial
package org.eclipse.persistence.jpars.test.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;
import org.eclipse.persistence.config.PersistenceUnitProperties;
/**
* Helper class that will load persistence unit overrides from a properties file
* in both the current running folder and the current user's home folder. The
* goal is to enable developers and users of the example to customize its
* behaviour without having to modify the source of the example.
*/
public class ExamplePropertiesLoader {
public static final String DEFAULT_FILENAME = "test.properties";
public static final String ECLIPSELINK_TEST_DB_PROP_PREFIX = "db.";
public static final String JPA_DB_PROP_PREFIX = "jakarta.persistence.jdbc.";
public static final String DB_DRIVER_KEY = "db.driver";
public static final String DB_URL_KEY = "db.url";
public static final String DB_USER_KEY = "db.user";
public static final String DB_PWD_KEY = "db.pwd";
public static final String JPA_PWD_KEY = "password";
public static final String DB_PLATFORM_KEY = "db.platform";
public static final String LOGGING_LEVEL_KEY = "eclipselink.logging.level";
public static void loadProperties(Map<String, Object> properties) {
String fileName = System.getProperty(DEFAULT_FILENAME);
if (fileName == null){
fileName = DEFAULT_FILENAME;
}
loadProperties(properties, fileName);
}
public static void loadProperties(Map<String, Object> properties, String filename) {
loadProperties(properties, new File(filename));
String home = System.getProperty("user.home");
loadProperties(properties, new File(home + System.getProperty("file.separator") + filename));
for (Object key : System.getProperties().keySet()) {
String keyName = (String) key;
if (keyName.startsWith("jakarta.persistence") || keyName.startsWith("eclipselink")) {
String value = System.getProperty(keyName);
properties.put(keyName, value);
}
}
}
public static void loadProperties(Map<String, Object> properties, File file) {
try {
if (file.exists()) {
Properties exampleProps = new Properties();
InputStream in = new FileInputStream(file);
exampleProps.load(in);
in.close();
for (Map.Entry<Object, Object> entry : exampleProps.entrySet()) {
if (((String)entry.getKey()).startsWith(DB_PWD_KEY)){
properties.put(((String) entry.getKey()).replace(DB_PWD_KEY, JPA_DB_PROP_PREFIX + JPA_PWD_KEY), entry.getValue());
} else if (((String)entry.getKey()).startsWith(ECLIPSELINK_TEST_DB_PROP_PREFIX)){
properties.put(((String) entry.getKey()).replace(ECLIPSELINK_TEST_DB_PROP_PREFIX, JPA_DB_PROP_PREFIX), entry.getValue());
} else {
properties.put((String) entry.getKey(), entry.getValue());
}
}
}
String dbDriver = System.getProperty(DB_DRIVER_KEY);
String dbUrl = System.getProperty(DB_URL_KEY);
String dbUser = System.getProperty(DB_USER_KEY);
String dbPwd = System.getProperty(DB_PWD_KEY);
String platform = System.getProperty(DB_PLATFORM_KEY);
String logLevel = System.getProperty(LOGGING_LEVEL_KEY);
if (dbDriver != null) {
properties.put(PersistenceUnitProperties.JDBC_DRIVER, dbDriver);
}
if (dbUrl != null) {
properties.put(PersistenceUnitProperties.JDBC_URL, dbUrl);
}
if (dbUser != null) {
properties.put(PersistenceUnitProperties.JDBC_USER, dbUser);
}
if (dbPwd != null) {
properties.put(PersistenceUnitProperties.JDBC_PASSWORD, dbPwd);
}
if (platform != null) {
properties.put(PersistenceUnitProperties.TARGET_DATABASE, platform);
}
if (logLevel != null) {
properties.put(PersistenceUnitProperties.LOGGING_LEVEL, logLevel);
}
} catch (Exception e) {
// ignore
}
}
}