diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/application/ApplicationImpl.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/application/ApplicationImpl.java
index 0976345ce..7ca265c10 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/application/ApplicationImpl.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/application/ApplicationImpl.java
@@ -6,12 +6,16 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
+import edu.cornell.mannlib.vitro.webapp.filestorage.impl.FileStorageImplWrapper;
import edu.cornell.mannlib.vitro.webapp.imageprocessor.jai.JaiImageProcessor;
import edu.cornell.mannlib.vitro.webapp.modules.Application;
+import edu.cornell.mannlib.vitro.webapp.modules.ComponentStartupStatus;
+import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileStorage;
import edu.cornell.mannlib.vitro.webapp.modules.imageProcessor.ImageProcessor;
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngine;
import edu.cornell.mannlib.vitro.webapp.searchengine.SearchEngineWrapper;
import edu.cornell.mannlib.vitro.webapp.searchengine.solr.SolrSearchEngine;
+import edu.cornell.mannlib.vitro.webapp.startup.ComponentStartupStatusImpl;
import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus;
/**
@@ -25,6 +29,7 @@ public class ApplicationImpl implements Application {
private final ServletContext ctx;
private SearchEngine searchEngine;
private ImageProcessor imageProcessor;
+ private FileStorage fileStorage;
public ApplicationImpl(ServletContext ctx) {
this.ctx = ctx;
@@ -44,6 +49,7 @@ public class ApplicationImpl implements Application {
this.searchEngine = searchEngine;
}
+ @Override
public ImageProcessor getImageProcessor() {
return imageProcessor;
}
@@ -52,11 +58,21 @@ public class ApplicationImpl implements Application {
this.imageProcessor = imageProcessor;
}
+ @Override
+ public FileStorage getFileStorage() {
+ return fileStorage;
+ }
+
+ public void setFileStorage(FileStorage fileStorage) {
+ this.fileStorage = fileStorage;
+ }
+
// ----------------------------------------------------------------------
// The Setup class.
// ----------------------------------------------------------------------
-
+
public static class Setup implements ServletContextListener {
+ private ApplicationImpl application;
@Override
public void contextInitialized(ServletContextEvent sce) {
@@ -64,14 +80,26 @@ public class ApplicationImpl implements Application {
StartupStatus ss = StartupStatus.getBean(ctx);
try {
- ApplicationImpl application = new ApplicationImpl(ctx);
+ application = new ApplicationImpl(ctx);
+
+ ComponentStartupStatus css = new ComponentStartupStatusImpl(
+ this, ss);
SearchEngine searchEngine = new SearchEngineWrapper(
new SolrSearchEngine());
+ searchEngine.startup(application, css);
application.setSearchEngine(searchEngine);
+ ss.info(this, "Started the searchEngine: " + searchEngine);
ImageProcessor imageProcessor = new JaiImageProcessor();
+ imageProcessor.startup(application, css);
application.setImageProcessor(imageProcessor);
+ ss.info(this, "Started the ImageProcessor: " + searchEngine);
+
+ FileStorage fileStorage = new FileStorageImplWrapper();
+ fileStorage.startup(application, css);
+ application.setFileStorage(fileStorage);
+ ss.info(this, "Started the FileStorage system: " + searchEngine);
ApplicationUtils.setInstance(application);
ss.info(this, "Appliation is configured.");
@@ -82,7 +110,9 @@ public class ApplicationImpl implements Application {
@Override
public void contextDestroyed(ServletContextEvent sce) {
- // Nothing to tear down.
+ application.getFileStorage().shutdown(application);
+ application.getImageProcessor().shutdown(application);
+ application.getSearchEngine().shutdown(application);
}
}
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadController.java
index defbdf153..743b3bfd8 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadController.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadController.java
@@ -5,13 +5,13 @@ package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.AuthorizationRequest.UNAUTHORIZED;
import javax.servlet.ServletException;
-import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.AuthorizationRequest;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.RequestedAction;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddObjectPropertyStatement;
@@ -27,11 +27,10 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.For
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
-import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorage;
-import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup;
import edu.cornell.mannlib.vitro.webapp.filestorage.model.FileInfo;
import edu.cornell.mannlib.vitro.webapp.filestorage.model.ImageInfo;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
+import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileStorage;
import edu.cornell.mannlib.vitro.webapp.modules.imageProcessor.ImageProcessor.CropRectangle;
import edu.cornell.mannlib.vitro.webapp.modules.imageProcessor.ImageProcessor.Dimensions;
import edu.cornell.mannlib.vitro.webapp.web.images.PlaceholderUtil;
@@ -115,23 +114,7 @@ public class ImageUploadController extends FreemarkerHttpServlet {
@Override
public void init() throws ServletException {
super.init();
- Object o = getServletContext().getAttribute(
- FileStorageSetup.ATTRIBUTE_NAME);
- if (o instanceof FileStorage) {
- fileStorage = (FileStorage) o;
- } else if (o == null) {
- throw new UnavailableException(this.getClass().getSimpleName()
- + " could not initialize. Attribute '"
- + FileStorageSetup.ATTRIBUTE_NAME
- + "' was not set in the servlet context.");
- } else {
- throw new UnavailableException(this.getClass().getSimpleName()
- + " could not initialize. Attribute '"
- + FileStorageSetup.ATTRIBUTE_NAME
- + "' in the servlet context contained an instance of '"
- + o.getClass().getName() + "' instead of '"
- + FileStorage.class.getName() + "'");
- }
+ fileStorage = ApplicationUtils.instance().getFileStorage();
}
/**
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadHelper.java
index 63ded19f4..91bcd0a15 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadHelper.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadHelper.java
@@ -28,9 +28,9 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.ImageUploadControl
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.filestorage.TempFileHolder;
import edu.cornell.mannlib.vitro.webapp.filestorage.UploadedFileHelper;
-import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileAlreadyExistsException;
-import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorage;
import edu.cornell.mannlib.vitro.webapp.filestorage.model.FileInfo;
+import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileAlreadyExistsException;
+import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileStorage;
import edu.cornell.mannlib.vitro.webapp.modules.imageProcessor.ImageProcessor.CropRectangle;
import edu.cornell.mannlib.vitro.webapp.modules.imageProcessor.ImageProcessor.Dimensions;
import edu.cornell.mannlib.vitro.webapp.modules.imageProcessor.ImageProcessor.ImageProcessorException;
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/FileServingHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/FileServingHelper.java
index be7c8334e..ab8da1fcb 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/FileServingHelper.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/FileServingHelper.java
@@ -11,7 +11,6 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
-import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup;
/**
* Static methods to help when serving uploaded files.
@@ -19,6 +18,8 @@ import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup;
public class FileServingHelper {
private static final Log log = LogFactory.getLog(FileServingHelper.class);
+ public static final String PROPERTY_DEFAULT_NAMESPACE = "Vitro.defaultNamespace";
+
private static final String DEFAULT_PATH = "/individual/";
private static final String FILE_PATH = "/file/";
private static boolean warned; // Only issue the warning once.
@@ -29,11 +30,11 @@ public class FileServingHelper {
*/
private static String getDefaultNamespace(ServletContext ctx) {
String defaultNamespace = ConfigurationProperties.getBean(ctx)
- .getProperty(FileStorageSetup.PROPERTY_DEFAULT_NAMESPACE);
+ .getProperty(PROPERTY_DEFAULT_NAMESPACE);
if (defaultNamespace == null) {
throw new IllegalArgumentException(
"Configuration properties must contain a value for '"
- + FileStorageSetup.PROPERTY_DEFAULT_NAMESPACE + "'");
+ + PROPERTY_DEFAULT_NAMESPACE + "'");
}
if (!defaultNamespace.endsWith(DEFAULT_PATH)) {
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/TempFileHolder.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/TempFileHolder.java
index 8c7200cb4..e0ad95c58 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/TempFileHolder.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/TempFileHolder.java
@@ -4,7 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.filestorage;
import java.io.IOException;
-import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
@@ -12,9 +11,9 @@ import javax.servlet.http.HttpSessionBindingListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorage;
-import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup;
+import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils;
import edu.cornell.mannlib.vitro.webapp.filestorage.model.FileInfo;
+import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileStorage;
/**
* Attaches an uploaded file to the session with a listener, so the file will be
@@ -109,6 +108,7 @@ public class TempFileHolder implements HttpSessionBindingListener {
*/
@Override
public void valueBound(HttpSessionBindingEvent event) {
+ // Nothing to do.
}
/**
@@ -130,17 +130,7 @@ public class TempFileHolder implements HttpSessionBindingListener {
return;
}
- HttpSession session = event.getSession();
- ServletContext servletContext = session.getServletContext();
-
- FileStorage fs = (FileStorage) servletContext
- .getAttribute(FileStorageSetup.ATTRIBUTE_NAME);
- if (fs == null) {
- log.error("Servlet context does not contain file storage at '"
- + FileStorageSetup.ATTRIBUTE_NAME + "'");
- return;
- }
-
+ FileStorage fs = ApplicationUtils.instance().getFileStorage();
try {
fs.deleteFile(fileInfo.getBytestreamUri());
log.debug("Deleted file " + fileInfo);
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/UploadedFileHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/UploadedFileHelper.java
index bd9c9cda4..cc7487bba 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/UploadedFileHelper.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/UploadedFileHelper.java
@@ -22,10 +22,10 @@ import edu.cornell.mannlib.vitro.webapp.dao.InsertException;
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
-import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileAlreadyExistsException;
-import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorage;
import edu.cornell.mannlib.vitro.webapp.filestorage.model.FileInfo;
import edu.cornell.mannlib.vitro.webapp.filestorage.model.ImageInfo;
+import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileAlreadyExistsException;
+import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileStorage;
/**
* A helper object to handle the mundane details of dealing with uploaded files
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorageSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorageSetup.java
deleted file mode 100644
index cc3771016..000000000
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorageSetup.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/* $This file is distributed under the terms of the license in /doc/license.txt$ */
-
-package edu.cornell.mannlib.vitro.webapp.filestorage.backend;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
-import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus;
-
-/**
- * Initializes the file storage system, and stores a reference in the servlet
- * context.
- */
-public class FileStorageSetup implements ServletContextListener {
- private static final Log log = LogFactory.getLog(FileStorageSetup.class);
-
- /**
- * The implementation of the {@link FileStorage} system will be stored in
- * the {@link ServletContext} as an attribute with this name.
- */
- public static final String ATTRIBUTE_NAME = FileStorage.class.getName();
-
- /**
- * The default implementation will use this key to ask
- * {@link ConfigurationProperties} for the vivo home directory. The file
- * storage base directory is in a subdirectory below this one.
- */
- public static final String PROPERTY_VITRO_HOME_DIR = "vitro.home";
- public static final String FILE_STORAGE_SUBDIRECTORY = "uploads";
-
- /**
- * The default implementation will use this key to ask
- * {@link ConfigurationProperties} for the default URI namespace.
- */
- public static final String PROPERTY_DEFAULT_NAMESPACE = "Vitro.defaultNamespace";
-
- /**
- * Create an implementation of {@link FileStorage} and store it in the
- * {@link ServletContext}, as an attribute named according to
- * {@link #ATTRIBUTE_NAME}.
- */
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- ServletContext ctx = sce.getServletContext();
- StartupStatus ss = StartupStatus.getBean(ctx);
-
- try {
- File baseDirectory = figureBaseDir(sce);
- Collection
* For a non-null result, a directory must exist for the ID, and it must * contain a file (it may or may not contain other directories). *
*/ - @Override - public String getFilename(String id) throws IOException { + public String getFilename(String id) { File dir = FileStorageHelper.getPathToIdDirectory(id, this.namespacesMap, this.rootDir); log.debug("ID '" + id + "' translates to this directory path: '" + dir @@ -374,6 +389,7 @@ public class FileStorageImpl implements FileStorage { } File[] files = dir.listFiles(new FileFilter() { + @Override public boolean accept(File pathname) { return pathname.isFile(); } @@ -395,7 +411,6 @@ public class FileStorageImpl implements FileStorage { /** * {@inheritDoc} */ - @Override public InputStream getInputStream(String id, String filename) throws IOException { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/impl/FileStorageImplWrapper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/impl/FileStorageImplWrapper.java new file mode 100644 index 000000000..e3934428a --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/impl/FileStorageImplWrapper.java @@ -0,0 +1,122 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.filestorage.impl; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collection; +import java.util.Collections; + +import javax.servlet.ServletContext; + +import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; +import edu.cornell.mannlib.vitro.webapp.modules.Application; +import edu.cornell.mannlib.vitro.webapp.modules.ComponentStartupStatus; +import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileAlreadyExistsException; +import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileStorage; + +/** + * A thin wrapper around the existing FileStorageImpl. Handles the setup. + */ +public class FileStorageImplWrapper implements FileStorage { + public static final String PROPERTY_DEFAULT_NAMESPACE = "Vitro.defaultNamespace"; + public static final String PROPERTY_VITRO_HOME_DIR = "vitro.home"; + public static final String FILE_STORAGE_SUBDIRECTORY = "uploads"; + + private FileStorageImpl fs; + + /** + * Create an instance of FileStorageImpl, based on the values in runtime.properties. + */ + @Override + public void startup(Application application, ComponentStartupStatus ss) { + ServletContext ctx = application.getServletContext(); + + try { + File baseDirectory = figureBaseDir(ctx); + CollectionBy the way, almost all of this is implemented in
- edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageHelper + edu.cornell.mannlib.vitro.webapp.filestorage.impl.FileStorageHelperand illustrated in
- edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageHelperTest + edu.cornell.mannlib.vitro.webapp.filestorage.impl.FileStorageHelperTestdiff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/serving/FileServingServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/serving/FileServingServlet.java index 0a9375ba4..7a5c5075b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/serving/FileServingServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/serving/FileServingServlet.java @@ -12,19 +12,18 @@ import java.net.URLDecoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; -import javax.servlet.UnavailableException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils; import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; -import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorage; -import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup; import edu.cornell.mannlib.vitro.webapp.filestorage.model.FileInfo; +import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileStorage; /** *
@@ -59,16 +58,8 @@ public class FileServingServlet extends VitroHttpServlet { */ @Override public void init() throws ServletException { - Object o = getServletContext().getAttribute( - FileStorageSetup.ATTRIBUTE_NAME); - if (o instanceof FileStorage) { - fileStorage = (FileStorage) o; - } else { - throw new UnavailableException( - "The ServletContext did not hold a FileStorage object at '" - + FileStorageSetup.ATTRIBUTE_NAME - + "'; found this instead: " + o); - } + super.init(); + fileStorage = ApplicationUtils.instance().getFileStorage(); } @Override @@ -220,10 +211,6 @@ public class FileServingServlet extends VitroHttpServlet { public FileServingException(String message) { super(message); } - - public FileServingException(String message, Throwable cause) { - super(message, cause); - } } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/Application.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/Application.java index f9204e4e2..a03016061 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/Application.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/Application.java @@ -4,6 +4,7 @@ package edu.cornell.mannlib.vitro.webapp.modules; import javax.servlet.ServletContext; +import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileStorage; import edu.cornell.mannlib.vitro.webapp.modules.imageProcessor.ImageProcessor; import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngine; @@ -16,6 +17,8 @@ public interface Application { SearchEngine getSearchEngine(); ImageProcessor getImageProcessor(); + + FileStorage getFileStorage(); public interface Component { enum LifecycleState { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileAlreadyExistsException.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/fileStorage/FileAlreadyExistsException.java similarity index 94% rename from webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileAlreadyExistsException.java rename to webapp/src/edu/cornell/mannlib/vitro/webapp/modules/fileStorage/FileAlreadyExistsException.java index 336bd66f2..78a3ba8cc 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileAlreadyExistsException.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/fileStorage/FileAlreadyExistsException.java @@ -1,6 +1,6 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ -package edu.cornell.mannlib.vitro.webapp.filestorage.backend; +package edu.cornell.mannlib.vitro.webapp.modules.fileStorage; import java.io.IOException; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorage.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/fileStorage/FileStorage.java similarity index 75% rename from webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorage.java rename to webapp/src/edu/cornell/mannlib/vitro/webapp/modules/fileStorage/FileStorage.java index f65c5453b..51f4d86ed 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorage.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/modules/fileStorage/FileStorage.java @@ -1,30 +1,17 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ -package edu.cornell.mannlib.vitro.webapp.filestorage.backend; +package edu.cornell.mannlib.vitro.webapp.modules.fileStorage; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import edu.cornell.mannlib.vitro.webapp.modules.Application; + /** * The interface for the File Storage system. */ -public interface FileStorage { - /** - * The name of the root directory, within the base directory. - */ - public static final String FILE_STORAGE_ROOT = "file_storage_root"; - - /** - * The name of the file in the base directory that holds the namespace map. - */ - public static final String FILE_STORAGE_NAMESPACES_PROPERTIES = "file_storage_namespaces.properties"; - - /** - * How often to we insert path separator characters? - */ - int SHORTY_LENGTH = 3; - +public interface FileStorage extends Application.Module { /** * Store the bytes from this stream as a file with the specified ID and * filename. If the file already exists, it is over-written. diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/searchengine/SearchEngineSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/searchengine/SearchEngineSetup.java deleted file mode 100644 index 0a4748d90..000000000 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/searchengine/SearchEngineSetup.java +++ /dev/null @@ -1,32 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package edu.cornell.mannlib.vitro.webapp.searchengine; - -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - -import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils; -import edu.cornell.mannlib.vitro.webapp.modules.Application; -import edu.cornell.mannlib.vitro.webapp.modules.ComponentStartupStatus; -import edu.cornell.mannlib.vitro.webapp.startup.ComponentStartupStatusImpl; -import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus; - -/** - * Whatever search engine we have, start it up and shut it down. - */ -public class SearchEngineSetup implements ServletContextListener { - @Override - public void contextInitialized(ServletContextEvent sce) { - Application application = ApplicationUtils.instance(); - StartupStatus ss = StartupStatus.getBean(sce.getServletContext()); - ComponentStartupStatus css = new ComponentStartupStatusImpl(this, ss); - application.getSearchEngine().startup(application, css); - } - - @Override - public void contextDestroyed(ServletContextEvent sce) { - Application application = ApplicationUtils.instance(); - application.getSearchEngine().shutdown(application); - } - -} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/searchengine/SearchEngineWrapper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/searchengine/SearchEngineWrapper.java index df1bb4878..9b59f232f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/searchengine/SearchEngineWrapper.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/searchengine/SearchEngineWrapper.java @@ -96,7 +96,7 @@ public class SearchEngineWrapper implements SearchEngine { try { throw new IllegalStateException(); } catch (Exception e) { - log.warn("startup called when state was " + lifecycleState, e); + log.warn("shutdown called when state was " + lifecycleState, e); } break; } diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/FileServingHelperTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/FileServingHelperTest.java index b3e322944..2e05eabbd 100644 --- a/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/FileServingHelperTest.java +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/FileServingHelperTest.java @@ -12,7 +12,6 @@ import stubs.edu.cornell.mannlib.vitro.webapp.config.ConfigurationPropertiesStub import stubs.javax.servlet.ServletContextStub; import edu.cornell.mannlib.vitro.testing.AbstractTestClass; import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; -import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup; /** */ @@ -35,7 +34,7 @@ public class FileServingHelperTest extends AbstractTestClass { ctx = new ServletContextStub(); ConfigurationPropertiesStub props = new ConfigurationPropertiesStub(); - props.setProperty(FileStorageSetup.PROPERTY_DEFAULT_NAMESPACE, + props.setProperty(FileServingHelper.PROPERTY_DEFAULT_NAMESPACE, DEFAULT_NAMESPACE); props.setBean(ctx); } diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorageHelperTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/impl/FileStorageHelperTest.java similarity index 99% rename from webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorageHelperTest.java rename to webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/impl/FileStorageHelperTest.java index b421ee2d9..1dd931f3f 100644 --- a/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorageHelperTest.java +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/impl/FileStorageHelperTest.java @@ -1,6 +1,6 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ -package edu.cornell.mannlib.vitro.webapp.filestorage.backend; +package edu.cornell.mannlib.vitro.webapp.filestorage.impl; import static org.junit.Assert.assertEquals; diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorageImplTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/impl/FileStorageImplTest.java similarity index 93% rename from webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorageImplTest.java rename to webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/impl/FileStorageImplTest.java index 7c41aef63..f37424548 100644 --- a/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/backend/FileStorageImplTest.java +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/filestorage/impl/FileStorageImplTest.java @@ -1,7 +1,9 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ -package edu.cornell.mannlib.vitro.webapp.filestorage.backend; +package edu.cornell.mannlib.vitro.webapp.filestorage.impl; +import static edu.cornell.mannlib.vitro.webapp.filestorage.impl.FileStorageImpl.FILE_STORAGE_NAMESPACES_PROPERTIES; +import static edu.cornell.mannlib.vitro.webapp.filestorage.impl.FileStorageImpl.FILE_STORAGE_ROOT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -26,6 +28,7 @@ import org.junit.BeforeClass; import org.junit.Test; import edu.cornell.mannlib.vitro.testing.AbstractTestClass; +import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileAlreadyExistsException; /** * Test the FileStorage methods. The zero-argument constructor was tested in @@ -55,26 +58,29 @@ public class FileStorageImplTest extends AbstractTestClass { // tests // ---------------------------------------------------------------------- + @SuppressWarnings("unused") @Test(expected = IllegalArgumentException.class) public void baseDirDoesntExist() throws IOException { File baseDir = new File(tempDir, "doesntExist"); new FileStorageImpl(baseDir, EMPTY_NAMESPACES); } + @SuppressWarnings("unused") @Test(expected = IllegalStateException.class) public void partialInitializationRoot() throws IOException { File baseDir = new File(tempDir, "partialWithRoot"); baseDir.mkdir(); - new File(baseDir, FileStorage.FILE_STORAGE_ROOT).mkdir(); + new File(baseDir, FILE_STORAGE_ROOT).mkdir(); new FileStorageImpl(baseDir, EMPTY_NAMESPACES); } + @SuppressWarnings("unused") @Test(expected = IllegalStateException.class) public void partialInitializationNamespaces() throws IOException { File baseDir = new File(tempDir, "partialWithNamespaces"); baseDir.mkdir(); - new File(baseDir, FileStorage.FILE_STORAGE_NAMESPACES_PROPERTIES) + new File(baseDir, FILE_STORAGE_NAMESPACES_PROPERTIES) .createNewFile(); new FileStorageImpl(baseDir, EMPTY_NAMESPACES); @@ -276,7 +282,7 @@ public class FileStorageImplTest extends AbstractTestClass { */ private void assertFileContents(FileStorageImpl fs, String id, String filename, String expectedContents) throws IOException { - File rootDir = new File(fs.getBaseDir(), FileStorage.FILE_STORAGE_ROOT); + File rootDir = new File(fs.getBaseDir(), FILE_STORAGE_ROOT); File path = FileStorageHelper.getFullPath(rootDir, id, filename, fs.getNamespaces()); diff --git a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/modules/ApplicationStub.java b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/modules/ApplicationStub.java index 3ee963605..7ec549add 100644 --- a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/modules/ApplicationStub.java +++ b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/modules/ApplicationStub.java @@ -8,6 +8,7 @@ import javax.servlet.ServletContext; import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils; import edu.cornell.mannlib.vitro.webapp.modules.Application; +import edu.cornell.mannlib.vitro.webapp.modules.fileStorage.FileStorage; import edu.cornell.mannlib.vitro.webapp.modules.imageProcessor.ImageProcessor; import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngine; @@ -66,4 +67,11 @@ public class ApplicationStub implements Application { "ApplicationStub.getImageProcessor() not implemented."); } + + @Override + public FileStorage getFileStorage() { + throw new RuntimeException( + "ApplicationStub.getFileStorage() not implemented."); + } + } diff --git a/webapp/web/WEB-INF/resources/startup_listeners.txt b/webapp/web/WEB-INF/resources/startup_listeners.txt index 419708f13..94783f0ad 100644 --- a/webapp/web/WEB-INF/resources/startup_listeners.txt +++ b/webapp/web/WEB-INF/resources/startup_listeners.txt @@ -28,8 +28,6 @@ edu.cornell.mannlib.vitro.webapp.servlet.setup.rdfsetup.RDFSetup edu.cornell.mannlib.vitro.webapp.servlet.setup.ConfigurationModelsSetup edu.cornell.mannlib.vitro.webapp.servlet.setup.ContentModelSetup -edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup - edu.cornell.mannlib.vitro.webapp.web.images.PlaceholderUtil$Setup # Some permissions were removed in release 1.7 @@ -65,7 +63,6 @@ edu.cornell.mannlib.vitro.webapp.i18n.selection.LocaleSelectionSetup # The search indexer uses a "public" permission, so the PropertyRestrictionPolicyHelper # and the PermissionRegistry must already be set up. -edu.cornell.mannlib.vitro.webapp.searchengine.SearchEngineSetup edu.cornell.mannlib.vitro.webapp.searchindex.SearchIndexerSetup edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerSetup