Skip to content

Commit

Permalink
Merge branch '5.10.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
hplahar committed May 6, 2022
2 parents d3539fd + c35836a commit 5fe4b5a
Show file tree
Hide file tree
Showing 47 changed files with 730 additions and 581 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<groupId>org.jbei</groupId>
<artifactId>ice</artifactId>
<packaging>war</packaging>
<version>5.9.6</version>
<version>5.10.0</version>
<name>ice</name>
<description>Inventory of Composable Elements (ICE) for Synthetic Biology</description>
<repositories>
Expand Down
154 changes: 153 additions & 1 deletion src/main/java/org/jbei/ice/ApplicationInitialize.java
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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<Path> 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
Expand All @@ -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();
Expand All @@ -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);
}
}
}
22 changes: 11 additions & 11 deletions src/main/java/org/jbei/ice/lib/config/ConfigurationSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -80,16 +80,16 @@ public List<Setting> 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);
Expand All @@ -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) {
Expand All @@ -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();
Expand Down Expand Up @@ -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());
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/jbei/ice/lib/config/SiteSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/jbei/ice/lib/dto/ConfigurationKey.java
Original file line number Diff line number Diff line change
Expand Up @@ -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"),

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/org/jbei/ice/lib/executor/TaskHandler.java
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/jbei/ice/lib/net/RemoteEntriesAsCSV.java
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ protected void writeLocalEntries(List<Long> entries, List<EntryFieldLabel> 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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -18,6 +18,6 @@ public class IceRequestFilter implements ContainerRequestFilter {

@Override
public void filter(ContainerRequestContext requestContext) {
HibernateUtil.beginTransaction();
HibernateConfiguration.beginTransaction();
}
}
Loading

0 comments on commit 5fe4b5a

Please sign in to comment.