/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.health;
import org.dspace.checker.*;
import org.dspace.core.Context;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @author LINDAT/CLARIN dev team
*/
public class ChecksumCheck extends Check {
@Override
public String run( ReportInfo ri ) {
String ret = "No md5 checks made!";
Context context = new Context();
CheckerCommand checker = new CheckerCommand(context);
Date process_start = Calendar.getInstance().getTime();
checker.setProcessStartDate(process_start);
checker.setDispatcher(
new SimpleDispatcher(context, process_start, false));
md5_collector collector = new md5_collector();
checker.setCollector(collector);
checker.setReportVerbose(true);
try {
checker.process();
context.complete();
context = null;
} catch (SQLException e) {
error(e);
} finally {
if (context != null) {
context.abort();
}
}
if (collector.arr.size() > 0) {
ret = String.format("Checksum performed on [%d] items:\n",
collector.arr.size());
int ok_items = 0;
for (MostRecentChecksum bi : collector.arr) {
if (!ChecksumResultCode.CHECKSUM_MATCH.equals(bi
.getChecksumResult().getResultCode())) {
ret += String
.format("md5 checksum FAILED (%s): %s id: %s bitstream-id: %s\n was: %s\n is: %s\n",
bi.getChecksumResult(), bi.getBitstream().getName(),
bi.getBitstream().getInternalId(), bi.getBitstream().getID(),
bi.getExpectedChecksum(),
bi.getCurrentChecksum());
} else {
ok_items++;
}
}
ret += String.format("checksum OK for [%d] items\n", ok_items);
}
return ret;
}
}
class md5_collector implements ChecksumResultsCollector {
public List<MostRecentChecksum> arr = new ArrayList<>();
@Override
public void collect(Context context, MostRecentChecksum info) throws SQLException {
arr.add(info);
}
}