blob: 14795646ca60432e6a96bfb25199a051828fc6e7 [file] [log] [blame]
package de.ids_mannheim.korap.handlers;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.HashMap;
import javax.sql.DataSource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
import de.ids_mannheim.korap.utils.BooleanUtils;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Setter;
/**
* @author hanl
* @date 13/01/2014
*/
@Data
public class JDBCClient extends PersistenceClient<NamedParameterJdbcTemplate> {
@Setter(AccessLevel.NONE)
private DataSource dataSource;
public JDBCClient (DataSource datasource) {
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(
datasource);
template.setCacheLimit(500);
super.setSource(template);
this.dataSource = datasource;
}
public JDBCClient (DataSource dataSource, Resource resource)
throws IOException {
this(dataSource);
this.setSchema(resource.getInputStream());
}
@Override
public void setSchema (InputStream stream) throws IOException {
super.setSchema(stream);
}
@Override
public boolean checkDatabase () {
int size;
NamedParameterJdbcTemplate tmp = this.getSource();
try {
// uses flyway schema table to determine of schema was applied succesfully
size = tmp.queryForObject(
"select count(*) from schema_version limit 5;",
new HashMap<String, Object>(), Integer.class);
}
catch (Exception e) {
System.out.println("No database schema found!");
return false;
}
return size > 0;
}
@Override
public void setDatabase (String name) {
super.setDatabase(name);
BooleanUtils.dbname = name;
}
// get schema file from configuration and create database
@Override
public void createDatabase () {
if (!checkDatabase()) {
final ResourceDatabasePopulator rdp = new ResourceDatabasePopulator();
rdp.addScript(new InputStreamResource(this.getSchema()));
rdp.setSeparator("$$");
try {
rdp.populate(this.dataSource.getConnection());
}
catch (SQLException e) {
// do nothing
e.printStackTrace();
}
}
}
}