package org.geoserver.jdbcloader; import java.io.IOException; import java.util.Collections; import java.util.Enumeration; import java.util.LinkedHashSet; import java.util.Properties; import org.geoserver.jdbcloader.JDBCLoaderPropertiesFactoryBean; import org.geoserver.platform.resource.Resource; import org.geoserver.platform.resource.Resources; import com.google.common.base.Optional; import com.google.common.base.Preconditions; public class JDBCLoaderProperties extends Properties { private static final long serialVersionUID = -6758388267074914346L; //maintain order of keys to prevent writing out in random order LinkedHashSet<Object> keys = new LinkedHashSet<Object>(); //factory JDBCLoaderPropertiesFactoryBean factory; String datasourceId = null; public JDBCLoaderProperties(JDBCLoaderPropertiesFactoryBean factory) { this.factory = factory; } @Override public synchronized Enumeration<Object> keys() { return Collections.enumeration(keys); } @Override public synchronized Object put(Object key, Object value) { keys.add(key); return super.put(key, value); } public boolean isEnabled() { return Boolean.valueOf(getProperty("enabled", "false")); } public Optional<String> getJdbcUrl() { return Optional.fromNullable(fillInPlaceholders(getProperty("jdbcUrl"))); } public void setJdbcUrl(String jdbcUrl) { setProperty("jdbcUrl", jdbcUrl); } public boolean isInitDb() { return Boolean.parseBoolean(getProperty("initdb", "false")); } public void setInitDb(boolean initdb) { setProperty("initdb", String.valueOf(initdb)); } public Resource getInitScript() { String initScript = getProperty("initScript"); if (initScript == null) { return null; } Resource resource = Resources.fromPath(initScript, factory.getDataDir()); Preconditions.checkState(Resources.exists(resource), "Init script does not exist: " + resource.path()); return resource; } public boolean isImport() { return Boolean.parseBoolean(getProperty("import", "false")); } public void setImport(boolean imprt) { setProperty("import", String.valueOf(imprt)); } public void save() throws IOException { factory.saveConfig(this); } String fillInPlaceholders(String value) { return value != null ? value.replace("${GEOSERVER_DATA_DIR}", factory.getDataDirStr()) : value; } public Optional<String> getJndiName() { return Optional.fromNullable(getProperty("jndiName")); } public void setJndiName(String name) { setProperty("jndiName", name); } public String getDatasourceId() { return datasourceId; } public void setDatasourceId(String datasourceId) { this.datasourceId = datasourceId; } }