package org.geoserver.jdbcconfig.internal; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.geoserver.jdbcloader.JDBCLoaderProperties; import org.geoserver.jdbcloader.JDBCLoaderPropertiesFactoryBean; import org.geoserver.platform.GeoServerResourceLoader; import org.geoserver.platform.resource.Files; import org.geoserver.platform.resource.Paths; import org.geoserver.platform.resource.Resource; import org.geoserver.platform.resource.ResourceStore; import org.geoserver.platform.resource.Resources; public class JDBCConfigPropertiesFactoryBean extends JDBCLoaderPropertiesFactoryBean { static final String PREFIX = "jdbcconfig"; /** * DDL scripts copied to <data dir>/jdbcconfig_scripts/ on first startup */ private static final String[] SCRIPTS = { "dropdb.h2.sql", "dropdb.mssql.sql", "dropdb.mysql.sql", "dropdb.oracle.sql", "dropdb.postgres.sql", "initdb.h2.sql", "initdb.mssql.sql", "initdb.mysql.sql", "initdb.oracle.sql", "initdb.postgres.sql" }; private static final String[] SAMPLE_CONFIGS = { "jdbcconfig.properties.h2", "jdbcconfig.properties.postgres" }; public JDBCConfigPropertiesFactoryBean(ResourceStore resourceStore) { super(resourceStore, PREFIX); } @Override protected JDBCLoaderProperties createConfig() throws IOException { return new JDBCConfigProperties(this); } @Override protected String[] getScripts() { return SCRIPTS; } @Override protected String[] getSampleConfigurations() { return SAMPLE_CONFIGS; } @Override public List<Resource> getFileLocations() throws IOException { List<Resource> configurationFiles = new ArrayList<>(); final Resource scriptsDir = getScriptDir(); for (String scriptName : getScripts()) { configurationFiles.add(scriptsDir.get(scriptName)); } final Resource baseDirectory = getBaseDir(); for (String sampleConfig : getSampleConfigurations()) { configurationFiles.add(baseDirectory.get(sampleConfig)); } return configurationFiles; } @Override public void saveConfiguration(GeoServerResourceLoader resourceLoader) throws IOException { final Resource baseDirectory = getBaseDir(); for(Resource jdbcConfig : getFileLocations()) { Resource targetDir = Files.asResource(resourceLoader.findOrCreateDirectory(Paths.convert(baseDirectory.parent().dir(), jdbcConfig.parent().dir()))); Resources.copy(jdbcConfig.file(), targetDir); } } @Override public void loadConfiguration(GeoServerResourceLoader resourceLoader) throws IOException { loadProperties(createProperties()); } }