package com.redhat.lightblue.migrator.features;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.togglz.core.repository.StateRepository;
import org.togglz.core.repository.cache.CachingStateRepository;
import org.togglz.core.repository.jdbc.JDBCStateRepository;
import org.togglz.core.repository.util.DefaultMapSerializer;
@ApplicationScoped
public class LightblueMigrationStateRepositoryProvider {
Logger logger = LoggerFactory.getLogger(LightblueMigrationStateRepositoryProvider.class);
private final String dataSourceJndi, tableName;
private final int cacheSeconds;
private final boolean noCommit;
public LightblueMigrationStateRepositoryProvider(String dataSourceJndi, String tableName, int cacheSeconds, boolean noCommit) {
super();
this.dataSourceJndi = dataSourceJndi;
this.tableName = tableName;
this.cacheSeconds = cacheSeconds;
this.noCommit = noCommit;
logger.debug("Initialing LightblueMigrationStateRepositoryProvider: dataSourceJndi=" + dataSourceJndi + ", tableName=" + tableName + ", cacheSeonds=" + cacheSeconds + ",noCommit=" + noCommit);
}
@Inject
public LightblueMigrationStateRepositoryProvider(@Named("lightblueMigrationConfigurationFileName") String configFileName) throws IOException {
logger.debug("Initialing LightblueMigrationStateRepositoryProvider from property file: " + configFileName);
Properties props = new Properties();
try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("./" + configFileName)) {
props.load(in);
}
this.dataSourceJndi = props.getProperty("datasourceJndi");
this.tableName = props.getProperty("tableName");
this.cacheSeconds = Integer.parseInt(props.getProperty("cacheSeconds", "180"));
this.noCommit = Boolean.parseBoolean(props.getProperty("noCommit", "true"));
logger.debug("Initialing LightblueMigrationStateRepositoryProvider: dataSourceJndi=" + dataSourceJndi + ", tableName=" + tableName + ", cacheSeonds=" + cacheSeconds + ",noCommit=" + noCommit);
}
public StateRepository getStateRepository() throws NamingException {
InitialContext c = new InitialContext();
DataSource dataSource = (DataSource) c.lookup(dataSourceJndi);
JDBCStateRepository jdbcStateRepository = new JDBCStateRepository(dataSource, tableName, true, DefaultMapSerializer.singleline(), noCommit);
if (cacheSeconds >= 0) {
return new CachingStateRepository(jdbcStateRepository, cacheSeconds, TimeUnit.SECONDS);
} else {
return jdbcStateRepository;
}
}
public StateRepository getStateRepository(DataSource dataSource) {
JDBCStateRepository jdbcStateRepository = new JDBCStateRepository(dataSource, tableName, true, DefaultMapSerializer.singleline(), noCommit);
if (cacheSeconds >= 0) {
return new CachingStateRepository(jdbcStateRepository, cacheSeconds, TimeUnit.SECONDS);
} else {
return jdbcStateRepository;
}
}
public String getTableName() {
return tableName;
}
public boolean isNoCommit() {
return noCommit;
}
public String getDataSourceJndi() {
return dataSourceJndi;
}
public int getCacheSeconds() {
return cacheSeconds;
}
}