diff --git a/pom.xml b/pom.xml index 669041089..cf1c1a923 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.jbei ice war - 5.9.6 + 5.10.0 ice Inventory of Composable Elements (ICE) for Synthetic Biology diff --git a/src/main/java/org/jbei/ice/ApplicationInitialize.java b/src/main/java/org/jbei/ice/ApplicationInitialize.java index 7b04cd4a3..92b7ab66a 100644 --- a/src/main/java/org/jbei/ice/ApplicationInitialize.java +++ b/src/main/java/org/jbei/ice/ApplicationInitialize.java @@ -1,12 +1,27 @@ package org.jbei.ice; +import org.apache.commons.lang3.StringUtils; import org.jbei.ice.lib.account.AccountController; import org.jbei.ice.lib.common.logging.Logger; import org.jbei.ice.lib.config.ConfigurationSettings; +import org.jbei.ice.lib.dto.ConfigurationKey; import org.jbei.ice.lib.entry.sequence.annotation.AutoAnnotationBlastDbBuildTask; import org.jbei.ice.lib.executor.IceExecutorService; import org.jbei.ice.lib.group.GroupController; import org.jbei.ice.lib.search.blast.RebuildBlastIndexTask; +import org.jbei.ice.storage.DAOFactory; +import org.jbei.ice.storage.hibernate.DbType; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; +import org.jbei.ice.storage.hibernate.dao.ConfigurationDAO; +import org.jbei.ice.storage.model.ConfigurationModel; + +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Iterator; +import java.util.Properties; /** * Responsible for initializing the ICE application @@ -16,11 +31,126 @@ */ public class ApplicationInitialize { + private static final String SERVER_PROPERTY_NAME = "ice-server.properties"; + /** * Responsible for initializing the system and checking for the existence of needed * data (such as settings) and creating as needed + * + * @return a valid data directory path or null if none could be detected */ - public static void startUp() { + public static Path configure() { + try { + // get or initialize data directory + Path dataDirectory = initializeDataDirectory(); + if (dataDirectory == null || !Files.exists(dataDirectory)) + return null; + + // check if there is a ice-server.properties in the config directory inside the data directory + // and use it to connect to the database if so + if (Files.exists(Paths.get(dataDirectory.toString(), "config", SERVER_PROPERTY_NAME))) { + loadServerProperties(dataDirectory); + } else { + // todo : do not initialize hibernate unless "diva-server.properties is available + // todo : this will force a redirect on the ui and let user create/select a supported database + + // unless there is already a db directory (check if using for built-in database) + // since using the built in doesn't require a config file + Path dbFolder = Paths.get(dataDirectory.toString(), "db"); + if (Files.exists(dbFolder) && Files.isDirectory(dbFolder)) { + // check if there is a database with the name diva-h2db + Iterator files = Files.list(dbFolder).iterator(); + if (files.hasNext()) { + Path file = files.next(); + String fileName = file.getFileName().toString(); + if (fileName.endsWith(".db") && fileName.startsWith("ice-h2db")) { + HibernateConfiguration.initialize(DbType.H2DB, null, dataDirectory); + return dataDirectory; + } else { + // db folder located but no database + return null; + } + } + } else if (Files.isWritable(dataDirectory)) { + // create the db directory for the file database + Files.createDirectory(dbFolder); + // todo : create database config file template + // todo : create ldap-config.properties.template + HibernateConfiguration.initialize(DbType.H2DB, null, dataDirectory); // this creates a directory "/db" + } + } + + return dataDirectory; + } catch (Exception e) { + Logger.error(e); + throw new RuntimeException(e); + } + } + + // this should not create a home directory + private static Path initializeDataDirectory() { + // check environ variable + String propertyHome = System.getenv("ICE_DATA_HOME"); + Path iceHome; + + if (StringUtils.isBlank(propertyHome)) { + // check system property (-D in startup script) + propertyHome = System.getProperty("ICE_DATA_HOME"); + + // still nothing, check home directory + if (StringUtils.isBlank(propertyHome)) { + String userHome = System.getProperty("user.home"); + iceHome = Paths.get(userHome, ".ICEData"); + if (!Files.exists(iceHome)) { + // create home directory + try { + if (Files.isWritable(Paths.get(userHome))) + return Files.createDirectory(iceHome); + else + return null; + } catch (IOException e) { + Logger.error(e); + return null; + } + } + } else { + iceHome = Paths.get(propertyHome); + } + } else { + iceHome = Paths.get(propertyHome); + } + + Logger.info("Using ICE data directory: " + iceHome); + return iceHome; + } + + // initialize the database using the database configuration + private static void loadServerProperties(Path dataDirectory) throws IOException { + Path serverPropertiesPath = Paths.get(dataDirectory.toString(), "config", SERVER_PROPERTY_NAME); + Properties properties = new Properties(); + properties.load(new FileInputStream(serverPropertiesPath.toFile())); + + Logger.info("Loading server properties from " + serverPropertiesPath); + + // get type of data base + String dbTypeString = properties.getProperty("connectionType"); + DbType type; + if (StringUtils.isBlank(dbTypeString)) { + Logger.error("Property \"connectionType\" not found. Defaulting to value of " + DbType.POSTGRESQL); + type = DbType.POSTGRESQL; + } else { + type = DbType.valueOf(dbTypeString.toUpperCase()); + } + + // get type of database etc + HibernateConfiguration.initialize(type, properties, dataDirectory); + } + + /** + * Responsible for initializing the system and checking for the existence of needed + * data (such as settings) and creating as needed + */ + public static void startUp(Path dataDirectory) { IceExecutorService.getInstance().startService(); // check for and create public group @@ -35,6 +165,9 @@ public static void startUp() { ConfigurationSettings settings = new ConfigurationSettings(); settings.initPropertyValues(); + // check data directory + checkDataDirectory(dataDirectory); + try { // check blast database exists and build if it doesn't RebuildBlastIndexTask task = new RebuildBlastIndexTask(); @@ -46,4 +179,23 @@ public static void startUp() { Logger.error(e); } } + + private static void checkDataDirectory(Path dataDirectory) { + ConfigurationSettings settings = new ConfigurationSettings(); + String value = settings.getPropertyValue(ConfigurationKey.DATA_DIRECTORY); + if (!StringUtils.isEmpty(value)) + return; + + ConfigurationDAO dao = DAOFactory.getConfigurationDAO(); + ConfigurationModel model = dao.get(ConfigurationKey.DATA_DIRECTORY); + if (model == null) { + model = new ConfigurationModel(); + model.setKey(ConfigurationKey.DATA_DIRECTORY.name()); + model.setValue(dataDirectory.toString()); + dao.create(model); + } else { + model.setValue(dataDirectory.toString()); + dao.update(model); + } + } } diff --git a/src/main/java/org/jbei/ice/lib/config/ConfigurationSettings.java b/src/main/java/org/jbei/ice/lib/config/ConfigurationSettings.java index 246a733e9..1644a4b41 100644 --- a/src/main/java/org/jbei/ice/lib/config/ConfigurationSettings.java +++ b/src/main/java/org/jbei/ice/lib/config/ConfigurationSettings.java @@ -9,7 +9,7 @@ import org.jbei.ice.lib.net.WoRController; import org.jbei.ice.storage.DAOFactory; import org.jbei.ice.storage.hibernate.dao.ConfigurationDAO; -import org.jbei.ice.storage.model.Configuration; +import org.jbei.ice.storage.model.ConfigurationModel; import org.rauschig.jarchivelib.Archiver; import org.rauschig.jarchivelib.ArchiverFactory; @@ -45,14 +45,14 @@ public Setting getSystemVersion(String url) { } public String getPropertyValue(ConfigurationKey key) { - Configuration config = dao.get(key); + ConfigurationModel config = dao.get(key); if (config == null) return key.getDefaultValue(); return config.getValue(); } public Setting getPropertyValue(String key) { - Configuration config = dao.get(key); + ConfigurationModel config = dao.get(key); if (config == null) return null; return config.toDataTransferObject(); @@ -80,16 +80,16 @@ public List getSampleRequestSettings(String userId) { } private Setting getConfigValue(ConfigurationKey key) { - Configuration configuration = dao.get(key); + ConfigurationModel configuration = dao.get(key); if (configuration == null) return new Setting(key.name(), ""); return new Setting(configuration.getKey(), configuration.getValue()); } - public Configuration setPropertyValue(ConfigurationKey key, String value) { - Configuration configuration = dao.get(key); + public ConfigurationModel setPropertyValue(ConfigurationKey key, String value) { + ConfigurationModel configuration = dao.get(key); if (configuration == null) { - configuration = new Configuration(); + configuration = new ConfigurationModel(); configuration.setKey(key.name()); configuration.setValue(value); return dao.create(configuration); @@ -105,7 +105,7 @@ public Setting updateSetting(String userId, Setting setting, String url) { throw new PermissionException("Cannot update system setting without admin privileges"); ConfigurationKey key = ConfigurationKey.valueOf(setting.getKey()); - Configuration configuration = setPropertyValue(key, setting.getValue()); + ConfigurationModel configuration = setPropertyValue(key, setting.getValue()); // check if the setting being updated is related to the web of registries if (key == ConfigurationKey.JOIN_WEB_OF_REGISTRIES) { @@ -123,12 +123,12 @@ public Setting autoUpdateSetting(String userId, Setting setting) { if (!accountController.isAdministrator(userId)) throw new PermissionException("Cannot auto update system setting without admin privileges"); - Configuration configuration = dao.get(setting.getKey()); + ConfigurationModel configuration = dao.get(setting.getKey()); if (configuration == null) { Logger.warn("Could not retrieve setting " + setting.getKey() + ". Creating..."); if (setting.getValue() == null) setting.setValue(""); - configuration = dao.create(new Configuration(setting.getKey(), setting.getValue())); + configuration = dao.create(new ConfigurationModel(setting.getKey(), setting.getValue())); } String osName = System.getProperty("os.name").replaceAll("\\s+", "").toLowerCase(); @@ -169,7 +169,7 @@ public Setting autoUpdateSetting(String userId, Setting setting) { */ public void initPropertyValues() { for (ConfigurationKey key : ConfigurationKey.values()) { - Configuration config = dao.get(key); + ConfigurationModel config = dao.get(key); if (config == null || (config.getValue().isBlank() && !key.getDefaultValue().isEmpty())) { Logger.info("Setting value for " + key.name() + " to " + key.getDefaultValue()); setPropertyValue(key, key.getDefaultValue()); diff --git a/src/main/java/org/jbei/ice/lib/config/SiteSettings.java b/src/main/java/org/jbei/ice/lib/config/SiteSettings.java index 8dd5bd669..d394ed667 100644 --- a/src/main/java/org/jbei/ice/lib/config/SiteSettings.java +++ b/src/main/java/org/jbei/ice/lib/config/SiteSettings.java @@ -9,7 +9,7 @@ */ public class SiteSettings implements IDataTransferModel { - private String version = "5.9.6"; + private String version = "5.10.0"; private String assetName; private boolean hasLogo; private boolean hasLoginMessage; diff --git a/src/main/java/org/jbei/ice/lib/dto/ConfigurationKey.java b/src/main/java/org/jbei/ice/lib/dto/ConfigurationKey.java index 890ac09cd..732dfcba3 100644 --- a/src/main/java/org/jbei/ice/lib/dto/ConfigurationKey.java +++ b/src/main/java/org/jbei/ice/lib/dto/ConfigurationKey.java @@ -11,7 +11,7 @@ */ public enum ConfigurationKey implements IDataTransferModel { - APPLICATION_VERSION("5.9.6"), + APPLICATION_VERSION("5.10.0"), TEMPORARY_DIRECTORY("/tmp"), DATA_DIRECTORY("data"), diff --git a/src/main/java/org/jbei/ice/lib/entry/sequence/PartSequence.java b/src/main/java/org/jbei/ice/lib/entry/sequence/PartSequence.java index 802aed424..70779eeaa 100644 --- a/src/main/java/org/jbei/ice/lib/entry/sequence/PartSequence.java +++ b/src/main/java/org/jbei/ice/lib/entry/sequence/PartSequence.java @@ -653,7 +653,7 @@ private FeaturedDNASequence getFeaturedSequence(Entry entry, boolean canEdit, bo FeaturedDNASequence featuredDNASequence = SequenceUtil.sequenceToDNASequence(sequence, sequenceFeatures); featuredDNASequence.setCanEdit(canEdit); featuredDNASequence.setIdentifier(entry.getPartNumber()); - Configuration configuration = DAOFactory.getConfigurationDAO().get(ConfigurationKey.URI_PREFIX); + ConfigurationModel configuration = DAOFactory.getConfigurationDAO().get(ConfigurationKey.URI_PREFIX); if (configuration != null) { String uriPrefix = configuration.getValue(); diff --git a/src/main/java/org/jbei/ice/lib/executor/TaskHandler.java b/src/main/java/org/jbei/ice/lib/executor/TaskHandler.java index 463fa470c..9220fa402 100644 --- a/src/main/java/org/jbei/ice/lib/executor/TaskHandler.java +++ b/src/main/java/org/jbei/ice/lib/executor/TaskHandler.java @@ -1,7 +1,7 @@ package org.jbei.ice.lib.executor; import org.jbei.ice.lib.common.logging.Logger; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; /** * Runnable for running tasks @@ -20,13 +20,13 @@ class TaskHandler implements Runnable { public void run() { try { this.task.setStatus(TaskStatus.IN_PROGRESS); - HibernateUtil.beginTransaction(); + HibernateConfiguration.beginTransaction(); task.execute(); - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); this.task.setStatus(TaskStatus.COMPLETED); } catch (Throwable caught) { Logger.error(caught); - HibernateUtil.rollbackTransaction(); + HibernateConfiguration.rollbackTransaction(); this.task.setStatus(TaskStatus.EXCEPTION); } } diff --git a/src/main/java/org/jbei/ice/lib/net/RemoteEntriesAsCSV.java b/src/main/java/org/jbei/ice/lib/net/RemoteEntriesAsCSV.java index d5480dec8..d8d67915d 100644 --- a/src/main/java/org/jbei/ice/lib/net/RemoteEntriesAsCSV.java +++ b/src/main/java/org/jbei/ice/lib/net/RemoteEntriesAsCSV.java @@ -189,7 +189,7 @@ protected void writeLocalEntries(List entries, List field return; SequenceDAO sequenceDAO = DAOFactory.getSequenceDAO(); - Configuration configuration = DAOFactory.getConfigurationDAO().get(ConfigurationKey.URI_PREFIX); + ConfigurationModel configuration = DAOFactory.getConfigurationDAO().get(ConfigurationKey.URI_PREFIX); String thisUrl = configuration == null ? "" : configuration.getValue(); for (Long id : entries) { diff --git a/src/main/java/org/jbei/ice/lib/search/RebuildLuceneIndexTask.java b/src/main/java/org/jbei/ice/lib/search/RebuildLuceneIndexTask.java index df8d9b4b0..b41dbd0b1 100644 --- a/src/main/java/org/jbei/ice/lib/search/RebuildLuceneIndexTask.java +++ b/src/main/java/org/jbei/ice/lib/search/RebuildLuceneIndexTask.java @@ -6,7 +6,7 @@ import org.hibernate.search.Search; import org.jbei.ice.lib.common.logging.Logger; import org.jbei.ice.lib.executor.Task; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; /** * Task to rebuild lucene index @@ -18,7 +18,7 @@ public class RebuildLuceneIndexTask extends Task { @Override public void execute() { Logger.info("Rebuilding lucene index in background"); - Session session = HibernateUtil.newSession(); + Session session = HibernateConfiguration.newSession(); FullTextSession fullTextSession = Search.getFullTextSession(session); MassIndexer indexer = fullTextSession.createIndexer(); indexer.idFetchSize(20); diff --git a/src/main/java/org/jbei/ice/services/rest/AuthenticationInterceptor.java b/src/main/java/org/jbei/ice/services/rest/AuthenticationInterceptor.java index 5b8946e11..64517de14 100644 --- a/src/main/java/org/jbei/ice/services/rest/AuthenticationInterceptor.java +++ b/src/main/java/org/jbei/ice/services/rest/AuthenticationInterceptor.java @@ -11,7 +11,7 @@ import org.jbei.ice.lib.common.logging.Logger; import org.jbei.ice.lib.dto.ConfigurationKey; import org.jbei.ice.lib.utils.Utils; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import javax.annotation.Priority; import javax.ws.rs.Priorities; @@ -57,10 +57,10 @@ public class AuthenticationInterceptor implements ContainerRequestFilter, Reader private final File directory; { // need to force-create a transaction to get the DATA_DIRECTORY config value - HibernateUtil.beginTransaction(); + HibernateConfiguration.beginTransaction(); directory = Paths.get(Utils.getConfigValue(ConfigurationKey.DATA_DIRECTORY), "rest-auth").toFile(); - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Override diff --git a/src/main/java/org/jbei/ice/services/rest/IceRequestFilter.java b/src/main/java/org/jbei/ice/services/rest/IceRequestFilter.java index a17949658..0b15895d8 100644 --- a/src/main/java/org/jbei/ice/services/rest/IceRequestFilter.java +++ b/src/main/java/org/jbei/ice/services/rest/IceRequestFilter.java @@ -1,6 +1,6 @@ package org.jbei.ice.services.rest; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; @@ -18,6 +18,6 @@ public class IceRequestFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) { - HibernateUtil.beginTransaction(); + HibernateConfiguration.beginTransaction(); } } diff --git a/src/main/java/org/jbei/ice/services/rest/IceResponseFilter.java b/src/main/java/org/jbei/ice/services/rest/IceResponseFilter.java index 1acedd229..9c00618ad 100644 --- a/src/main/java/org/jbei/ice/services/rest/IceResponseFilter.java +++ b/src/main/java/org/jbei/ice/services/rest/IceResponseFilter.java @@ -1,6 +1,6 @@ package org.jbei.ice.services.rest; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; @@ -19,9 +19,9 @@ public class IceResponseFilter implements ContainerResponseFilter { @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) { if (responseContext.getStatus() == 500) { - HibernateUtil.rollbackTransaction(); + HibernateConfiguration.rollbackTransaction(); } else { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } } } diff --git a/src/main/java/org/jbei/ice/services/rest/WebResource.java b/src/main/java/org/jbei/ice/services/rest/WebResource.java index 62d9f719e..8030b2f9f 100644 --- a/src/main/java/org/jbei/ice/services/rest/WebResource.java +++ b/src/main/java/org/jbei/ice/services/rest/WebResource.java @@ -16,7 +16,7 @@ import org.jbei.ice.lib.net.WoRController; import org.jbei.ice.lib.search.WebSearch; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.model.Configuration; +import org.jbei.ice.storage.model.ConfigurationModel; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; @@ -123,7 +123,7 @@ public Response getWebEntrySequence( @PathParam("id") final long partnerId, @PathParam("entryId") final String entryId) { requireUserId(); final FeaturedDNASequence result = remoteEntries.getPublicEntrySequence(partnerId, entryId); - Configuration configuration = DAOFactory.getConfigurationDAO().get(ConfigurationKey.URI_PREFIX); + ConfigurationModel configuration = DAOFactory.getConfigurationDAO().get(ConfigurationKey.URI_PREFIX); if (configuration != null && result != null) { String uriPrefix = configuration.getValue(); result.setUri(uriPrefix + "/web/" + partnerId + "/entry/" + entryId); diff --git a/src/main/java/org/jbei/ice/servlet/IceServletContextListener.java b/src/main/java/org/jbei/ice/servlet/IceServletContextListener.java index f374afc28..06fd3e7de 100644 --- a/src/main/java/org/jbei/ice/servlet/IceServletContextListener.java +++ b/src/main/java/org/jbei/ice/servlet/IceServletContextListener.java @@ -1,17 +1,13 @@ package org.jbei.ice.servlet; -import org.hibernate.SessionFactory; import org.jbei.ice.ApplicationInitialize; import org.jbei.ice.lib.common.logging.Logger; import org.jbei.ice.lib.executor.IceExecutorService; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; -import java.sql.Driver; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.util.Enumeration; +import java.nio.file.Path; /** * Ice servlet context listener for running initializing @@ -22,7 +18,19 @@ public class IceServletContextListener implements ServletContextListener { public void contextInitialized(ServletContextEvent event) { - init(); + Path path = ApplicationInitialize.configure(); + if (path == null) + return; + + try { + HibernateConfiguration.beginTransaction(); + ApplicationInitialize.startUp(path); + HibernateConfiguration.commitTransaction(); + } catch (Throwable e) { + HibernateConfiguration.rollbackTransaction(); + e.printStackTrace(); + throw new RuntimeException(e); + } } public void contextDestroyed(ServletContextEvent event) { @@ -30,35 +38,6 @@ public void contextDestroyed(ServletContextEvent event) { // shutdown executor service IceExecutorService.getInstance().stopService(); - - closeSessionFactory(HibernateUtil.getSessionFactory()); - - Enumeration drivers = DriverManager.getDrivers(); - while (drivers.hasMoreElements()) { - Driver driver = drivers.nextElement(); - try { - DriverManager.deregisterDriver(driver); - Logger.info("De-registering JDBC driver: " + driver); - } catch (SQLException e) { - Logger.error("Error de-registering driver: " + driver, e); - } - } - } - - // work - private void closeSessionFactory(SessionFactory factory) { - factory.close(); - } - - protected void init() { - try { - HibernateUtil.beginTransaction(); - ApplicationInitialize.startUp(); - HibernateUtil.commitTransaction(); - } catch (Throwable e) { - HibernateUtil.rollbackTransaction(); - e.printStackTrace(); - throw new RuntimeException(e); - } + HibernateConfiguration.close(); } } diff --git a/src/main/java/org/jbei/ice/storage/hibernate/DbType.java b/src/main/java/org/jbei/ice/storage/hibernate/DbType.java new file mode 100644 index 000000000..1d255431b --- /dev/null +++ b/src/main/java/org/jbei/ice/storage/hibernate/DbType.java @@ -0,0 +1,7 @@ +package org.jbei.ice.storage.hibernate; + +public enum DbType { + MEMORY, + POSTGRESQL, + H2DB +} diff --git a/src/main/java/org/jbei/ice/storage/hibernate/HibernateConfiguration.java b/src/main/java/org/jbei/ice/storage/hibernate/HibernateConfiguration.java new file mode 100644 index 000000000..5696ac858 --- /dev/null +++ b/src/main/java/org/jbei/ice/storage/hibernate/HibernateConfiguration.java @@ -0,0 +1,204 @@ +package org.jbei.ice.storage.hibernate; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.cfg.Configuration; +import org.hibernate.service.ServiceRegistry; +import org.jbei.ice.lib.common.logging.Logger; +import org.jbei.ice.storage.model.*; + +import java.nio.file.Path; +import java.util.Properties; + +/** + * Helper class to Initialize Hibernate, and obtain new sessions. + * + * @author Zinovii Dmytriv, Timothy Ham, Hector Plahar + */ +public class HibernateConfiguration { + + // thread safe global object that is instantiated once + private static SessionFactory sessionFactory; + + // singleton + private HibernateConfiguration() { + } + + /** + * @return session bound to context. + */ + protected static Session currentSession() { + return sessionFactory.getCurrentSession(); + } + + /** + * Open a new {@link Session} from the sessionFactory. + * This needs to be closed when done with + * + * @return New Hibernate {@link Session}. + */ + public static Session newSession() { + return sessionFactory.openSession(); + } + + public static void beginTransaction() { + if (sessionFactory == null) + return; + + if (!sessionFactory.getCurrentSession().getTransaction().isActive()) + sessionFactory.getCurrentSession().beginTransaction(); + } + + public static void commitTransaction() { + if (sessionFactory == null) + return; + + if (sessionFactory.getCurrentSession().getTransaction().isActive()) + sessionFactory.getCurrentSession().getTransaction().commit(); + } + + /** + * Configure the database using the (optional) connection properties + * + * @param dbType database type + * @param properties optional connection properties. Required only if + * DbType is POSTGRESQL + * @param dataDirectory path to the data directory optional for in memory database + */ + public static synchronized void initialize(DbType dbType, Properties properties, Path dataDirectory) { + if (sessionFactory != null) { + Logger.info("Database already configured. Close/reset to re-configure"); + return; + } + + Logger.info("Initializing session factory for type " + dbType.name()); + Configuration configuration = new Configuration(); + + switch (dbType) { + case H2DB: + default: + configureH2Db(configuration, dataDirectory.toString()); + break; + + case MEMORY: + configureInMemoryDb(configuration); + break; + + case POSTGRESQL: + configurePostgresDb(configuration, properties, dataDirectory.toString()); + break; + } + + ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); + configuration.configure(); + addAnnotatedClasses(configuration); + sessionFactory = configuration.buildSessionFactory(serviceRegistry); + } + + private static void configurePostgresDb(Configuration configuration, Properties properties, String dbPath) { + // load (additional) base configuration + configuration.configure(); + String url = properties.getProperty("connectionUrl"); + String username = properties.getProperty("username"); + String password = properties.getProperty("password"); + String dbName = properties.getProperty("dbName"); + + configuration.setProperty("hibernate.connection.url", "jdbc:postgresql://" + url + "/" + dbName); + configuration.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver"); + configuration.setProperty("hibernate.connection.username", username); + configuration.setProperty("hibernate.connection.password", password); + configuration.setProperty("hibernate.search.default.indexBase", dbPath + "/data/lucene-data"); + } + + private static void configureH2Db(Configuration configuration, String dbPath) { + configuration.configure(); + configuration.setProperty("hibernate.connection.url", "jdbc:h2:" + dbPath + "/db/ice-h2db"); + configuration.setProperty("hibernate.connection.driver_class", "org.h2.Driver"); + configuration.setProperty("hibernate.connection.username", "sa"); + configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); + configuration.setProperty("hibernate.search.default.indexBase", dbPath + "/data/lucene-data"); + } + + private static void configureInMemoryDb(Configuration configuration) { + configuration.setProperty("hibernate.connection.url", "jdbc:h2:mem:test"); + configuration.setProperty("hibernate.connection.driver_class", "org.h2.Driver"); + configuration.setProperty("hibernate.connection.username", "sa"); + configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); + configuration.setProperty("hibernate.current_session_context_class", + "org.hibernate.context.internal.ThreadLocalSessionContext"); + configuration.setProperty("hibernate.hbm2ddl.auto", "update"); + configuration.setProperty("hibernate.search.default.directory_provider", + "org.hibernate.search.store.impl.RAMDirectoryProvider"); + } + + private static void addAnnotatedClasses(Configuration configuration) { + configuration.addAnnotatedClass(Entry.class); + configuration.addAnnotatedClass(Plasmid.class); + configuration.addAnnotatedClass(Strain.class); + configuration.addAnnotatedClass(Part.class); + configuration.addAnnotatedClass(ArabidopsisSeed.class); + configuration.addAnnotatedClass(Protein.class); + configuration.addAnnotatedClass(Link.class); + configuration.addAnnotatedClass(SelectionMarker.class); + configuration.addAnnotatedClass(Sequence.class); + configuration.addAnnotatedClass(Feature.class); + configuration.addAnnotatedClass(SequenceFeature.class); + configuration.addAnnotatedClass(SequenceFeatureAttribute.class); + configuration.addAnnotatedClass(Comment.class); + configuration.addAnnotatedClass(Account.class); + configuration.addAnnotatedClass(Attachment.class); + configuration.addAnnotatedClass(Sample.class); + configuration.addAnnotatedClass(AccountPreferences.class); + configuration.addAnnotatedClass(Group.class); + configuration.addAnnotatedClass(TraceSequence.class); + configuration.addAnnotatedClass(TraceSequenceAlignment.class); + configuration.addAnnotatedClass(Storage.class); + configuration.addAnnotatedClass(Folder.class); + configuration.addAnnotatedClass(Parameter.class); + configuration.addAnnotatedClass(AnnotationLocation.class); + configuration.addAnnotatedClass(BulkUpload.class); + configuration.addAnnotatedClass(Permission.class); + configuration.addAnnotatedClass(Message.class); + configuration.addAnnotatedClass(Preference.class); + configuration.addAnnotatedClass(RemotePartner.class); + configuration.addAnnotatedClass(Request.class); + configuration.addAnnotatedClass(Audit.class); + configuration.addAnnotatedClass(Experiment.class); + configuration.addAnnotatedClass(ShotgunSequence.class); + configuration.addAnnotatedClass(ConfigurationModel.class); + configuration.addAnnotatedClass(ApiKey.class); + configuration.addAnnotatedClass(RemoteClientModel.class); + configuration.addAnnotatedClass(RemoteAccessModel.class); + configuration.addAnnotatedClass(ManuscriptModel.class); + configuration.addAnnotatedClass(FeatureCurationModel.class); + configuration.addAnnotatedClass(CustomEntryFieldModel.class); + configuration.addAnnotatedClass(CustomEntryFieldOptionModel.class); + configuration.addAnnotatedClass(CustomEntryFieldValueModel.class); + configuration.addAnnotatedClass(SequenceHistoryModel.class); + configuration.addAnnotatedClass(SampleCreateModel.class); + } + + public static void rollbackTransaction() { + if (sessionFactory == null) + return; + + if (sessionFactory.getCurrentSession().getTransaction().isActive()) + sessionFactory.getCurrentSession().getTransaction().rollback(); + } + + /** + * Initialize a in-memory mock database for testing. + */ + public static void initializeMock() { + initialize(DbType.MEMORY, null, null); + } + + public static void close() { + if (sessionFactory != null && !sessionFactory.isClosed()) { + Logger.info("Closing session factory"); + sessionFactory.getCurrentSession().disconnect(); + sessionFactory.close(); + } + } +} diff --git a/src/main/java/org/jbei/ice/storage/hibernate/HibernateRepository.java b/src/main/java/org/jbei/ice/storage/hibernate/HibernateRepository.java index 43eaad26b..06eb474b6 100644 --- a/src/main/java/org/jbei/ice/storage/hibernate/HibernateRepository.java +++ b/src/main/java/org/jbei/ice/storage/hibernate/HibernateRepository.java @@ -22,7 +22,7 @@ public abstract class HibernateRepository implements IRepos * @return {@link Session} */ protected static Session currentSession() { - return HibernateUtil.currentSession(); + return HibernateConfiguration.currentSession(); } protected CriteriaBuilder getBuilder() { diff --git a/src/main/java/org/jbei/ice/storage/hibernate/HibernateUtil.java b/src/main/java/org/jbei/ice/storage/hibernate/HibernateUtil.java deleted file mode 100644 index 3226d8a71..000000000 --- a/src/main/java/org/jbei/ice/storage/hibernate/HibernateUtil.java +++ /dev/null @@ -1,187 +0,0 @@ -package org.jbei.ice.storage.hibernate; - -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.cfg.Configuration; -import org.hibernate.service.ServiceRegistry; -import org.jbei.ice.lib.common.logging.Logger; -import org.jbei.ice.storage.model.*; - -/** - * Helper class to Initialize Hibernate, and obtain new sessions. - * - * @author Zinovii Dmytriv, Timothy Ham, Hector Plahar - */ -public class HibernateUtil { - - // thread safe global object that is instantiated once - private static SessionFactory sessionFactory; - - // singleton - private HibernateUtil() { - } - - /** - * Open a new {@link Session} from the sessionFactory. - * This needs to be closed when done with - * - * @return New Hibernate {@link Session}. - */ - public static Session newSession() { - return getSessionFactory().openSession(); - } - - /** - * @return session bound to context. - */ - protected static Session currentSession() { - return getSessionFactory().getCurrentSession(); - } - - public static void beginTransaction() { - if (!getSessionFactory().getCurrentSession().getTransaction().isActive()) - getSessionFactory().getCurrentSession().beginTransaction(); - } - - public static void commitTransaction() { - Session session = getSessionFactory().getCurrentSession(); - if (session.getTransaction().isActive()) - session.getTransaction().commit(); - session.close(); - } - - public static void rollbackTransaction() { - if (getSessionFactory().getCurrentSession().getTransaction().isActive()) - getSessionFactory().getCurrentSession().getTransaction().rollback(); - } - - /** - * Initialize a in-memory mock database for testing. - */ - public static void initializeMock() { - initialize(Type.MOCK); - } - - /** - * Checks user defined connection properties from a pre-determined location - * and loads it (if available) in configuration - * - * @param configuration hibernate configuration - */ - private static void getConnectionProperties(Configuration configuration) { - // get connection properties from properties file -// Properties connectionProps = new Properties(); -// connectionProps.put("hibernate.connection.url", ""); -// connectionProps.put("hibernate.connection.username", ""); -// connectionProps.put("hibernate.connection.password", ""); -// connectionProps.put("hibernate.search.default.indexBase", ""); -// -// // todo : if available -// configuration.setProperties(connectionProps); - } - - private static synchronized void initialize(Type type) { - if (sessionFactory == null) { - Logger.info("Initializing session factory for type " + type.name()); - final Configuration configuration = new Configuration(); - try { - if (type == Type.MOCK) { - configuration.setProperty("hibernate.connection.url", "jdbc:h2:mem:test"); - configuration.setProperty("hibernate.connection.driver_class", "org.h2.Driver"); - configuration.setProperty("hibernate.connection.username", "sa"); - configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); - configuration.setProperty("hibernate.current_session_context_class", - "org.hibernate.context.internal.ThreadLocalSessionContext"); - configuration.setProperty("hibernate.hbm2ddl.auto", "update"); - configuration.setProperty("hibernate.search.default.directory_provider", - "org.hibernate.search.store.impl.RAMDirectoryProvider"); - } else { - configuration.configure(); // load base configuration - getConnectionProperties(configuration); - } - - ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings( - configuration.getProperties()).build(); - - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Entry.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Plasmid.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Strain.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Part.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.ArabidopsisSeed.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Protein.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Link.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.SelectionMarker.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Sequence.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Feature.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.SequenceFeature.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.SequenceFeatureAttribute.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Comment.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Account.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Attachment.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Sample.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.AccountPreferences.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Group.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.TraceSequence.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.TraceSequenceAlignment.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Configuration.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Storage.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Folder.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Parameter.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.AnnotationLocation.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.BulkUpload.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Permission.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Message.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Preference.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.RemotePartner.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Request.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Audit.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Experiment.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.ShotgunSequence.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.Configuration.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.ApiKey.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.RemoteClientModel.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.RemoteAccessModel.class); - configuration.addAnnotatedClass(org.jbei.ice.storage.model.ManuscriptModel.class); - configuration.addAnnotatedClass(FeatureCurationModel.class); - configuration.addAnnotatedClass(CustomEntryFieldModel.class); - configuration.addAnnotatedClass(CustomEntryFieldOptionModel.class); - configuration.addAnnotatedClass(CustomEntryFieldValueModel.class); - configuration.addAnnotatedClass(SequenceHistoryModel.class); - configuration.addAnnotatedClass(SampleCreateModel.class); - - sessionFactory = configuration.buildSessionFactory(serviceRegistry); - } catch (Throwable e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } - } - - /** - * Retrieve the {@link SessionFactory}. - * - * @return Hibernate sessionFactory - */ - public static SessionFactory getSessionFactory() { - if (sessionFactory == null) { - initialize(Type.NORMAL); - } - return sessionFactory; - } - - public static void close() { - currentSession().disconnect(); - if (sessionFactory != null && !sessionFactory.isClosed()) { - Logger.info("Closing session factory"); - sessionFactory.close(); - } - } - - /** - * initialization types - */ - private enum Type { - NORMAL, MOCK - } -} diff --git a/src/main/java/org/jbei/ice/storage/hibernate/dao/ConfigurationDAO.java b/src/main/java/org/jbei/ice/storage/hibernate/dao/ConfigurationDAO.java index d8b74b83b..180a39820 100644 --- a/src/main/java/org/jbei/ice/storage/hibernate/dao/ConfigurationDAO.java +++ b/src/main/java/org/jbei/ice/storage/hibernate/dao/ConfigurationDAO.java @@ -5,38 +5,38 @@ import org.jbei.ice.lib.dto.ConfigurationKey; import org.jbei.ice.storage.DAOException; import org.jbei.ice.storage.hibernate.HibernateRepository; -import org.jbei.ice.storage.model.Configuration; +import org.jbei.ice.storage.model.ConfigurationModel; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; /** - * Manage {@link Configuration} objects in the database. + * Manage {@link ConfigurationModel} objects in the database. * * @author Timothy Ham, Hector Plahar */ -public class ConfigurationDAO extends HibernateRepository { +public class ConfigurationDAO extends HibernateRepository { @Override - public Configuration get(long id) { - return get(Configuration.class, id); + public ConfigurationModel get(long id) { + return get(ConfigurationModel.class, id); } /** - * Retrieve the {@link Configuration} object with the given {@link org.jbei.ice.lib.dto.ConfigurationKey}. + * Retrieve the {@link ConfigurationModel} object with the given {@link org.jbei.ice.lib.dto.ConfigurationKey}. * * @param key unique configuration key for retrieval * @return Configuration * @throws DAOException */ - public Configuration get(ConfigurationKey key) { + public ConfigurationModel get(ConfigurationKey key) { return get(key.name()); } - public Configuration get(String key) { + public ConfigurationModel get(String key) { try { - CriteriaQuery query = getBuilder().createQuery(Configuration.class); - Root root = query.from(Configuration.class); + CriteriaQuery query = getBuilder().createQuery(ConfigurationModel.class); + Root root = query.from(ConfigurationModel.class); query.where(getBuilder().equal(root.get("key"), key)); return currentSession().createQuery(query).uniqueResult(); } catch (HibernateException e) { diff --git a/src/main/java/org/jbei/ice/storage/hibernate/search/HibernateSearch.java b/src/main/java/org/jbei/ice/storage/hibernate/search/HibernateSearch.java index 55c06f234..4635db5b1 100644 --- a/src/main/java/org/jbei/ice/storage/hibernate/search/HibernateSearch.java +++ b/src/main/java/org/jbei/ice/storage/hibernate/search/HibernateSearch.java @@ -26,7 +26,7 @@ import org.jbei.ice.lib.shared.BioSafetyOption; import org.jbei.ice.lib.shared.ColumnField; import org.jbei.ice.storage.ModelToInfoFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Entry; import java.util.*; @@ -85,103 +85,103 @@ public SearchResults executeSearchNoTerms(String userId, HashMap(Arrays.asList(EntryType.values())); } - Session session = HibernateUtil.getSessionFactory().getCurrentSession(); - int resultCount; - FullTextSession fullTextSession = Search.getFullTextSession(session); - BooleanQuery.Builder builder = new BooleanQuery.Builder(); - QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Entry.class).get(); + try (Session session = HibernateConfiguration.newSession()) { + FullTextSession fullTextSession = Search.getFullTextSession(session); + BooleanQuery.Builder builder = new BooleanQuery.Builder(); + QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Entry.class).get(); - ArrayList except = new ArrayList<>(); - for (EntryType type : EntryType.values()) { - if (entryTypes.contains(type)) - continue; + ArrayList except = new ArrayList<>(); + for (EntryType type : EntryType.values()) { + if (entryTypes.contains(type)) + continue; - except.add(qb.keyword().onField("recordType").matching(type.getName()).createQuery()); - } + except.add(qb.keyword().onField("recordType").matching(type.getName()).createQuery()); + } - // add terms for record types - Query[] queries = new Query[]{}; - Query recordTypeQuery = qb.all().except(except.toArray(queries)).createQuery(); - builder.add(recordTypeQuery, BooleanClause.Occur.FILTER); - - // visibility - Query visibilityQuery = qb.keyword().onField("visibility").matching(Visibility.OK.getValue()).createQuery(); - builder.add(visibilityQuery, BooleanClause.Occur.FILTER); - - // bio safety level - BioSafetyOption option = searchQuery.getBioSafetyOption(); - if (option != null) { - TermContext bslContext = qb.keyword(); - Query biosafetyQuery = - bslContext.onField("bioSafetyLevel").ignoreFieldBridge().matching(option.getIntValue()).createQuery(); - builder.add(biosafetyQuery, BooleanClause.Occur.FILTER); - } + // add terms for record types + Query[] queries = new Query[]{}; + Query recordTypeQuery = qb.all().except(except.toArray(queries)).createQuery(); + builder.add(recordTypeQuery, BooleanClause.Occur.FILTER); - // check filter filters - if (searchQuery.getFieldFilters() != null && !searchQuery.getFieldFilters().isEmpty()) { - for (FieldFilter fieldFilter : searchQuery.getFieldFilters()) { - String searchField = SearchFieldFactory.searchFieldForEntryField(fieldFilter.getField()); - if (StringUtils.isEmpty(searchField)) - continue; + // visibility + Query visibilityQuery = qb.keyword().onField("visibility").matching(Visibility.OK.getValue()).createQuery(); + builder.add(visibilityQuery, BooleanClause.Occur.FILTER); - Query filterQuery = qb.keyword().onField(searchField).matching(fieldFilter.getFilter()).createQuery(); - builder.add(filterQuery, BooleanClause.Occur.MUST); + // bio safety level + BioSafetyOption option = searchQuery.getBioSafetyOption(); + if (option != null) { + TermContext bslContext = qb.keyword(); + Query biosafetyQuery = + bslContext.onField("bioSafetyLevel").ignoreFieldBridge().matching(option.getIntValue()).createQuery(); + builder.add(biosafetyQuery, BooleanClause.Occur.FILTER); } - } - // check if there is a blast results - createBlastFilterQuery(fullTextSession, blastResults, builder); + // check filter filters + if (searchQuery.getFieldFilters() != null && !searchQuery.getFieldFilters().isEmpty()) { + for (FieldFilter fieldFilter : searchQuery.getFieldFilters()) { + String searchField = SearchFieldFactory.searchFieldForEntryField(fieldFilter.getField()); + if (StringUtils.isEmpty(searchField)) + continue; - // wrap Lucene query in a org.hibernate.Query - FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(builder.build(), Entry.class); + Query filterQuery = qb.keyword().onField(searchField).matching(fieldFilter.getFilter()).createQuery(); + builder.add(filterQuery, BooleanClause.Occur.MUST); + } + } - // get sorting values - Sort sort = getSort(searchQuery.getParameters().isSortAscending(), searchQuery.getParameters().getSortField()); - fullTextQuery.setSort(sort); - fullTextQuery.setProjection(ProjectionConstants.ID, "owner"); + // check if there is a blast results + createBlastFilterQuery(fullTextSession, blastResults, builder); - // enable security filter if needed - checkEnableSecurityFilter(userId, fullTextQuery); + // wrap Lucene query in a org.hibernate.Query + FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(builder.build(), Entry.class); - // enable has attachment/sequence/sample (if needed) - checkEnableHasAttribute(fullTextQuery, searchQuery.getParameters()); + // get sorting values + Sort sort = getSort(searchQuery.getParameters().isSortAscending(), searchQuery.getParameters().getSortField()); + fullTextQuery.setSort(sort); + fullTextQuery.setProjection(ProjectionConstants.ID, "owner"); - // set paging params - fullTextQuery.setFirstResult(searchQuery.getParameters().getStart()); - fullTextQuery.setMaxResults(searchQuery.getParameters().getRetrieveCount()); + // enable security filter if needed + checkEnableSecurityFilter(userId, fullTextQuery); - resultCount = fullTextQuery.getResultSize(); - List result = fullTextQuery.list(); + // enable has attachment/sequence/sample (if needed) + checkEnableHasAttribute(fullTextQuery, searchQuery.getParameters()); - LinkedList searchResults = new LinkedList<>(); + // set paging params + fullTextQuery.setFirstResult(searchQuery.getParameters().getStart()); + fullTextQuery.setMaxResults(searchQuery.getParameters().getRetrieveCount()); - // since we are using projection, result is an arraylist of objects - for (Object object : result) { - Object[] objects = (Object[]) object; - long entryId = (Long) objects[0]; - SearchResult searchResult; - if (blastResults != null) { - searchResult = blastResults.get(Long.toString(entryId)); - if (searchResult == null) // this should not really happen since we already filter - continue; - } else { - searchResult = new SearchResult(); - searchResult.setScore(1f); - PartData info = ModelToInfoFactory.createTableView(entryId, null); - info.setOwner((String) objects[1]); - searchResult.setEntryInfo(info); - } + int resultCount = fullTextQuery.getResultSize(); + List result = fullTextQuery.list(); - searchResult.setMaxScore(1f); - searchResults.add(searchResult); - } + LinkedList searchResults = new LinkedList<>(); - SearchResults results = new SearchResults(); - results.setResultCount(resultCount); - results.setResults(searchResults); + // since we are using projection, result is an arraylist of objects + for (Object object : result) { + Object[] objects = (Object[]) object; + long entryId = (Long) objects[0]; + SearchResult searchResult; + if (blastResults != null) { + searchResult = blastResults.get(Long.toString(entryId)); + if (searchResult == null) // this should not really happen since we already filter + continue; + } else { + searchResult = new SearchResult(); + searchResult.setScore(1f); + PartData info = ModelToInfoFactory.createTableView(entryId, null); + info.setOwner((String) objects[1]); + searchResult.setEntryInfo(info); + } - Logger.info(userId + ": obtained " + resultCount + " results for empty query"); - return results; + searchResult.setMaxScore(1f); + searchResults.add(searchResult); + } + + SearchResults results = new SearchResults(); + results.setResultCount(resultCount); + results.setResults(searchResults); + + Logger.info(userId + ": obtained " + resultCount + " results for empty query"); + return results; + } } /** @@ -198,148 +198,150 @@ public SearchResults executeSearchNoTerms(String userId, HashMap blastResults) { - Session session = HibernateUtil.getSessionFactory().getCurrentSession(); - FullTextSession fullTextSession = Search.getFullTextSession(session); + try (Session session = HibernateConfiguration.newSession()) { + FullTextSession fullTextSession = Search.getFullTextSession(session); - QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Entry.class).get(); - Query query = qb.keyword().onField("visibility").matching(Visibility.OK.getValue()).createQuery(); + QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Entry.class).get(); + Query query = qb.keyword().onField("visibility").matching(Visibility.OK.getValue()).createQuery(); - // todo : there is a limit of 1024 boolean clauses so return only return top blast results - BooleanQuery.Builder builder = new BooleanQuery.Builder(); - builder.add(query, BooleanClause.Occur.FILTER); + // todo : there is a limit of 1024 boolean clauses so return only return top blast results + BooleanQuery.Builder builder = new BooleanQuery.Builder(); + builder.add(query, BooleanClause.Occur.FILTER); - // wrap Lucene query in a org.hibernate.Query - Class[] classes = SearchFieldFactory.classesForTypes(searchQuery.getEntryTypes()); - FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(builder.build(), classes); + // wrap Lucene query in a org.hibernate.Query + Class[] classes = SearchFieldFactory.classesForTypes(searchQuery.getEntryTypes()); + FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(builder.build(), classes); - // enable security filter if an admin - checkEnableSecurityFilter(userId, fullTextQuery); + // enable security filter if an admin + checkEnableSecurityFilter(userId, fullTextQuery); - // enable has attachment/sequence/sample (if needed) - checkEnableHasAttribute(fullTextQuery, searchQuery.getParameters()); + // enable has attachment/sequence/sample (if needed) + checkEnableHasAttribute(fullTextQuery, searchQuery.getParameters()); - // bio-safety level - if (searchQuery.getBioSafetyOption() != null) { - TermContext levelContext = qb.keyword(); - Query biosafetyQuery = levelContext.onField("bioSafetyLevel").ignoreFieldBridge() - .matching(searchQuery.getBioSafetyOption().getValue()).createQuery(); - builder.add(biosafetyQuery, BooleanClause.Occur.MUST); - } + // bio-safety level + if (searchQuery.getBioSafetyOption() != null) { + TermContext levelContext = qb.keyword(); + Query biosafetyQuery = levelContext.onField("bioSafetyLevel").ignoreFieldBridge() + .matching(searchQuery.getBioSafetyOption().getValue()).createQuery(); + builder.add(biosafetyQuery, BooleanClause.Occur.MUST); + } - // execute search - fullTextQuery.setProjection("id"); + // execute search + fullTextQuery.setProjection("id"); - // list contains an object array with one Long object - List luceneResult = fullTextQuery.list(); - HashSet resultSet = new HashSet<>(); + // list contains an object array with one Long object + List luceneResult = fullTextQuery.list(); + HashSet resultSet = new HashSet<>(); - // page - for (Object object : luceneResult) { - Long result = (Long) ((Object[]) object)[0]; - resultSet.add(result.toString()); - } + // page + for (Object object : luceneResult) { + Long result = (Long) ((Object[]) object)[0]; + resultSet.add(result.toString()); + } - blastResults.keySet().removeIf(key -> !resultSet.contains(key)); + blastResults.keySet().removeIf(key -> !resultSet.contains(key)); - SearchResult[] searchResults = new SearchResult[count]; - int limit = Math.min((start + count), blastResults.size()); - LinkedList list = new LinkedList<>(Arrays.asList(blastResults.values().toArray(searchResults)) - .subList(start, limit)); + SearchResult[] searchResults = new SearchResult[count]; + int limit = Math.min((start + count), blastResults.size()); + LinkedList list = new LinkedList<>(Arrays.asList(blastResults.values().toArray(searchResults)) + .subList(start, limit)); - SearchResults results = new SearchResults(); - results.setResultCount(blastResults.size()); - results.setResults(list); - return results; + SearchResults results = new SearchResults(); + results.setResultCount(blastResults.size()); + results.setResults(list); + return results; + } } @SuppressWarnings("unchecked") public SearchResults executeSearch(String userId, HashMap terms, SearchQuery searchQuery, HashMap blastResults) { - Session session = HibernateUtil.getSessionFactory().getCurrentSession(); - int resultCount; - FullTextSession fullTextSession = Search.getFullTextSession(session); - BooleanQuery.Builder builder = new BooleanQuery.Builder(); - - // get classes for search - HashSet fields = new HashSet<>(SearchFieldFactory.entryFields(searchQuery.getEntryTypes())); - Class[] classes = SearchFieldFactory.classesForTypes(searchQuery.getEntryTypes()); - - // generate queries for terms filtering stop words - for (Map.Entry entry : terms.entrySet()) { - String term = cleanQuery(entry.getKey()); - if (term.trim().isEmpty() || StandardAnalyzer.STOP_WORDS_SET.contains(term.toLowerCase())) - continue; - - BioSafetyOption safetyOption = searchQuery.getBioSafetyOption(); - generateQueriesForType(fullTextSession, fields, builder, term, entry.getValue(), safetyOption); - } + try (Session session = HibernateConfiguration.newSession()) { + int resultCount; + FullTextSession fullTextSession = Search.getFullTextSession(session); + BooleanQuery.Builder builder = new BooleanQuery.Builder(); + + // get classes for search + HashSet fields = new HashSet<>(SearchFieldFactory.entryFields(searchQuery.getEntryTypes())); + Class[] classes = SearchFieldFactory.classesForTypes(searchQuery.getEntryTypes()); + + // generate queries for terms filtering stop words + for (Map.Entry entry : terms.entrySet()) { + String term = cleanQuery(entry.getKey()); + if (term.trim().isEmpty() || StandardAnalyzer.STOP_WORDS_SET.contains(term.toLowerCase())) + continue; - // check for blast search results filter - createBlastFilterQuery(fullTextSession, blastResults, builder); + BioSafetyOption safetyOption = searchQuery.getBioSafetyOption(); + generateQueriesForType(fullTextSession, fields, builder, term, entry.getValue(), safetyOption); + } - // wrap Lucene query in a org.hibernate.Query - FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(builder.build(), classes); + // check for blast search results filter + createBlastFilterQuery(fullTextSession, blastResults, builder); - // get max score - fullTextQuery.setFirstResult(0); - fullTextQuery.setMaxResults(1); - fullTextQuery.setProjection(FullTextQuery.SCORE); - List result = fullTextQuery.list(); - float maxScore = -1f; - if (result.size() == 1) { - maxScore = (Float) ((Object[]) (result.get(0)))[0]; - } - // end get max score + // wrap Lucene query in a org.hibernate.Query + FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(builder.build(), classes); - // get sorting values - Sort sort = getSort(searchQuery.getParameters().isSortAscending(), searchQuery.getParameters().getSortField()); - fullTextQuery.setSort(sort); + // get max score + fullTextQuery.setFirstResult(0); + fullTextQuery.setMaxResults(1); + fullTextQuery.setProjection(FullTextQuery.SCORE); + List result = fullTextQuery.list(); + float maxScore = -1f; + if (result.size() == 1) { + maxScore = (Float) ((Object[]) (result.get(0)))[0]; + } + // end get max score - // projection (specified properties must be stored in the index @Field(store=Store.YES)) - fullTextQuery.setProjection(FullTextQuery.SCORE, FullTextQuery.ID, "owner"); + // get sorting values + Sort sort = getSort(searchQuery.getParameters().isSortAscending(), searchQuery.getParameters().getSortField()); + fullTextQuery.setSort(sort); - // enable security filter if needed - checkEnableSecurityFilter(userId.toLowerCase(), fullTextQuery); + // projection (specified properties must be stored in the index @Field(store=Store.YES)) + fullTextQuery.setProjection(FullTextQuery.SCORE, FullTextQuery.ID, "owner"); - // check sample - checkEnableHasAttribute(fullTextQuery, searchQuery.getParameters()); + // enable security filter if needed + checkEnableSecurityFilter(userId.toLowerCase(), fullTextQuery); - // set paging params - fullTextQuery.setFirstResult(searchQuery.getParameters().getStart()); - fullTextQuery.setMaxResults(searchQuery.getParameters().getRetrieveCount()); + // check sample + checkEnableHasAttribute(fullTextQuery, searchQuery.getParameters()); - resultCount = fullTextQuery.getResultSize(); + // set paging params + fullTextQuery.setFirstResult(searchQuery.getParameters().getStart()); + fullTextQuery.setMaxResults(searchQuery.getParameters().getRetrieveCount()); - // execute search - result = fullTextQuery.list(); - Logger.info(userId + ": " + resultCount + " results for \"" + searchQuery.getQueryString() + "\""); + resultCount = fullTextQuery.getResultSize(); - LinkedList searchResults = new LinkedList<>(); - for (Object[] objects : (Iterable) result) { - float score = (Float) objects[0]; - Long entryId = (Long) objects[1]; - SearchResult searchResult; - if (blastResults != null) { - searchResult = blastResults.get(Long.toString(entryId)); - if (searchResult == null) // this should not really happen since we already filter - continue; - } else { - searchResult = new SearchResult(); - searchResult.setScore(score); - PartData info = ModelToInfoFactory.createTableView(entryId, null); - info.setOwner((String) objects[2]); - searchResult.setEntryInfo(info); + // execute search + result = fullTextQuery.list(); + Logger.info(userId + ": " + resultCount + " results for \"" + searchQuery.getQueryString() + "\""); + + LinkedList searchResults = new LinkedList<>(); + for (Object[] objects : (Iterable) result) { + float score = (Float) objects[0]; + Long entryId = (Long) objects[1]; + SearchResult searchResult; + if (blastResults != null) { + searchResult = blastResults.get(Long.toString(entryId)); + if (searchResult == null) // this should not really happen since we already filter + continue; + } else { + searchResult = new SearchResult(); + searchResult.setScore(score); + PartData info = ModelToInfoFactory.createTableView(entryId, null); + info.setOwner((String) objects[2]); + searchResult.setEntryInfo(info); + } + + searchResult.setMaxScore(maxScore); + searchResults.add(searchResult); } - searchResult.setMaxScore(maxScore); - searchResults.add(searchResult); + SearchResults results = new SearchResults(); + results.setResultCount(resultCount); + results.setResults(searchResults); + return results; } - - SearchResults results = new SearchResults(); - results.setResultCount(resultCount); - results.setResults(searchResults); - return results; } private void generateQueriesForType(FullTextSession fullTextSession, HashSet fields, diff --git a/src/main/java/org/jbei/ice/storage/model/Configuration.java b/src/main/java/org/jbei/ice/storage/model/ConfigurationModel.java similarity index 90% rename from src/main/java/org/jbei/ice/storage/model/Configuration.java rename to src/main/java/org/jbei/ice/storage/model/ConfigurationModel.java index 79ab75df3..25fba8a63 100644 --- a/src/main/java/org/jbei/ice/storage/model/Configuration.java +++ b/src/main/java/org/jbei/ice/storage/model/ConfigurationModel.java @@ -14,7 +14,7 @@ @Entity @Table(name = "configuration") @SequenceGenerator(name = "configuration_id", sequenceName = "configuration_id_seq", allocationSize = 1) -public class Configuration implements DataModel { +public class ConfigurationModel implements DataModel { @Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "configuration_id") @@ -26,11 +26,11 @@ public class Configuration implements DataModel { @Column(name = "value", length = 1024, nullable = false) private String value; - public Configuration() { + public ConfigurationModel() { super(); } - public Configuration(String key, String value) { + public ConfigurationModel(String key, String value) { setKey(key); setValue(value); } diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index f3726d5ea..60a22af00 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -7,14 +7,6 @@ - org.h2.Driver - jdbc:h2:./db/h2db - sa - - org.hibernate.dialect.H2Dialect - - ./data/lucene-data - 5 20 diff --git a/src/main/webapp/views/footer.html b/src/main/webapp/views/footer.html index 740d485a0..3ac5c2f9d 100644 --- a/src/main/webapp/views/footer.html +++ b/src/main/webapp/views/footer.html @@ -11,7 +11,7 @@
© JBEI ICE Registry 5.9.6
+ class="label label-primary">5.10.0
All rights reserved.
Submit an Issue  |  Help diff --git a/src/test/java/org/jbei/ice/lib/access/RemoteAccessTest.java b/src/test/java/org/jbei/ice/lib/access/RemoteAccessTest.java index d01fff96c..9d69a37cc 100644 --- a/src/test/java/org/jbei/ice/lib/access/RemoteAccessTest.java +++ b/src/test/java/org/jbei/ice/lib/access/RemoteAccessTest.java @@ -9,7 +9,7 @@ import org.jbei.ice.lib.folder.collection.CollectionType; import org.jbei.ice.lib.folder.collection.Collections; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Folder; import org.jbei.ice.storage.model.RemoteAccessModel; @@ -28,13 +28,13 @@ public class RemoteAccessTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -80,4 +80,4 @@ public void testAdd() throws Exception { } Assert.assertTrue(found); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/account/AccountControllerTest.java b/src/test/java/org/jbei/ice/lib/account/AccountControllerTest.java index 516821730..47242805a 100644 --- a/src/test/java/org/jbei/ice/lib/account/AccountControllerTest.java +++ b/src/test/java/org/jbei/ice/lib/account/AccountControllerTest.java @@ -4,7 +4,7 @@ package org.jbei.ice.lib.account; import org.jbei.ice.lib.AccountCreator; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.junit.After; import org.junit.Assert; @@ -22,14 +22,14 @@ public class AccountControllerTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); controller = new AccountController(); } @After public void tearDown() throws Exception { - HibernateUtil.rollbackTransaction(); + HibernateConfiguration.rollbackTransaction(); } @Test diff --git a/src/test/java/org/jbei/ice/lib/account/PreferencesControllerTest.java b/src/test/java/org/jbei/ice/lib/account/PreferencesControllerTest.java index c7b3b85fc..fd5acdec7 100644 --- a/src/test/java/org/jbei/ice/lib/account/PreferencesControllerTest.java +++ b/src/test/java/org/jbei/ice/lib/account/PreferencesControllerTest.java @@ -3,7 +3,7 @@ import org.jbei.ice.lib.AccountCreator; import org.jbei.ice.lib.dto.search.SearchBoostField; import org.jbei.ice.lib.dto.user.PreferenceKey; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Preference; import org.junit.After; @@ -25,14 +25,14 @@ public class PreferencesControllerTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); controller = new PreferencesController(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test diff --git a/src/test/java/org/jbei/ice/lib/account/UserApiKeysTest.java b/src/test/java/org/jbei/ice/lib/account/UserApiKeysTest.java index bbddf22b7..4f9b76aff 100644 --- a/src/test/java/org/jbei/ice/lib/account/UserApiKeysTest.java +++ b/src/test/java/org/jbei/ice/lib/account/UserApiKeysTest.java @@ -3,7 +3,7 @@ import org.jbei.ice.lib.AccountCreator; import org.jbei.ice.lib.dto.access.AccessKey; import org.jbei.ice.lib.dto.common.Results; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.junit.After; import org.junit.Assert; @@ -17,13 +17,13 @@ public class UserApiKeysTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -78,4 +78,4 @@ public void testDeleteKey() throws Exception { Results keys = apiKeys.getKeys(15, 0, "creationTime", true, false); Assert.assertEquals(0, keys.getResultCount()); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/bulkupload/BulkUploadEntriesTest.java b/src/test/java/org/jbei/ice/lib/bulkupload/BulkUploadEntriesTest.java index 88efbdaa5..3ace3d451 100644 --- a/src/test/java/org/jbei/ice/lib/bulkupload/BulkUploadEntriesTest.java +++ b/src/test/java/org/jbei/ice/lib/bulkupload/BulkUploadEntriesTest.java @@ -5,8 +5,8 @@ import org.jbei.ice.lib.dto.entry.PartData; import org.jbei.ice.lib.dto.entry.Visibility; import org.jbei.ice.storage.DAOFactory; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.hibernate.HibernateRepositoryTest; -import org.jbei.ice.storage.hibernate.HibernateUtil; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.BulkUpload; import org.jbei.ice.storage.model.Entry; @@ -268,6 +268,6 @@ public void testCreateOrUpdateEntries() throws Exception { @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } } diff --git a/src/test/java/org/jbei/ice/lib/dto/entry/CustomFieldsTest.java b/src/test/java/org/jbei/ice/lib/dto/entry/CustomFieldsTest.java index b14a37da5..1aa5fbc20 100644 --- a/src/test/java/org/jbei/ice/lib/dto/entry/CustomFieldsTest.java +++ b/src/test/java/org/jbei/ice/lib/dto/entry/CustomFieldsTest.java @@ -3,7 +3,7 @@ import org.jbei.ice.lib.AccountCreator; import org.jbei.ice.lib.TestEntryCreator; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.hibernate.dao.CustomEntryFieldDAO; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.CustomEntryFieldModel; @@ -28,14 +28,14 @@ public class CustomFieldsTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); fields = new CustomFields(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -241,4 +241,4 @@ public void testCreate() throws Exception { // try again, should succeed fields.create(userId, customField); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/entry/EntriesAsCSVTest.java b/src/test/java/org/jbei/ice/lib/entry/EntriesAsCSVTest.java index 06f74bc85..b51433b07 100644 --- a/src/test/java/org/jbei/ice/lib/entry/EntriesAsCSVTest.java +++ b/src/test/java/org/jbei/ice/lib/entry/EntriesAsCSVTest.java @@ -1,6 +1,6 @@ package org.jbei.ice.lib.entry; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -12,17 +12,17 @@ public class EntriesAsCSVTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test public void testSetEntries() throws Exception { } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/entry/EntryHistoryTest.java b/src/test/java/org/jbei/ice/lib/entry/EntryHistoryTest.java index b022848b0..10f60c349 100644 --- a/src/test/java/org/jbei/ice/lib/entry/EntryHistoryTest.java +++ b/src/test/java/org/jbei/ice/lib/entry/EntryHistoryTest.java @@ -4,7 +4,7 @@ import org.jbei.ice.lib.TestEntryCreator; import org.jbei.ice.lib.dto.History; import org.jbei.ice.lib.dto.common.Results; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Plasmid; import org.junit.After; @@ -19,13 +19,13 @@ public class EntryHistoryTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -86,4 +86,4 @@ public void testDeleteAll() throws Exception { history = entryHistory.get(20, 0, true, null); Assert.assertEquals(0, history.getResultCount()); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/entry/EntryLinksTest.java b/src/test/java/org/jbei/ice/lib/entry/EntryLinksTest.java index ce963d0ab..3a4cbdac3 100644 --- a/src/test/java/org/jbei/ice/lib/entry/EntryLinksTest.java +++ b/src/test/java/org/jbei/ice/lib/entry/EntryLinksTest.java @@ -5,7 +5,7 @@ import org.jbei.ice.lib.access.PermissionsController; import org.jbei.ice.lib.dto.access.AccessPermission; import org.jbei.ice.lib.dto.entry.PartData; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Plasmid; import org.jbei.ice.storage.model.Strain; @@ -23,13 +23,13 @@ public class EntryLinksTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -139,4 +139,4 @@ public void testGetParents() throws Exception { EntryLinks plasmid2Links = new EntryLinks(userId, Long.toString(plasmid2.getId())); Assert.assertEquals(1, plasmid2Links.getParents().size()); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/entry/sample/SampleServiceTest.java b/src/test/java/org/jbei/ice/lib/entry/sample/SampleServiceTest.java index bad5a1cdf..8dfd4de81 100644 --- a/src/test/java/org/jbei/ice/lib/entry/sample/SampleServiceTest.java +++ b/src/test/java/org/jbei/ice/lib/entry/sample/SampleServiceTest.java @@ -7,7 +7,7 @@ import org.jbei.ice.lib.dto.sample.PartSample; import org.jbei.ice.lib.dto.sample.SampleType; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Storage; import org.jbei.ice.storage.model.Strain; @@ -30,8 +30,8 @@ public class SampleServiceTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); service = new SampleService(); } @@ -384,6 +384,6 @@ public void testGetSamplesByBarcode() throws Exception { @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/entry/sequence/annotation/AnnotationsTest.java b/src/test/java/org/jbei/ice/lib/entry/sequence/annotation/AnnotationsTest.java index 9bffa1273..9a0366a7a 100644 --- a/src/test/java/org/jbei/ice/lib/entry/sequence/annotation/AnnotationsTest.java +++ b/src/test/java/org/jbei/ice/lib/entry/sequence/annotation/AnnotationsTest.java @@ -7,7 +7,7 @@ import org.jbei.ice.lib.dto.FeaturedDNASequence; import org.jbei.ice.lib.entry.sequence.PartSequence; import org.jbei.ice.lib.parsers.GeneralParser; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.hibernate.dao.SequenceDAO; import org.jbei.ice.storage.hibernate.dao.SequenceFeatureDAO; import org.jbei.ice.storage.model.Account; @@ -29,13 +29,13 @@ public class AnnotationsTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -96,4 +96,4 @@ public void testCurate() throws Exception { " 721 ggaagggatg ctaaggtaga gggtgaacgt tacagaaaag caggctggga agcatatttg\n" + " 781 agaagatgcg gccagcaaaa ctaa\n" + "//"; -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/experiment/ExperimentsTest.java b/src/test/java/org/jbei/ice/lib/experiment/ExperimentsTest.java index a024b101c..bb65dfddb 100644 --- a/src/test/java/org/jbei/ice/lib/experiment/ExperimentsTest.java +++ b/src/test/java/org/jbei/ice/lib/experiment/ExperimentsTest.java @@ -2,7 +2,7 @@ import org.jbei.ice.lib.AccountCreator; import org.jbei.ice.lib.TestEntryCreator; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.junit.After; import org.junit.Assert; @@ -19,13 +19,13 @@ public class ExperimentsTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -131,4 +131,4 @@ public void testDeleteStudy() throws Exception { List studies = experiments.getPartStudies(); Assert.assertTrue(studies.isEmpty()); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/folder/FolderContentsTest.java b/src/test/java/org/jbei/ice/lib/folder/FolderContentsTest.java index e500fa7a0..fb10324cc 100644 --- a/src/test/java/org/jbei/ice/lib/folder/FolderContentsTest.java +++ b/src/test/java/org/jbei/ice/lib/folder/FolderContentsTest.java @@ -10,7 +10,7 @@ import org.jbei.ice.lib.entry.EntrySelectionType; import org.jbei.ice.lib.shared.ColumnField; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Entry; import org.jbei.ice.storage.model.Folder; @@ -29,13 +29,13 @@ public class FolderContentsTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -160,4 +160,4 @@ public FolderDetails createPersonalFolder(String userId, FolderDetails folderDet details.setCanEdit(true); return details; } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/folder/FolderControllerTest.java b/src/test/java/org/jbei/ice/lib/folder/FolderControllerTest.java index 1ba3708b8..459c66def 100644 --- a/src/test/java/org/jbei/ice/lib/folder/FolderControllerTest.java +++ b/src/test/java/org/jbei/ice/lib/folder/FolderControllerTest.java @@ -6,7 +6,7 @@ import org.jbei.ice.lib.dto.folder.FolderDetails; import org.jbei.ice.lib.group.GroupController; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Folder; import org.junit.After; @@ -25,8 +25,8 @@ public class FolderControllerTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); controller = new FolderController(); } @@ -70,6 +70,6 @@ public void testCreateNewFolder() throws Exception { @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } } diff --git a/src/test/java/org/jbei/ice/lib/folder/FolderPermissionsTest.java b/src/test/java/org/jbei/ice/lib/folder/FolderPermissionsTest.java index bbcdbd14c..15e90842d 100644 --- a/src/test/java/org/jbei/ice/lib/folder/FolderPermissionsTest.java +++ b/src/test/java/org/jbei/ice/lib/folder/FolderPermissionsTest.java @@ -4,7 +4,7 @@ import org.jbei.ice.lib.dto.access.AccessPermission; import org.jbei.ice.lib.dto.folder.FolderType; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Folder; import org.junit.After; @@ -19,13 +19,13 @@ public class FolderPermissionsTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -54,4 +54,4 @@ public void testCreateFolderPermission() throws Exception { Assert.assertNotNull(folderPermissions.createPermission(accessPermission)); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/folder/collection/CollectionEntriesTest.java b/src/test/java/org/jbei/ice/lib/folder/collection/CollectionEntriesTest.java index c9771282e..1ce4583db 100644 --- a/src/test/java/org/jbei/ice/lib/folder/collection/CollectionEntriesTest.java +++ b/src/test/java/org/jbei/ice/lib/folder/collection/CollectionEntriesTest.java @@ -7,7 +7,7 @@ import org.jbei.ice.lib.dto.entry.Visibility; import org.jbei.ice.lib.shared.ColumnField; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Entry; import org.junit.After; @@ -22,13 +22,13 @@ public class CollectionEntriesTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.rollbackTransaction(); + HibernateConfiguration.rollbackTransaction(); } @Test @@ -69,4 +69,4 @@ public void testGetEntriesByVisibility() throws Exception { Assert.assertEquals(1, results.getData().size()); Assert.assertEquals(1, results.getResultCount()); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/group/GroupControllerTest.java b/src/test/java/org/jbei/ice/lib/group/GroupControllerTest.java index d749fedf6..b30994870 100644 --- a/src/test/java/org/jbei/ice/lib/group/GroupControllerTest.java +++ b/src/test/java/org/jbei/ice/lib/group/GroupControllerTest.java @@ -4,7 +4,7 @@ import org.jbei.ice.lib.dto.group.GroupType; import org.jbei.ice.lib.dto.group.UserGroup; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Group; import org.junit.*; @@ -20,18 +20,18 @@ public class GroupControllerTest { @BeforeClass public static void setUpBeforeClass() throws Exception { - HibernateUtil.initializeMock(); + HibernateConfiguration.initializeMock(); } @Before public void setUp() throws Exception { - HibernateUtil.beginTransaction(); + HibernateConfiguration.beginTransaction(); controller = new GroupController(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test diff --git a/src/test/java/org/jbei/ice/lib/group/GroupsTest.java b/src/test/java/org/jbei/ice/lib/group/GroupsTest.java index 0c253be67..d79fba086 100644 --- a/src/test/java/org/jbei/ice/lib/group/GroupsTest.java +++ b/src/test/java/org/jbei/ice/lib/group/GroupsTest.java @@ -5,7 +5,7 @@ import org.jbei.ice.lib.dto.group.UserGroup; import org.jbei.ice.lib.dto.web.RemoteUser; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.RemotePartner; import org.junit.After; @@ -20,13 +20,13 @@ public class GroupsTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -131,4 +131,4 @@ public void testUpdate() throws Exception { Assert.assertEquals(1, group.getRemoteMembers().size()); Assert.assertEquals(remoteUser3.getUser().getEmail(), group.getRemoteMembers().get(0).getUser().getEmail()); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/net/RemoteTransferTest.java b/src/test/java/org/jbei/ice/lib/net/RemoteTransferTest.java index 354894f47..9d7f672be 100644 --- a/src/test/java/org/jbei/ice/lib/net/RemoteTransferTest.java +++ b/src/test/java/org/jbei/ice/lib/net/RemoteTransferTest.java @@ -4,7 +4,7 @@ import org.jbei.ice.lib.TestEntryCreator; import org.jbei.ice.lib.dto.entry.PartData; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.hibernate.dao.EntryDAO; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Plasmid; @@ -24,13 +24,13 @@ public class RemoteTransferTest { @Before public void setUp() throws Exception { transfer = new RemoteTransfer(); - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.rollbackTransaction(); + HibernateConfiguration.rollbackTransaction(); } @Test @@ -76,4 +76,4 @@ public void testGetPartsForTransfer() throws Exception { Assert.assertNotNull(transferred); } } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/net/TransferredPartsTest.java b/src/test/java/org/jbei/ice/lib/net/TransferredPartsTest.java index b6ce458f1..a8c1dabf2 100644 --- a/src/test/java/org/jbei/ice/lib/net/TransferredPartsTest.java +++ b/src/test/java/org/jbei/ice/lib/net/TransferredPartsTest.java @@ -4,7 +4,7 @@ import org.jbei.ice.lib.dto.entry.PartData; import org.jbei.ice.lib.dto.entry.Visibility; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Plasmid; import org.jbei.ice.storage.model.Strain; @@ -24,14 +24,14 @@ public class TransferredPartsTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); parts = new TransferredParts(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -105,4 +105,4 @@ private Strain createStrainObject(Account owner) { strain.setCreationTime(new Date()); return strain; } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/net/WebPartnersTest.java b/src/test/java/org/jbei/ice/lib/net/WebPartnersTest.java index e19f300cb..aeb90069a 100644 --- a/src/test/java/org/jbei/ice/lib/net/WebPartnersTest.java +++ b/src/test/java/org/jbei/ice/lib/net/WebPartnersTest.java @@ -5,7 +5,7 @@ import org.jbei.ice.lib.access.TokenVerification; import org.jbei.ice.lib.dto.web.RegistryPartner; import org.jbei.ice.lib.dto.web.RemotePartnerStatus; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.junit.After; import org.junit.Assert; @@ -22,8 +22,8 @@ public class WebPartnersTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); thisPartner = createThisPartnerObject(); @@ -63,7 +63,7 @@ protected String getThisUri() { @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -149,4 +149,4 @@ protected String getThisUri() { } }; } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/lib/search/SearchIndexesTest.java b/src/test/java/org/jbei/ice/lib/search/SearchIndexesTest.java index 86892e0d2..b7783227a 100644 --- a/src/test/java/org/jbei/ice/lib/search/SearchIndexesTest.java +++ b/src/test/java/org/jbei/ice/lib/search/SearchIndexesTest.java @@ -9,7 +9,7 @@ import org.jbei.ice.lib.entry.Entries; import org.jbei.ice.lib.shared.BioSafetyOption; import org.jbei.ice.storage.DAOFactory; -import org.jbei.ice.storage.hibernate.HibernateUtil; +import org.jbei.ice.storage.hibernate.HibernateConfiguration; import org.jbei.ice.storage.model.Account; import org.jbei.ice.storage.model.Entry; import org.junit.After; @@ -28,14 +28,14 @@ public class SearchIndexesTest { @Before public void setUp() throws Exception { - HibernateUtil.initializeMock(); - HibernateUtil.beginTransaction(); + HibernateConfiguration.initializeMock(); + HibernateConfiguration.beginTransaction(); controller = new SearchIndexes(); } @After public void tearDown() throws Exception { - HibernateUtil.commitTransaction(); + HibernateConfiguration.commitTransaction(); } @Test @@ -76,9 +76,9 @@ public void testRunSearch() throws Exception { Assert.assertNotNull(entry); Assert.assertTrue(entry.getId() > 0); - HibernateUtil.commitTransaction(); // commit triggers indexing + HibernateConfiguration.commitTransaction(); // commit triggers indexing - HibernateUtil.beginTransaction(); + HibernateConfiguration.beginTransaction(); SearchQuery query = new SearchQuery(); query.setQueryString("testPlasmid"); SearchResults results = controller.runSearch(account.getEmail(), query); diff --git a/src/test/java/org/jbei/ice/storage/hibernate/HibernateRepositoryTest.java b/src/test/java/org/jbei/ice/storage/hibernate/HibernateRepositoryTest.java index a5a63db3f..16425eab9 100644 --- a/src/test/java/org/jbei/ice/storage/hibernate/HibernateRepositoryTest.java +++ b/src/test/java/org/jbei/ice/storage/hibernate/HibernateRepositoryTest.java @@ -8,16 +8,16 @@ public class HibernateRepositoryTest { @BeforeClass public static void runOnce() { - HibernateUtil.initializeMock(); + HibernateConfiguration.initializeMock(); } @Before public void setUp() throws Exception { - HibernateUtil.beginTransaction(); + HibernateConfiguration.beginTransaction(); } @After public void tearDown() throws Exception { - HibernateUtil.rollbackTransaction(); + HibernateConfiguration.rollbackTransaction(); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jbei/ice/storage/hibernate/dao/ConfigurationDAOTest.java b/src/test/java/org/jbei/ice/storage/hibernate/dao/ConfigurationDAOTest.java index 6b4e35883..28e71db5e 100644 --- a/src/test/java/org/jbei/ice/storage/hibernate/dao/ConfigurationDAOTest.java +++ b/src/test/java/org/jbei/ice/storage/hibernate/dao/ConfigurationDAOTest.java @@ -2,7 +2,7 @@ import org.jbei.ice.lib.dto.ConfigurationKey; import org.jbei.ice.storage.hibernate.HibernateRepositoryTest; -import org.jbei.ice.storage.model.Configuration; +import org.jbei.ice.storage.model.ConfigurationModel; import org.junit.Assert; import org.junit.Test; @@ -15,7 +15,7 @@ public class ConfigurationDAOTest extends HibernateRepositoryTest { @Test public void testSave() throws Exception { - Configuration config = new Configuration(); + ConfigurationModel config = new ConfigurationModel(); config.setKey("foo"); config.setValue("bar"); config = dao.create(config); @@ -25,7 +25,7 @@ public void testSave() throws Exception { @Test public void testGet() throws Exception { - Configuration config = new Configuration(); + ConfigurationModel config = new ConfigurationModel(); config.setKey(ConfigurationKey.NEW_REGISTRATION_ALLOWED.name()); config.setValue("true"); config = dao.create(config);