From e1c5ededc5f45a61ac0be4838848e0079999c651 Mon Sep 17 00:00:00 2001
From: KevinVdV
Date: Fri, 9 Jan 2015 16:15:35 +0100
Subject: [PATCH] [DS-2396] Checksum checker and
bitstream.user_format_description on version 5.0.rc02
---
.../dspace/app/checker/ChecksumChecker.java | 13 ++++++++++---
.../org/dspace/checker/BitstreamInfoDAO.java | 18 ++++++++++--------
.../org/dspace/checker/CheckerCommand.java | 9 +++++----
.../org/dspace/checker/DailyReportEmailer.java | 17 +++++++++++++----
.../java/org/dspace/checker/ReporterDAO.java | 18 +++++++++---------
.../org/dspace/checker/SimpleReporter.java | 4 +++-
.../org/dspace/checker/SimpleReporterImpl.java | 5 +++--
7 files changed, 53 insertions(+), 31 deletions(-)
diff --git a/dspace-api/src/main/java/org/dspace/app/checker/ChecksumChecker.java b/dspace-api/src/main/java/org/dspace/app/checker/ChecksumChecker.java
index 35a9436ec6..df5e7cd088 100644
--- a/dspace-api/src/main/java/org/dspace/app/checker/ChecksumChecker.java
+++ b/dspace-api/src/main/java/org/dspace/app/checker/ChecksumChecker.java
@@ -8,6 +8,7 @@
package org.dspace.app.checker;
import java.io.FileNotFoundException;
+import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@@ -32,6 +33,7 @@ import org.dspace.checker.ListDispatcher;
import org.dspace.checker.ResultsLogger;
import org.dspace.checker.ResultsPruner;
import org.dspace.checker.SimpleDispatcher;
+import org.dspace.core.Context;
import org.dspace.core.Utils;
/**
@@ -78,8 +80,7 @@ public final class ChecksumChecker
* Don't prune results before running checker
*
*/
- public static void main(String[] args)
- {
+ public static void main(String[] args) throws SQLException {
// set up command line parser
CommandLineParser parser = new PosixParser();
CommandLine line = null;
@@ -230,7 +231,13 @@ public final class ChecksumChecker
checker.setProcessStartDate(processStart);
checker.setDispatcher(dispatcher);
checker.setCollector(logger);
- checker.process();
+ Context context = new Context();
+ try {
+ checker.process(context);
+ } finally {
+ context.commit();
+ context.complete();
+ }
System.exit(0);
}
diff --git a/dspace-api/src/main/java/org/dspace/checker/BitstreamInfoDAO.java b/dspace-api/src/main/java/org/dspace/checker/BitstreamInfoDAO.java
index 075ccdd581..f7a4207458 100644
--- a/dspace-api/src/main/java/org/dspace/checker/BitstreamInfoDAO.java
+++ b/dspace-api/src/main/java/org/dspace/checker/BitstreamInfoDAO.java
@@ -17,7 +17,9 @@ import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
+import org.dspace.content.Bitstream;
import org.dspace.core.ConfigurationManager;
+import org.dspace.core.Context;
import org.dspace.storage.rdbms.DatabaseManager;
/**
@@ -43,9 +45,9 @@ public final class BitstreamInfoDAO extends DAOSupport
/** Query that gets bitstream information for a specified ID. */
private static final String FIND_BY_BITSTREAM_ID = "select bitstream.deleted, bitstream.store_number, bitstream.size_bytes, "
+ "bitstreamformatregistry.short_description, bitstream.bitstream_id, "
- + "bitstream.user_format_description, bitstream.internal_id, "
- + "bitstream.source, bitstream.checksum_algorithm, bitstream.checksum, "
- + "bitstream.name, most_recent_checksum.last_process_end_date,"
+ + "bitstream.internal_id, "
+ + "bitstream.checksum_algorithm, bitstream.checksum, "
+ + "most_recent_checksum.last_process_end_date,"
+ "most_recent_checksum.to_be_processed "
+ "from bitstream left outer join bitstreamformatregistry on "
+ "bitstream.bitstream_format_id = bitstreamformatregistry.bitstream_format_id, "
@@ -226,7 +228,7 @@ public final class BitstreamInfoDAO extends DAOSupport
* @return the bitstream information needed for checksum validation. Returns
* null if bitstream info isn't found.
*/
- public BitstreamInfo findByBitstreamId(int id)
+ public BitstreamInfo findByBitstreamId(Context context, int id)
{
Connection conn = null;
BitstreamInfo info = null;
@@ -246,14 +248,14 @@ public final class BitstreamInfoDAO extends DAOSupport
// if the bitstream is found return it
if (rs.next())
{
+ Bitstream bitstream = Bitstream.find(context, rs.getInt("bitstream_id"));
info = new BitstreamInfo(rs.getBoolean("deleted"), rs
.getInt("store_number"), rs.getLong("size_bytes"), rs
.getString("short_description"), rs
- .getInt("bitstream_id"), rs
- .getString("user_format_description"), rs
- .getString("internal_id"), rs.getString("source"), rs
+ .getInt("bitstream_id"), bitstream.getUserFormatDescription(), rs
+ .getString("internal_id"), bitstream.getSource(), rs
.getString("checksum_algorithm"), rs
- .getString("checksum"), rs.getString("name"), rs
+ .getString("checksum"), bitstream.getName(), rs
.getTimestamp("last_process_end_date"), rs
.getBoolean("to_be_processed"), new Date());
}
diff --git a/dspace-api/src/main/java/org/dspace/checker/CheckerCommand.java b/dspace-api/src/main/java/org/dspace/checker/CheckerCommand.java
index dfd5c265ae..d681da5b08 100644
--- a/dspace-api/src/main/java/org/dspace/checker/CheckerCommand.java
+++ b/dspace-api/src/main/java/org/dspace/checker/CheckerCommand.java
@@ -16,6 +16,7 @@ import java.sql.SQLException;
import java.util.Date;
import org.apache.log4j.Logger;
+import org.dspace.core.Context;
import org.dspace.core.Utils;
/**
@@ -93,7 +94,7 @@ public final class CheckerCommand
* setBitstreamDispatcher before calling this method
*
*/
- public void process()
+ public void process(Context context)
{
LOG.debug("Begin Checker Processing");
@@ -116,7 +117,7 @@ public final class CheckerCommand
while (id != BitstreamDispatcher.SENTINEL)
{
LOG.debug("Processing bitstream id = " + id);
- BitstreamInfo info = checkBitstream(id);
+ BitstreamInfo info = checkBitstream(context, id);
if (reportVerbose
|| !ChecksumCheckResults.CHECKSUM_MATCH.equals(info.getChecksumCheckResult()))
@@ -136,10 +137,10 @@ public final class CheckerCommand
*
* @return the information about the bitstream and its checksum data
*/
- private BitstreamInfo checkBitstream(final int id)
+ private BitstreamInfo checkBitstream(Context context, final int id)
{
// get bitstream info from bitstream table
- BitstreamInfo info = bitstreamInfoDAO.findByBitstreamId(id);
+ BitstreamInfo info = bitstreamInfoDAO.findByBitstreamId(context, id);
// requested id was not found in bitstream
// or most_recent_checksum table
diff --git a/dspace-api/src/main/java/org/dspace/checker/DailyReportEmailer.java b/dspace-api/src/main/java/org/dspace/checker/DailyReportEmailer.java
index 65cea024ea..d8651b87a1 100644
--- a/dspace-api/src/main/java/org/dspace/checker/DailyReportEmailer.java
+++ b/dspace-api/src/main/java/org/dspace/checker/DailyReportEmailer.java
@@ -10,6 +10,7 @@ package org.dspace.checker;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
+import java.sql.SQLException;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.mail.MessagingException;
@@ -22,6 +23,7 @@ import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.apache.log4j.Logger;
import org.dspace.core.ConfigurationManager;
+import org.dspace.core.Context;
import org.dspace.core.Email;
/**
@@ -178,9 +180,11 @@ public class DailyReportEmailer
File report = null;
FileWriter writer = null;
+ Context context = null;
try
{
+ context = new Context();
// the number of bitstreams in report
int numBitstreams = 0;
@@ -221,7 +225,7 @@ public class DailyReportEmailer
tomorrow, writer);
writer
.write("\n--------------------------------- Report Spacer ---------------------------\n\n");
- numBitstreams += reporter.getUncheckedBitstreamsReport(writer);
+ numBitstreams += reporter.getUncheckedBitstreamsReport(context, writer);
writer
.write("\n--------------------------------- End Report ---------------------------\n\n");
writer.flush();
@@ -279,7 +283,7 @@ public class DailyReportEmailer
writer
.write("\n--------------------------------- Begin Reporting ------------------------\n\n");
numBitstreams += reporter
- .getUncheckedBitstreamsReport(writer);
+ .getUncheckedBitstreamsReport(context, writer);
writer.flush();
writer.close();
emailer.sendReport(report, numBitstreams);
@@ -293,9 +297,14 @@ public class DailyReportEmailer
catch (IOException e)
{
log.fatal(e);
- }
- finally
+ } catch (SQLException e) {
+ log.fatal(e);
+ } finally
{
+ if(context != null && context.isValid())
+ {
+ context.abort();
+ }
if (writer != null)
{
try
diff --git a/dspace-api/src/main/java/org/dspace/checker/ReporterDAO.java b/dspace-api/src/main/java/org/dspace/checker/ReporterDAO.java
index 2f201f4163..f57febd93d 100644
--- a/dspace-api/src/main/java/org/dspace/checker/ReporterDAO.java
+++ b/dspace-api/src/main/java/org/dspace/checker/ReporterDAO.java
@@ -16,7 +16,9 @@ import java.util.LinkedList;
import java.util.List;
import org.apache.log4j.Logger;
+import org.dspace.content.Bitstream;
import org.dspace.core.ConfigurationManager;
+import org.dspace.core.Context;
import org.dspace.storage.rdbms.DatabaseManager;
/**
@@ -77,9 +79,8 @@ public class ReporterDAO extends DAOSupport
*/
public static final String FIND_UNKNOWN_BITSTREAMS = "select bitstream.deleted, bitstream.store_number, bitstream.size_bytes, "
+ "bitstreamformatregistry.short_description, bitstream.bitstream_id, "
- + "bitstream.user_format_description, bitstream.internal_id, "
- + "bitstream.source, bitstream.checksum_algorithm, bitstream.checksum, "
- + "bitstream.name, bitstream.description "
+ + "bitstream.internal_id, "
+ + "bitstream.checksum_algorithm, bitstream.checksum "
+ "from bitstream left outer join bitstreamformatregistry on "
+ "bitstream.bitstream_format_id = bitstreamformatregistry.bitstream_format_id "
+ "where not exists( select 'x' from most_recent_checksum "
@@ -224,7 +225,7 @@ public class ReporterDAO extends DAOSupport
*
* @return a List of DSpaceBitstreamInfo objects
*/
- public List getUnknownBitstreams()
+ public List getUnknownBitstreams(Context context)
{
List unknownBitstreams = new LinkedList();
@@ -244,16 +245,15 @@ public class ReporterDAO extends DAOSupport
// add the bitstream history objects
while (rs.next())
{
+ Bitstream bitstream = Bitstream.find(context, rs.getInt("bitstream_id"));
unknownBitstreams.add(new DSpaceBitstreamInfo(rs
.getBoolean("deleted"), rs.getInt("store_number"), rs
.getInt("size_bytes"), rs
.getString("short_description"), rs
- .getInt("bitstream_id"), rs
- .getString("user_format_description"), rs
- .getString("internal_id"), rs.getString("source"), rs
+ .getInt("bitstream_id"), bitstream.getFormatDescription(), rs
+ .getString("internal_id"), bitstream.getSource(), rs
.getString("checksum_algorithm"), rs
- .getString("checksum"), rs.getString("name"), rs
- .getString("description")));
+ .getString("checksum"), bitstream.getName(), bitstream.getDescription()));
}
}
catch (SQLException e)
diff --git a/dspace-api/src/main/java/org/dspace/checker/SimpleReporter.java b/dspace-api/src/main/java/org/dspace/checker/SimpleReporter.java
index 92f214638e..4f88feba30 100644
--- a/dspace-api/src/main/java/org/dspace/checker/SimpleReporter.java
+++ b/dspace-api/src/main/java/org/dspace/checker/SimpleReporter.java
@@ -7,6 +7,8 @@
*/
package org.dspace.checker;
+import org.dspace.core.Context;
+
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Date;
@@ -110,6 +112,6 @@ public interface SimpleReporter
* if io error occurs
*
*/
- public int getUncheckedBitstreamsReport(OutputStreamWriter osw)
+ public int getUncheckedBitstreamsReport(Context context, OutputStreamWriter osw)
throws IOException;
}
diff --git a/dspace-api/src/main/java/org/dspace/checker/SimpleReporterImpl.java b/dspace-api/src/main/java/org/dspace/checker/SimpleReporterImpl.java
index 88ea08b49f..f6d9a01813 100644
--- a/dspace-api/src/main/java/org/dspace/checker/SimpleReporterImpl.java
+++ b/dspace-api/src/main/java/org/dspace/checker/SimpleReporterImpl.java
@@ -14,6 +14,7 @@ import java.util.Date;
import java.util.Iterator;
import java.util.List;
+import org.dspace.core.Context;
import org.dspace.core.I18nUtil;
/**
@@ -240,11 +241,11 @@ public class SimpleReporterImpl implements SimpleReporter
* @throws IOException
* if io error occurs
*/
- public int getUncheckedBitstreamsReport(OutputStreamWriter osw)
+ public int getUncheckedBitstreamsReport(Context context, OutputStreamWriter osw)
throws IOException
{
// get all the bitstreams marked deleted for today
- List bitstreams = reporter.getUnknownBitstreams();
+ List bitstreams = reporter.getUnknownBitstreams(context);
osw.write("\n");
osw.write(msg("unchecked-bitstream-report"));