diff --git a/webapp/build.xml b/webapp/build.xml index 4d0989a71..40c15b80c 100644 --- a/webapp/build.xml +++ b/webapp/build.xml @@ -161,9 +161,7 @@ - - - + @@ -208,6 +206,9 @@ + + diff --git a/webapp/config/default.log4j.properties b/webapp/config/default.log4j.properties index a54f7a2e7..e4a945ab3 100644 --- a/webapp/config/default.log4j.properties +++ b/webapp/config/default.log4j.properties @@ -19,10 +19,11 @@ log4j.appender.AllAppender.MaxBackupIndex=10 log4j.appender.AllAppender.layout=org.apache.log4j.PatternLayout log4j.appender.AllAppender.layout.ConversionPattern=%p %t %c - %m%n -log4j.logger.org.apache.catalina=INFO, AllAppender -log4j.logger.org.diretwebremoting=ERROR, AllAppender +log4j.logger.org.apache.catalina=INFO +log4j.logger.org.diretwebremoting=ERROR -#log4j.logger.edu.cornell.mannlib.vitro.webapp.auth=INFO, AllAppender +log4j.logger.edu.cornell.mannlib.vitro.webapp.ConfigurationProperties=INFO +#log4j.logger.edu.cornell.mannlib.vitro.webapp.auth=INFO #### setup a debugging logger log4j.appender.DebuggingAppender=org.apache.log4j.FileAppender diff --git a/webapp/config/example.LuceneSetup.properties b/webapp/config/example.LuceneSetup.properties deleted file mode 100644 index 38481ab25..000000000 --- a/webapp/config/example.LuceneSetup.properties +++ /dev/null @@ -1,11 +0,0 @@ -#this is an example of what needs to be in this -#file to setup the lucene index directory -# -# The default location is /usr/local/lucene/vitrodefault - -#You could hard code the location like this: -#LuceneSetup.indexDir=/usr/local/lucene/example - -#this line will be setup by ant to work for clones -#if you hardcode the dir, this line should be commented out -LuceneSetup.indexDir=${luceneIndexDir} diff --git a/webapp/config/example.connection.properties b/webapp/config/example.connection.properties deleted file mode 100755 index e30b647ea..000000000 --- a/webapp/config/example.connection.properties +++ /dev/null @@ -1,80 +0,0 @@ -################################################################################ -# DataSource properties file -################################################################################ - -######################### DataSource Properties ################################ - -VitroConnection.DataSource.url=jdbc:mysql://localhost/vitro -VitroConnection.DataSource.username=vitroweb -VitroConnection.DataSource.password=vitrovitro - -####################### Other Important Properties ############################# - -# CHANGE the following property unless you're using Cornell's VIVO ontology -Vitro.defaultNamespace=http://vivo.library.cornell.edu/ns/0.1# - -# Uncomment this next line and specify an SMTP host to activate the Contact Us form -#Vitro.smtpHost= - -################################################################################ - - - - - - - - - - - - - -# maximum number of connections to the db server -# This must not be greater than the mysql max_connection parameter. -# defaults to 40 -#VitroConnection.DataSource.MaxActive=40 - -# maximum number of connections to the db server to keep -# around when nothing is happening. -# defaults to 10 -#VitroConnection.DataSource.MaxIdle=10 - -# Time to wait in msec for a result from the sql server -# defaults to 10000 -#VitroConnection.DataSource.MaxWait=10000 - -# query to use to test to see if a connection to the db server is live. -# defaults to SELECT 1 -#VitroConnection.DataSource.ValidationQuery=SELECT 1 - -# should the connection pool test the connections it gets from the pool? -#defaults to true -#VitroConnection.DataSource.TestOnBorrow=true - -# should the connection pool test connections it puts back in pool? -#defaults to true -#VitroConnection.DataSource.TestOnReturn=true - -# Nnumber of milliseconds to sleep between runs of the idle object -# evictor thread. When non-positive, no idle object evictor thread will -# be run. defaults to 30min -#VitroConnection.DataSource.TimeBetweenEvictions= - -# The number of objects to examine during each -# run of the idle object evictor thread (if any). -# defaults to 3 -#VitroConnection.DataSource.TestsPerEviction=3 - -# The minimum amount of time -# an object may sit idle in the pool before it is eligable for eviction -# by the idle object evictor (if any). -# defaults to 30min -#VitroConnection.DataSource.MinEvictionIdleTime= - -################################################ # other notes: -# The file checked into source control is example.connection.properties so -# that if you have a connection.properties on your machine it will not be -# under source control. This is useful so that your customizations for your -# database setup are less likely to be checked into source control and then -# overwrite other folks' customizations. diff --git a/webapp/config/example.deploy.properties b/webapp/config/example.deploy.properties new file mode 100644 index 000000000..57689df32 --- /dev/null +++ b/webapp/config/example.deploy.properties @@ -0,0 +1,48 @@ +# ----------------------------------------------------------------------------- +# +# VIVO deployment properties +# +# This file is provided as example.deploy.properties. +# +# Save a copy of this file as deploy.properties, and edit the properties as +# needed for your deployment. +# +# ----------------------------------------------------------------------------- + +# +# The location where the VIVO application will store uploaded files +# (usually images). You should arrange for these files to be backed up in some +# way. +# +UploadImagesServlet.sourceDirName = /usr/local/vivo/data/uploads + +# +# The location where the VIVO application will create its Lucene search +# index. +# +LuceneSetup.indexDir = /usr/local/vivo/data/luceneIndex + +# +# This namespace will be used when generating URIs for objects created in the +# editor. Change it to reflect your own domain. For example, Cornell's +# namespace is http://vivo.cornell.edu/individual/ +# +# Note: it is essential that this namespace end with a trailing slash. +# +Vitro.defaultNamespace = http://vitro.mydomain.edu/individual/ + +# +# SMTP host which the "Contact Us" form can use to send mail. If this is left +# empty, the "Contact Us" form will be disabled. +# +#Vitro.smtpHost = + +# +# The basic parameters for a MySQL database connection. Change the end of the +# URL to reflect your database name (if it is not "vitro"). Change the username +# and password to match the authorized user you created in MySQL. +# +VitroConnection.DataSource.url = jdbc:mysql://localhost/vitro +VitroConnection.DataSource.username = vitroweb +VitroConnection.DataSource.password = vitrovitro + diff --git a/webapp/config/example.upload.properties b/webapp/config/example.upload.properties deleted file mode 100644 index 38741b8ab..000000000 --- a/webapp/config/example.upload.properties +++ /dev/null @@ -1,26 +0,0 @@ -# The UploadImagesServlet will upload the images to a directory -# that is under tomcat and serve them from there. -# This causes a problem when the tomcat/webapps dir is deleted -# or deployed because you will lose all the images that the -# curators have uploaded. We deal with this by copying -# the files to another directory, one that is under version control. - -# This property indicates which non-tomcat directory to save the images in. -# ${uploadDir} is defined in the main build.xml via the following statements: -# -# -# -# -# -# But, this value will be replaced by the Vitro/clones/build.xml -# to point to the clones/{clone}/modifications directory based on the following -# -# -# -# -# The UploadImagesServlet.getSourceDirName() method then looks at this parameter -# in the upload.properties file, which file is stuck by the clones/build.xml file -# into the clone's modifications/WEB-INF/classes directory: -UploadImagesServlet.sourceDirName=${uploadDir} - - diff --git a/webapp/config/web.xml b/webapp/config/web.xml index d79070fdd..17709593a 100644 --- a/webapp/config/web.xml +++ b/webapp/config/web.xml @@ -17,12 +17,13 @@ jdbc/vitro/connectionType + How to get a DataSource, Valid values: + SERVER_XML_POOL gets a named DataSource connection from the JNDI context, + most likely that was set up tomcat/conf/server.xml + PROPERTIES_FILE_POOL makes a DataSource using properties from a file that + is pointed to by the JNDI name "java:comp/env/path.configuration" + (set in the Tomcat context). + --> java.lang.String PROPERTIES_FILE_POOL diff --git a/webapp/context.xml b/webapp/context.xml new file mode 100644 index 000000000..3afa6f122 --- /dev/null +++ b/webapp/context.xml @@ -0,0 +1,14 @@ + + + + diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ConfigurationProperties.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ConfigurationProperties.java new file mode 100644 index 000000000..2435a4477 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ConfigurationProperties.java @@ -0,0 +1,144 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + +import org.apache.log4j.Logger; + +/** + * Loads the configuration properties from a properties file. The path to the + * file is specified an an Environment name in the Context, like this: + * + *
+ * <Context override="true">
+ *     <Environment name="path.configuration" 
+ *         value="/wherever/the/file/lives/deploy.properties"
+ *         type="java.lang.String" 
+ *         override="false" />
+ * </Context>
+ * 
+ * + * This initializer will look for a file at this path. If it does not find one, + * it will look for a resource at this path. So, one might reasonable set this + * to a value like /usr/local/vitro/stuff/deploy.properties for a + * file, or like deploy.properties for a resource in the classpath. + * + * @author jeb228 + */ +public class ConfigurationProperties { + private static final Logger LOG = Logger + .getLogger(ConfigurationProperties.class); + + /** + * The name of the JNDI environment mapping for the path to the + * configuration file (or resource). + */ + private static final String PATH_CONFIGURATION = "path.configuration"; + private static volatile Map theMap; + + static { + try { + // Obtain our environment naming context + Context initCtx = new InitialContext(); + Context envCtx = (Context) initCtx.lookup("java:comp/env"); + + // Get the name of the configuration properties file. + String configPath = (String) envCtx.lookup(PATH_CONFIGURATION); + if (configPath == null) { + throw new IllegalStateException( + "Could not find a JNDI Environment naming for '" + + PATH_CONFIGURATION + "'."); + } + + InputStream inStream = null; + // Try to find this as a file. + File file = new File(configPath); + try { + inStream = new FileInputStream(file); + } catch (FileNotFoundException e) { + inStream = null; + } + + // If no file, try to find it as a resource. + if (inStream == null) { + inStream = ConfigurationProperties.class.getClassLoader() + .getResourceAsStream(configPath); + } + + // If neither file nor resource, give up. + if (inStream == null) { + throw new IllegalArgumentException( + "Failed to find a configuration properties file at '" + + file.getAbsolutePath() + + "', or a resource at '" + configPath + "'"); + } + + // Load a properties object - it will handle the syntax of the file. + Properties props = new Properties(); + try { + props.load(inStream); + } catch (IOException e) { + throw new IllegalStateException("Problem while reading the " + + "configuration properties file at '" + configPath + + "'", e); + } + + // It's awkward to copy from Properties to a Map. + Map newMap = new HashMap(); + for (Enumeration keys = props.keys(); keys.hasMoreElements();) { + String key = (String) keys.nextElement(); + newMap.put(key, props.getProperty(key)); + } + + LOG.info("Configuration properties are: " + newMap); + + // Save an unmodifiable version of the Map + theMap = Collections.unmodifiableMap(newMap); + } catch (NamingException e) { + throw new IllegalStateException(e); + } + + } + + /** + * Get an unmodifiable copy of the map of configuration properties. + */ + public static Map getMap() { + return theMap; + } + + /** + * Get the value of the specified property, or null if the + * property has not been assigned a value. + */ + public static String getProperty(String key) { + return theMap.get(key); + } + + /** + * Get the value of the specified property, or use the default value if the + * property has not been assigned a value. + */ + public static String getProperty(String key, String defaultValue) { + String value = theMap.get(key); + if (value == null) { + return defaultValue; + } else { + return value; + } + } +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/CommentsController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/CommentsController.java index 1916910c0..586c67d56 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/CommentsController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/CommentsController.java @@ -33,7 +33,8 @@ public class CommentsController extends VitroHttpServlet{ if (!ContactMailServlet.isSmtpHostConfigured()) { request.setAttribute("title", "Comments and Feedback Form"); request.setAttribute("bodyJsp", "/contact_err.jsp");// <<< this is where the body gets set - request.setAttribute("ERR","This application has not yet been configured to send mail -- smtp host has not been specified in connection.properties"); + request.setAttribute("ERR","This application has not yet been configured to send mail -- " + + "smtp host has not been specified in the configuration properties file."); RequestDispatcher errd = request.getRequestDispatcher(Controllers.BASIC_JSP); errd.forward(request, response); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/ContactMailServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/ContactMailServlet.java index 424fe9770..895e2c230 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/ContactMailServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/ContactMailServlet.java @@ -2,12 +2,8 @@ package edu.cornell.mannlib.vitro.webapp.controller; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; -import java.io.InputStream; import java.io.PrintWriter; import java.util.Calendar; import java.util.Date; @@ -22,31 +18,29 @@ import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.log4j.Logger; -import com.hp.hpl.jena.ontology.OntModel; -import edu.cornell.mannlib.vitro.webapp.auth.policy.JenaNetidPolicy.ContextSetup; +import edu.cornell.mannlib.vitro.webapp.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.beans.Portal; -import edu.cornell.mannlib.vitro.webapp.controller.BrowseController.RebuildGroupCacheThread; public class ContactMailServlet extends VitroHttpServlet { + private static final Logger LOG = Logger.getLogger(ContactMailServlet.class); + public static HttpServletRequest request; public static HttpServletRequest response; - protected final static String CONNECTION_PROP_LOCATION = "/WEB-INF/classes/connection.properties"; private static String smtpHost = null; private static final Log log = LogFactory.getLog(ContactMailServlet.class.getName()); public void init(ServletConfig servletConfig) throws javax.servlet.ServletException { super.init(servletConfig); - ServletContext sContext = servletConfig.getServletContext(); - smtpHost = getSmtpHostFromPropertiesFile(sContext.getRealPath(CONNECTION_PROP_LOCATION)); + smtpHost = getSmtpHostFromProperties(); } public static boolean isSmtpHostConfigured() { @@ -56,43 +50,15 @@ public class ContactMailServlet extends VitroHttpServlet { return true; } - private String getSmtpHostFromPropertiesFile(final String filename){ - - if (filename == null || filename.length() <= 0) { - throw new Error( - "To establish the Contact Us mail capability you must " - + "specify an SMTP server host name in the " - + "connection.properties file along with the " - + "database connection parameters."); - - } - - File propF = new File(filename ); - InputStream is; - try { - is = new FileInputStream(propF); - } catch (FileNotFoundException e) { - log.error("Could not load file "+filename); - throw new Error("Could not load file " + filename - + '\n' + e.getMessage()); - } - - Properties dbProps = new Properties(); - try { - dbProps.load(is); - String host = dbProps.getProperty("Vitro.smtpHost"); - /* doesn't display in catalina.out, not sure why -if (host!=null && !host.equals("")){ - System.out.println("Found Vitro.smtpHost value of "+host+" in "+filename); -} else { - System.out.println("No Vitro.smtpHost specified in "+filename); -} */ - return (host != null && host.length()>0) ? host : null; - } catch (IOException e) { - throw new Error("Could not load any properties from file " + filename + '\n' - + e.getMessage()); - } - } + private String getSmtpHostFromProperties() { + String host = ConfigurationProperties.getProperty("Vitro.smtpHost"); + if (host != null && !host.equals("")) { + LOG.info("Found Vitro.smtpHost value of " + host); + } else { + System.out.println("No Vitro.smtpHost specified"); + } + return (host != null && host.length() > 0) ? host : null; + } public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { @@ -104,7 +70,8 @@ if (host!=null && !host.equals("")){ String status = null; // holds the error status if (smtpHost==null || smtpHost.equals("")){ - status = "This application has not yet been configured to send mail -- smtp host has not been identified in connection.properties"; + status = "This application has not yet been configured to send mail " + + "-- smtp host has not been identified in the Configuration Properties file."; response.sendRedirect( "test?bodyJsp=" + errpage + "&ERR=" + status + "&home=" + portal.getPortalId() ); return; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java index f1983cffa..bf3d0cb00 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java @@ -4,7 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.controller; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; @@ -31,12 +30,11 @@ import org.apache.commons.logging.LogFactory; import com.hp.hpl.jena.ontology.OntModel; +import edu.cornell.mannlib.vitro.webapp.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement; import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatementImpl; import edu.cornell.mannlib.vitro.webapp.beans.Individual; -import edu.cornell.mannlib.vitro.webapp.controller.edit.N3MultiPartUpload; -import edu.cornell.mannlib.vitro.webapp.controller.edit.N3MultiPartUpload.PostUpload; import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; @@ -54,7 +52,6 @@ import fedora.server.types.gen.Datastream; */ public class FedoraDatastreamController extends VitroHttpServlet implements Constants{ private static String FEDORA_PROPERTIES = "/WEB-INF/fedora.properties"; - private static String FEDORA_FOXML_1_1 = "info:fedora/fedora-system:FOXML-1.1"; private static String DEFAULT_DSID = "DS1"; private String fedoraUrl = null; @@ -71,7 +68,6 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons private static String fileUriPrefix = DEFAULT_FILE_URI_PREFIX; private static String baseDirectoryForFiles = DEFAULT_BASE_DIR; private static int maxFileSize = DEFAULT_MAX_SIZE; - private static PostUpload postUpload = null; /** * The get will present a form to the user. @@ -394,59 +390,23 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons } } - public void init() throws ServletException { - super.init(); - String realPropFile = getServletContext().getRealPath( - N3MultiPartUpload.FILE_UPLOAD_PROP_FILE); - File propF = new File(realPropFile); - if (propF != null && propF.exists() && propF.isFile()) { - if (!propF.canRead()) { - log.error("There is a file upload configuration file at " - + realPropFile + " but is is not readable"); - return; - } + public void init() throws ServletException { + super.init(); - InputStream is; - try { - is = new FileInputStream(propF); - } catch (FileNotFoundException e) { - log.error("Could not load file " + realPropFile, e); - return; - } + fileUriPrefix = ConfigurationProperties.getProperty( + "n3.defaultUriPrefix", DEFAULT_FILE_URI_PREFIX); + baseDirectoryForFiles = ConfigurationProperties.getProperty( + "n3.baseDirectoryForFiles", DEFAULT_BASE_DIR); - Properties props = new Properties(); - try { - props.load(is); - is.close(); - } catch (IOException e) { - log.error( - "could not load properties from file " + realPropFile, - e); - } - fileUriPrefix = props.getProperty("defaultUriPrefix", - DEFAULT_FILE_URI_PREFIX); - baseDirectoryForFiles = props.getProperty("baseDirectoryForFiles", - DEFAULT_BASE_DIR); - -// String postUploadProcess = props.getProperty("postUploadProcess"); -// System.out.println("Attempting to load postUploadProcess " -// + postUploadProcess); -// postUpload = getPostUpload(postUploadProcess); - - String maxSize = props.getProperty("maxSize", Long - .toString(DEFAULT_MAX_SIZE)); - try { - maxFileSize = Integer.parseInt(maxSize); - } catch (NumberFormatException nfe) { - log.error(nfe); - maxFileSize = DEFAULT_MAX_SIZE; - } - } else { - System.out - .println("No properties file found for N3MultiPartUpload at " - + realPropFile); - } - } + String maxSize = ConfigurationProperties.getProperty("n3.maxSize", Long + .toString(DEFAULT_MAX_SIZE)); + try { + maxFileSize = Integer.parseInt(maxSize); + } catch (NumberFormatException nfe) { + log.error(nfe); + maxFileSize = DEFAULT_MAX_SIZE; + } + } private void setup(OntModel model, ServletContext context) { this.configurationStatus = ""; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java index a80489584..fa3a455bd 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java @@ -9,8 +9,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -45,7 +43,7 @@ import com.hp.hpl.jena.shared.Lock; import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDFS; -import edu.cornell.mannlib.vitro.webapp.controller.FedoraDatastreamController; +import edu.cornell.mannlib.vitro.webapp.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent; @@ -96,44 +94,18 @@ public class N3MultiPartUpload extends VitroHttpServlet { @Override public void init() throws ServletException { super.init(); - String realPropFile = getServletContext().getRealPath( - FILE_UPLOAD_PROP_FILE); - File propF = new File(realPropFile); - if (propF != null && propF.exists() && propF.isFile()) { - if (!propF.canRead()) { - log.error("There is a file upload configuration file at " - + realPropFile + " but is is not readable"); - return; - } - - InputStream is; - try { - is = new FileInputStream(propF); - } catch (FileNotFoundException e) { - log.error("Could not load file " + realPropFile, e); - return; - } - - Properties props = new Properties(); - try { - props.load(is); - is.close(); - } catch (IOException e) { - log.error( - "could not load properties from file " + realPropFile, - e); - } - fileUriPrefix = props.getProperty("defaultUriPrefix", + + fileUriPrefix = ConfigurationProperties.getProperty("n3.defaultUriPrefix", DEFAULT_FILE_URI_PREFIX); - baseDirectoryForFiles = props.getProperty("baseDirectoryForFiles", + baseDirectoryForFiles = ConfigurationProperties.getProperty("n3.baseDirectoryForFiles", DEFAULT_BASE_DIR); - String postUploadProcess = props.getProperty("postUploadProcess"); + String postUploadProcess = ConfigurationProperties.getProperty("n3.postUploadProcess"); System.out.println("Attempting to load postUploadProcess " + postUploadProcess); postUpload = getPostUpload(postUploadProcess); - String maxSize = props.getProperty("maxSize", Long + String maxSize = ConfigurationProperties.getProperty("n3.maxSize", Long .toString(DEFAULT_MAX_SIZE)); try { maxFileSize = Integer.parseInt(maxSize); @@ -141,11 +113,6 @@ public class N3MultiPartUpload extends VitroHttpServlet { log.error(nfe); maxFileSize = DEFAULT_MAX_SIZE; } - } else { - System.out - .println("No properties file found for N3MultiPartUpload at " - + realPropFile); - } } @Override @@ -624,8 +591,6 @@ public class N3MultiPartUpload extends VitroHttpServlet { static Random random = new Random(); - public static final String FILE_UPLOAD_PROP_FILE = "/WEB-INF/N3MultiPartUpload.properties"; - private static Property FILE_LOCATION_PROP = ResourceFactory .createProperty(VitroVocabulary.FILE_LOCATION); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/UploadImagesServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/UploadImagesServlet.java index 36c18dbfd..f9a8a6c3c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/UploadImagesServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/UploadImagesServlet.java @@ -31,6 +31,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import edu.cornell.mannlib.vedit.beans.LoginFormBean; +import edu.cornell.mannlib.vitro.webapp.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; @@ -42,10 +43,6 @@ public class UploadImagesServlet extends VitroHttpServlet { private static final Log log = LogFactory.getLog(UploadImagesServlet.class.getName()); private String sourceDirName; // all uploaded images are copied to the source directory, not just the application context private String websiteDirName; // the application context - private String webAppName; // the name of the application context (e.g., vivo, usaep) - - private static String UPLOAD_SERVLET_PROPERTIES = "/upload.properties"; - private static String UPLOAD_SERVLET_PROPERTIES_WIN="\\upload.properties"; /** * Notice that init() gets called the first time the servlet is requested, @@ -57,15 +54,6 @@ public class UploadImagesServlet extends VitroHttpServlet { // something like: /usr/local/tomcat/webapps/vivo websiteDirName = getServletContext().getRealPath(""); - //get the last directory, which should be the webapp name. - String[] dirs = new String[0]; - if (File.separator.equals("\\")) { - dirs = websiteDirName.split("\\\\"); - } else { - dirs = websiteDirName.split(File.separator); - } - webAppName = dirs[dirs.length-1]; - // something like: /usr/local/src/Vitro/dream/common/web try{ sourceDirName = getSourceDirName(); @@ -546,24 +534,9 @@ public class UploadImagesServlet extends VitroHttpServlet { * @throws IOException */ private String getSourceDirName() throws IOException{ - Properties props = new Properties(); - InputStream raw = this.getClass().getResourceAsStream( UPLOAD_SERVLET_PROPERTIES ); - if (raw == null) { - raw = this.getClass().getResourceAsStream( UPLOAD_SERVLET_PROPERTIES_WIN ); - if (raw == null) - throw new IOException("UploadImagesServlet.getSourceDirName()" + - " Failed to find resource: " + UPLOAD_SERVLET_PROPERTIES ); - } - try{ - props.load( raw ); - } catch (Exception ex){ - throw new IOException("unable to load upload.properties file: " + ex.getMessage()); - } finally { - raw.close(); - } - String dirName = props.getProperty("UploadImagesServlet.sourceDirName"); + String dirName = ConfigurationProperties.getProperty("UploadImagesServlet.sourceDirName"); if( dirName == null ) { - log.error("getSourceDirName(): property sourceDirName not defined in upload.properties"); + log.error("getSourceDirName(): property sourceDirName not defined in configuration properties"); } else { File dir = new File(dirName); if(!dir.exists()) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/lucene/LuceneSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/lucene/LuceneSetup.java index 2aae2a797..0e7e27b7e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/lucene/LuceneSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/lucene/LuceneSetup.java @@ -4,11 +4,9 @@ package edu.cornell.mannlib.vitro.webapp.search.lucene; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.util.ArrayList; import java.util.HashSet; import java.util.List; -import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; @@ -18,6 +16,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.search.BooleanQuery; +import edu.cornell.mannlib.vitro.webapp.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.beans.BaseResourceBean.RoleLevel; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.filtering.WebappDaoFactoryFiltering; @@ -55,13 +54,13 @@ public class LuceneSetup implements javax.servlet.ServletContextListener { /** * Gets run to set up DataSource when the webapp servlet context gets created. */ - @SuppressWarnings({ "static-access", "unchecked" }) + @SuppressWarnings("unchecked") public void contextInitialized(ServletContextEvent sce) { try { ServletContext context = sce.getServletContext(); log.info("**** Running "+this.getClass().getName()+".contextInitialized()"); - indexDir = getIndexDirName(sce.getServletContext()); + indexDir = getIndexDirName(); log.info("Directory of full text index: " + indexDir ); setBoolMax(); @@ -135,62 +134,40 @@ public class LuceneSetup implements javax.servlet.ServletContextListener { BooleanQuery.setMaxClauseCount(16384); } - /** Directory to store lucene index use when none is specified. */ - private String DEFAULT_INDEX_DIR = "/fullTextIndex"; - - /** name of the properties file to look for in the 'resources' */ - private String LUCENE_PROPERTIES = "/LuceneSetup.properties"; - - /** - * Gets the name of the directory to store the lucene index in. - * This is stored in a file named LuceneSetup.properties - * which should be on the classpath in the default package. - * That file should have a property named 'LuceneSetup.indexDir' - * which has the directory to store the lucene index for this - * clone in. If the property file is not found or the - * LuceneSetup.indexDir is not found, then DEFAULT_INDEX_DIR will - * be used. - * @param servletContext - * @return a string that is the directory to store the lucene - * index. - * - * @throws IOException - */ - private String getIndexDirName(ServletContext servletContext) { - String dirName = null; - - // Check if we can get the properties file - Properties props = new Properties(); - InputStream raw = this.getClass().getResourceAsStream( LUCENE_PROPERTIES ); - if (raw != null){ - try{ - props.load( raw ); - }catch (Exception ex){ - log.info("Could not load properties file " + LUCENE_PROPERTIES); - props = null; - }finally { - try{ raw.close(); } - catch(Exception ex){} - } - - // Check if we can get the indexDir property from the file - if( props != null ){ - dirName = props.getProperty("LuceneSetup.indexDir"); - if( dirName == null ){ - log.info("LuceneSetup.indexDir not found in file " + LUCENE_PROPERTIES + " using default."); - } - } - } - - if( dirName == null ){ - dirName = servletContext.getRealPath(DEFAULT_INDEX_DIR); - File dir = new File( dirName); - if( !dir.exists() ) - dir.mkdir(); - } - - return dirName; - } + /** + * Gets the name of the directory to store the lucene index in. The + * {@link ConfigurationProperties} should have a property named + * 'LuceneSetup.indexDir' which has the directory to store the lucene index + * for this clone in. If the property is not found, an exception will be + * thrown. + * + * @return a string that is the directory to store the lucene index. + * @throws IllegalStateException + * if the property is not found. + * @throws IOException + * if the directory doesn't exist and we fail to create it. + */ + private String getIndexDirName() + throws IOException { + String dirName = ConfigurationProperties + .getProperty("LuceneSetup.indexDir"); + if (dirName == null) { + throw new IllegalStateException( + "LuceneSetup.indexDir not found in properties file."); + } + + File dir = new File(dirName); + if (!dir.exists()) { + boolean created = dir.mkdir(); + if (!created) { + throw new IOException( + "Unable to create Lucene index directory at '" + dir + + "'"); + } + } + + return dirName; + } /** * Gets the analyzer that will be used when building the indexing @@ -198,7 +175,6 @@ public class LuceneSetup implements javax.servlet.ServletContextListener { * * @return */ - @SuppressWarnings("static-access") private Analyzer getAnalyzer() { return new VitroAnalyzer(); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/lucene/LuceneSetupCJK.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/lucene/LuceneSetupCJK.java index 89f34b238..34fafd78d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/lucene/LuceneSetupCJK.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/lucene/LuceneSetupCJK.java @@ -2,12 +2,11 @@ package edu.cornell.mannlib.vitro.webapp.search.lucene; +import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.util.ArrayList; import java.util.HashSet; import java.util.List; -import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; @@ -18,6 +17,7 @@ import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.cjk.CJKAnalyzer; import org.apache.lucene.search.BooleanQuery; +import edu.cornell.mannlib.vitro.webapp.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.beans.BaseResourceBean.RoleLevel; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.filtering.WebappDaoFactoryFiltering; @@ -55,7 +55,7 @@ public class LuceneSetupCJK implements javax.servlet.ServletContextListener { /** * Gets run to set up DataSource when the webapp servlet context gets created. */ - @SuppressWarnings({ "static-access", "unchecked" }) + @SuppressWarnings("unchecked") public void contextInitialized(ServletContextEvent sce) { ServletContext context = sce.getServletContext(); log.info("**** Running "+this.getClass().getName()+".contextInitialized()"); @@ -130,53 +130,40 @@ public class LuceneSetupCJK implements javax.servlet.ServletContextListener { BooleanQuery.setMaxClauseCount(16384); } - /** directory to use when none is specified */ - private String DEFAULT_INDEX_DIR = "/usr/local/lucene/vitrodefault"; - - /** name of the properties file to look for in the 'resources' */ - private String LUCENE_PROPERTIES = "/LuceneSetup.properties"; - - /** - * Gets the name of the directory to store the lucene index in. - * This is stored in a file named LuceneSetup.properties - * which should be on the classpath in the default package. - * That file should have a property named 'LuceneSetup.indexDir' - * which has the directory to store the lucene index for this - * clone in. If the property file is not found or the - * LuceneSetup.indexDir is not found, then DEFAULT_INDEX_DIR will - * be used. - * @return a string that is the directory to store the lucene - * index. - * - * @throws IOException - */ - private String getIndexDirName() { - Properties props = new Properties(); - InputStream raw = this.getClass().getResourceAsStream( LUCENE_PROPERTIES ); - if (raw == null){ - log.warn("LuceneSetup.getIndexDirName()" + - " Failed to find resource: " + LUCENE_PROPERTIES + - ". Using default directory " + DEFAULT_INDEX_DIR); - return DEFAULT_INDEX_DIR; - } - - try{ props.load( raw ); } - catch (Exception ex){ - log.error("LuceneSetup.getIndexDirName()" + - "unable to load properties: \n" + ex.getMessage() + - "\nUsing default directory " + DEFAULT_INDEX_DIR); - return DEFAULT_INDEX_DIR; - } - finally { try{raw.close();} catch(Exception ex){} } - - String dirName = props.getProperty("LuceneSetup.indexDir"); - if( dirName == null ){ - log.error("LuceneSetup.getIndexDir: " + - "indexDir not found. Using default directory "+DEFAULT_INDEX_DIR ); - return DEFAULT_INDEX_DIR; - } - return dirName; - } + /** + * Gets the name of the directory to store the lucene index in. The + * {@link ConfigurationProperties} should have a property named + * 'LuceneSetup.indexDir' which has the directory to store the lucene index + * for this clone in. If the property is not found, an exception will be + * thrown. + * + * @return a string that is the directory to store the lucene index. + * @throws IllegalStateException + * if the property is not found. + * @throws IOException + * if the directory doesn't exist and we fail to create it. + */ + private String getIndexDirName() + throws IOException { + String dirName = ConfigurationProperties + .getProperty("LuceneSetup.indexDir"); + if (dirName == null) { + throw new IllegalStateException( + "LuceneSetup.indexDir not found in properties file."); + } + + File dir = new File(dirName); + if (!dir.exists()) { + boolean created = dir.mkdir(); + if (!created) { + throw new IOException( + "Unable to create Lucene index directory at '" + dir + + "'"); + } + } + + return dirName; + } /** * Gets the analyzer that will be used when building the indexing @@ -184,7 +171,6 @@ public class LuceneSetupCJK implements javax.servlet.ServletContextListener { * * @return */ - @SuppressWarnings("static-access") private Analyzer getAnalyzer() { return new CJKAnalyzer(); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetupBase.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetupBase.java index 5ec0e3117..db1c0cc2d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetupBase.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaDataSourceSetupBase.java @@ -2,29 +2,21 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; import java.io.InputStream; -import java.util.Iterator; -import java.util.Properties; import java.util.Set; import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.hp.hpl.jena.graph.Graph; -import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; -import edu.cornell.mannlib.vitro.webapp.auth.policy.JenaNetidPolicy.ContextSetup; +import edu.cornell.mannlib.vitro.webapp.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.dao.jena.RDBGraphGenerator; import edu.cornell.mannlib.vitro.webapp.dao.jena.RegeneratingGraph; @@ -42,8 +34,6 @@ public class JenaDataSourceSetupBase { DEFAULT_TESTONRETURN = true, DEFAULT_TESTWHILEIDLE = true; - protected final static String CONNECTION_PROP_LOCATION = "/WEB-INF/classes/connection.properties"; - protected static String BASE = "/WEB-INF/ontologies/"; protected static String USERPATH = BASE+"user/"; protected static String SYSTEMPATH = BASE+"system/"; @@ -53,73 +43,43 @@ public class JenaDataSourceSetupBase { String DB_PASSWD = "jenatest"; // database password String DB = "MySQL"; // database type String DB_DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver"; - String JENA_DB_MODEL = "http://vitro.mannlib.cornell.edu/default/vitro-kb-2"; - String JENA_AUDIT_MODEL = "http://vitro.mannlib.cornell.edu/ns/db/experimental/audit"; - String JENA_INF_MODEL = "http://vitro.mannlib.cornell.edu/default/vitro-kb-inf"; - String JENA_USER_ACCOUNTS_MODEL = "http://vitro.mannlib.cornell.edu/default/vitro-kb-userAccounts"; - String JENA_APPLICATION_METADATA_MODEL = "http://vitro.mannlib.cornell.edu/default/vitro-kb-applicationMetadata"; + static final String JENA_DB_MODEL = "http://vitro.mannlib.cornell.edu/default/vitro-kb-2"; + static final String JENA_AUDIT_MODEL = "http://vitro.mannlib.cornell.edu/ns/db/experimental/audit"; + static final String JENA_INF_MODEL = "http://vitro.mannlib.cornell.edu/default/vitro-kb-inf"; + static final String JENA_USER_ACCOUNTS_MODEL = "http://vitro.mannlib.cornell.edu/default/vitro-kb-userAccounts"; + static final String JENA_APPLICATION_METADATA_MODEL = "http://vitro.mannlib.cornell.edu/default/vitro-kb-applicationMetadata"; static final String DEFAULT_DEFAULT_NAMESPACE = "http://vitro.mannlib.cornell.edu/ns/default#"; static String defaultNamespace = DEFAULT_DEFAULT_NAMESPACE; // TODO: improve this // use OWL models with no reasoning - OntModelSpec DB_ONT_MODEL_SPEC = OntModelSpec.OWL_MEM; - OntModelSpec MEM_ONT_MODEL_SPEC = OntModelSpec.OWL_MEM; + static final OntModelSpec DB_ONT_MODEL_SPEC = OntModelSpec.OWL_MEM; + static final OntModelSpec MEM_ONT_MODEL_SPEC = OntModelSpec.OWL_MEM; private static final Log log = LogFactory.getLog(JenaDataSourceSetupBase.class.getName()); - /** - * Sets up a Model and DB connection using values from - * a properties file. - */ - public final Model makeDBModelFromPropertiesFile(final String filename) { - return makeDBModelFromPropertiesFile(filename, null, null); - } - /** * Sets up a Model and DB connection using values from * a properties file. */ - public final Model makeDBModelFromPropertiesFile(final String filename, String jenaDbModelName, OntModelSpec jenaDbOntModelSpec){ - - if (filename == null || filename.length() <= 0) { - throw new Error( - "To establish the DB model you MUST set the " - + "filename to the location of a " - + "connection.properties file with the database connection parameters."); - } - - File propF = new File(filename ); - InputStream is; - try { - is = new FileInputStream(propF); - } catch (FileNotFoundException e) { - log.error("Could not load file "+filename); - throw new Error("Could not load file " + filename - + '\n' + e.getMessage()); - } - - Properties dbProps = new Properties(); - try { - dbProps.load(is); - if (jenaDbModelName == null) { - String specifiedModelName = dbProps.getProperty("Jena.modelName"); - jenaDbModelName = (specifiedModelName != null) ? specifiedModelName : JENA_DB_MODEL; - } - jenaDbOntModelSpec = (jenaDbOntModelSpec != null) ? jenaDbOntModelSpec : DB_ONT_MODEL_SPEC; - String dns = dbProps.getProperty("Vitro.defaultNamespace"); - defaultNamespace = (dns != null && dns.length()>0) ? dns : null; - return makeDBModelFromProperties(dbProps, jenaDbModelName, jenaDbOntModelSpec); - } catch (IOException e) { - throw new Error("Could not load properties from file " + filename + '\n' - + e.getMessage()); - } + public final Model makeDBModelFromConfigurationProperties(String jenaDbModelName, OntModelSpec jenaDbOntModelSpec){ + String dbDriverClassname = ConfigurationProperties.getProperty("VitroConnection.DataSource.driver", DB_DRIVER_CLASS_NAME); + String jdbcUrl = ConfigurationProperties.getProperty("VitroConnection.DataSource.url") + "?useUnicode=yes&characterEncoding=utf8"; + String username = ConfigurationProperties.getProperty("VitroConnection.DataSource.username"); + String password = ConfigurationProperties.getProperty("VitroConnection.DataSource.password"); + BasicDataSource ds = makeBasicDataSource(dbDriverClassname, jdbcUrl, username, password); + + String dns = ConfigurationProperties.getProperty("Vitro.defaultNamespace"); + defaultNamespace = (dns != null && dns.length()>0) ? dns : null; + + jenaDbOntModelSpec = (jenaDbOntModelSpec != null) ? jenaDbOntModelSpec : DB_ONT_MODEL_SPEC; + return makeDBModel(ds, jenaDbModelName, jenaDbOntModelSpec); } protected BasicDataSource makeBasicDataSource(String dbDriverClassname, String jdbcUrl, String username, String password) { BasicDataSource ds = new BasicDataSource(); - ds.setDriverClassName( (dbDriverClassname==null) ? DB_DRIVER_CLASS_NAME : dbDriverClassname ); + ds.setDriverClassName(dbDriverClassname); ds.setUrl(jdbcUrl); ds.setUsername(username); ds.setPassword(password); @@ -139,14 +99,6 @@ public class JenaDataSourceSetupBase { e.printStackTrace(); } - //Class.forName(DB_DRIVER_CLASS_NAME); - //Create database connection - //IDBConnection conn = new DBConnection ( jdbcUrl, username, password, DB ); - //IDBConnection conn = new DBConnection(ds.getConnection(),DB); - //ModelMaker maker = ModelFactory.createModelRDBMaker(conn) ; - - //ReconnectingGraphRDBMaker maker = new ReconnectingGraphRDBMaker(jdbcUrl, username, password, DB, null, ReificationStyle.Convenient); - return ds; } @@ -174,15 +126,6 @@ public class JenaDataSourceSetupBase { return dbModel; } - private Model makeDBModelFromProperties(Properties dbProps, String jenaDbModelName, OntModelSpec jenaDbOntModelSpec) { - String dbDriverClassname = dbProps.getProperty("VitroConnection.DataSource.driver"); - String jdbcUrl = dbProps.getProperty("VitroConnection.DataSource.url") + "?useUnicode=yes&characterEncoding=utf8"; - String username = dbProps.getProperty("VitroConnection.DataSource.username"); - String password = dbProps.getProperty("VitroConnection.DataSource.password"); - BasicDataSource ds = makeBasicDataSource(dbDriverClassname, jdbcUrl, username, password); - return makeDBModel(ds, jenaDbModelName, jenaDbOntModelSpec); - } - public static void readOntologyFilesInPathSet(String path, ServletContext ctx, Model model) { Set paths = ctx.getResourcePaths(path); for(String p : paths) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaPersistentDBOnlyDataSourceSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaPersistentDBOnlyDataSourceSetup.java index 56916e544..8390a99d7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaPersistentDBOnlyDataSourceSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaPersistentDBOnlyDataSourceSetup.java @@ -27,7 +27,7 @@ public class JenaPersistentDBOnlyDataSourceSetup extends JenaDataSourceSetupBase OntModel memModel = ModelFactory.createOntologyModel(MEM_ONT_MODEL_SPEC); OntModel dbModel = null; try { - Model dbPlainModel = makeDBModelFromPropertiesFile(sce.getServletContext().getRealPath(CONNECTION_PROP_LOCATION), JENA_DB_MODEL, DB_ONT_MODEL_SPEC); + Model dbPlainModel = makeDBModelFromConfigurationProperties(JENA_DB_MODEL, DB_ONT_MODEL_SPEC); dbModel = ModelFactory.createOntologyModel(MEM_ONT_MODEL_SPEC,dbPlainModel); boolean isEmpty = true; ClosableIterator stmtIt = dbModel.listStatements(); @@ -57,7 +57,7 @@ public class JenaPersistentDBOnlyDataSourceSetup extends JenaDataSourceSetupBase } catch (Throwable t) { System.out.println("**** ERROR *****"); System.out.println("Vitro unable to open Jena database model."); - System.out.println("Check that connection.properties has been created WEB-INF/classes, "); + System.out.println("Check that the configuration properties file has been created in WEB-INF/classes, "); System.out.println("and that the database connection parameters are accurate. "); System.out.println("****************"); } @@ -77,7 +77,7 @@ public class JenaPersistentDBOnlyDataSourceSetup extends JenaDataSourceSetupBase // default inference graph try { - Model infDbPlainModel = makeDBModelFromPropertiesFile(sce.getServletContext().getRealPath(CONNECTION_PROP_LOCATION), JENA_INF_MODEL, DB_ONT_MODEL_SPEC); + Model infDbPlainModel = makeDBModelFromConfigurationProperties(JENA_INF_MODEL, DB_ONT_MODEL_SPEC); OntModel infDbModel = ModelFactory.createOntologyModel(MEM_ONT_MODEL_SPEC,infDbPlainModel); sce.getServletContext().setAttribute("inferenceOntModel",infDbModel); } catch (Throwable e) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaPersistentDataSourceSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaPersistentDataSourceSetup.java index 863684521..4f3ba4ac6 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaPersistentDataSourceSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/JenaPersistentDataSourceSetup.java @@ -27,7 +27,7 @@ public class JenaPersistentDataSourceSetup extends JenaDataSourceSetupBase imple boolean firstStartup = false; try { - dbModel = makeDBModelFromPropertiesFile(sce.getServletContext().getRealPath(CONNECTION_PROP_LOCATION), JENA_DB_MODEL, DB_ONT_MODEL_SPEC); + dbModel = makeDBModelFromConfigurationProperties(JENA_DB_MODEL, DB_ONT_MODEL_SPEC); ClosableIterator stmtIt = dbModel.listStatements(); try { @@ -63,14 +63,14 @@ public class JenaPersistentDataSourceSetup extends JenaDataSourceSetupBase imple } catch (Throwable t) { System.out.println("**** ERROR *****"); System.out.println("Vitro unable to open Jena database model."); - System.out.println("Check that connection.properties has been created WEB-INF/classes, "); + System.out.println("Check that the configuration properties file has been created in WEB-INF/classes, "); System.out.println("and that the database connection parameters are accurate. "); System.out.println("****************"); } // default inference graph try { - Model infDbModel = makeDBModelFromPropertiesFile(sce.getServletContext().getRealPath(CONNECTION_PROP_LOCATION), JENA_INF_MODEL, DB_ONT_MODEL_SPEC); + Model infDbModel = makeDBModelFromConfigurationProperties(JENA_INF_MODEL, DB_ONT_MODEL_SPEC); OntModel infModel = ModelFactory.createOntologyModel(MEM_ONT_MODEL_SPEC); if (infDbModel != null) { long startTime = System.currentTimeMillis(); @@ -86,7 +86,7 @@ public class JenaPersistentDataSourceSetup extends JenaDataSourceSetupBase imple // user accounts Model try { - Model userAccountsDbModel = makeDBModelFromPropertiesFile(sce.getServletContext().getRealPath(CONNECTION_PROP_LOCATION), JENA_USER_ACCOUNTS_MODEL, DB_ONT_MODEL_SPEC); + Model userAccountsDbModel = makeDBModelFromConfigurationProperties(JENA_USER_ACCOUNTS_MODEL, DB_ONT_MODEL_SPEC); if (firstStartup) { readOntologyFilesInPathSet(AUTHPATH, sce.getServletContext(), userAccountsDbModel); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ModelAuditorSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ModelAuditorSetup.java index 04adc5a74..ed3278b03 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ModelAuditorSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ModelAuditorSetup.java @@ -32,7 +32,7 @@ public class ModelAuditorSetup extends JenaDataSourceSetupBase implements Servle Model baseModel = ontModel.getBaseModel(); OntModel dynamicUnionModel = (OntModel) sce.getServletContext().getAttribute("jenaOntModel"); log.debug("Setting model auditor database..."); - OntModel auditModel = ModelFactory.createOntologyModel(MEM_ONT_MODEL_SPEC,makeDBModelFromPropertiesFile(sce.getServletContext().getRealPath(CONNECTION_PROP_LOCATION), JENA_AUDIT_MODEL, DB_ONT_MODEL_SPEC)); + OntModel auditModel = ModelFactory.createOntologyModel(MEM_ONT_MODEL_SPEC,makeDBModelFromConfigurationProperties(JENA_AUDIT_MODEL, DB_ONT_MODEL_SPEC)); sce.getServletContext().setAttribute("jenaAuditModel", auditModel); ModelAuditor ma = new ModelAuditor(auditModel,ontModel); baseModel.register(ma); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/VitroJenaModelMakerSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/VitroJenaModelMakerSetup.java index 2108deb0e..136d8f192 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/VitroJenaModelMakerSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/VitroJenaModelMakerSetup.java @@ -2,29 +2,22 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import org.apache.log4j.Logger; import com.hp.hpl.jena.db.DBConnection; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.ModelMaker; -import edu.cornell.mannlib.vitro.webapp.auth.policy.JenaNetidPolicy.ContextSetup; +import edu.cornell.mannlib.vitro.webapp.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaModelMaker; public class VitroJenaModelMakerSetup implements ServletContextListener { + private static final Logger LOG = Logger + .getLogger(VitroJenaModelMakerSetup.class); - protected final static String CONNECTION_PROP_LOCATION = "/WEB-INF/classes/connection.properties"; protected final static String DB_TYPE = "MySQL"; public void contextDestroyed(ServletContextEvent arg0) { @@ -32,78 +25,19 @@ public class VitroJenaModelMakerSetup implements ServletContextListener { } public void contextInitialized(ServletContextEvent arg0) { - - /* Sometimes this class fails for no apparent reason and stops - the context from loading. Trying to eliminate all uncaught errors. */ - Log log = null; - - try { - log = LogFactory.getLog(VitroJenaModelMakerSetup.class.getName()); - } catch (Throwable t) { - System.out.println("Unable to use error log for "+this.getClass().getName()); - } - try { - String filename = arg0.getServletContext().getRealPath(CONNECTION_PROP_LOCATION); - if (filename == null || filename.length() <= 0) { - if (log != null) { - log.error( - "Error setting up VitroModelMaker:\n" + - "To establish the DB model you MUST set the " - + "filename to the location of a " - + "connection.properties file with the database connection parameters."); - } - } - - File propF = new File(filename ); - InputStream is = null; - try { - is = new FileInputStream(propF); - } catch (FileNotFoundException e) { - String msg = "Error setting up VitroJenaModelMaker:\nCould not load file "+filename; - if (log != null) { - log.error(msg); - } else { - System.out.println(msg); - } - } - - Properties dbProps = new Properties(); - try { - dbProps.load(is); - String dns = dbProps.getProperty("Vitro.defaultNamespace"); - String dbDriverClassname = dbProps.getProperty("VitroConnection.DataSource.driver"); - String jdbcUrl = dbProps.getProperty("VitroConnection.DataSource.url") + "?useUnicode=yes&characterEncoding=utf8"; - String username = dbProps.getProperty("VitroConnection.DataSource.username"); - String password = dbProps.getProperty("VitroConnection.DataSource.password"); - DBConnection dbConn = new DBConnection(jdbcUrl,username,password,DB_TYPE); - ModelMaker mMaker = ModelFactory.createModelRDBMaker(dbConn); - VitroJenaModelMaker vjmm = new VitroJenaModelMaker(mMaker); - arg0.getServletContext().setAttribute("vitroJenaModelMaker",vjmm); - String msg = "VitroJenaModelMaker set up"; - if (log != null) { - log.debug(msg); - } else { - System.out.println(msg); - } - } catch (IOException e) { - String msg = "Error setting up VitroJenaModelMaker:\nCould not load properties from file " + filename + '\n' - + e.getMessage(); - if (log != null) { - log.error(msg); - } else { - System.out.println(msg); - } - } - + String jdbcUrl = ConfigurationProperties.getProperty("VitroConnection.DataSource.url") + + "?useUnicode=yes&characterEncoding=utf8"; + String username = ConfigurationProperties.getProperty("VitroConnection.DataSource.username"); + String password = ConfigurationProperties.getProperty("VitroConnection.DataSource.password"); + + DBConnection dbConn = new DBConnection(jdbcUrl, username, password, DB_TYPE); + ModelMaker mMaker = ModelFactory.createModelRDBMaker(dbConn); + VitroJenaModelMaker vjmm = new VitroJenaModelMaker(mMaker); + arg0.getServletContext().setAttribute("vitroJenaModelMaker", vjmm); + LOG.debug("VitroJenaModelMaker set up"); } catch (Throwable t) { - String msg = "Unable to set up default VitroJenaModelMaker"; - if (log != null) { - log.error(msg); - log.error(t); - } else { - System.out.println(msg); - } + LOG.error("Unable to set up default VitroJenaModelMaker", t); } }