CHANGED: Moved RecordDataInfo and FileInfo classes into their own files.
FIXED: Added a write permission check to delete file method in the new web interface. Previously it only checked if the user was logged in.
CHANGED: FileFactory and StorageSearchService as injected into DcStorage as dependencies.
FIXED: Added 'test' scope to hamcrest-core dependency.
CHANGED: Now RecordDataInfo contains information about the whole bag instead of an individual folder. Folder specific information is queried through JSTL. Requires servlet container implementing Servlet 3.0 / JSP 2.2, e.g. Tomcat 7.
NEW: Initial files for TagFilesService.
NEW: Added LocalDiskManager for read/writes to disks.
NEW: Initial files for LockManager that stores a ReentrantReadWriteLock for each Path.
NEW: Created StorageEventListener that gets notified of storage events. This allows separating the pre and post processing code from the actual file adding/deleting code.
CHANGED: Url of new data files page to records/[PID]/data from record/[PID]/data to keep it REST-compliant.
NEW: Replaced individual Executor Services used by classes with a ThreadPoolService class that can be injected into classes that require one. The service wraps 2 pools - one fixed sized pool, and one unbounded pool.
FIXED: Unable to add an external reference to a record without first adding some files.
NEW: Added a link to verify a collection on the new Data Files page.
CHANGED: The Record page now uses Record Data Info object instead of BagSummary.
CHANGED: Adjusted column width on the new Data Files page.
FIXED: PersistenceManager is now thread-safe.
FIXED: ConcurrentModificationException because of sync'ing on incorrect object.
NEW: Added PathCreator class that provides a static factory method that creates Path objects for injection using Spring. Using the Paths.get() method directly did not allow for null values. Null values are required for optional properties, such as Archive directory.
NEW: Created a TempFileService as a replacement for TempFileTask for saving InputStreams to disk. That service returns a UploadedFileInfo object consisting of pre-computing information about an uploaded file, e.g. MD5.
NEW: Added a ThreadPoolFactory class that accepts a pool ID and thread priority as parameters to better manage threads in thread pools.
CHANGED: Modified some logging.
CHANGED: Logging levels to reduce excessive logging
FIXED: Exception handling when generating a RecordDataInfo object.
CHANGED: Uploading a file and saving to a temp file on disk is done in cached pool with lower thread priority to improve server responsiveness during the upload process.
CHANGED: Reduced the number of File objects held in memory by FileFactory.
CHANGED: Added an additional check when saving a file to payload directory of a bag to make sure it is actually saved there.
NEW: Added a StopWatch class for measuring time elapsed between its start and stop method calls. Provides basic performance metrics for tasks that use it.
NEW: ThreadPoolService now accepts cleanup tasks that are executed during @PreDestroy method. Updated TagFilesService to schedule a write all tag files to disk during cleanup.
UPDATED: All storage event tasks to use StopWatch class.