package edu.unc.lib.deposit.normalize;
import java.io.File;
import org.jdom2.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.hp.hpl.jena.rdf.model.Model;
import edu.unc.lib.dl.fedora.PID;
import edu.unc.lib.dl.util.PackagingType;
import edu.unc.lib.dl.util.PremisEventLogger.Type;
import edu.unc.lib.dl.xml.METSProfile;
public class CDRMETS2N3BagJob extends AbstractMETS2N3BagJob {
private static final Logger LOG = LoggerFactory.getLogger(CDRMETS2N3BagJob.class);
public CDRMETS2N3BagJob() {
super();
}
public CDRMETS2N3BagJob(String uuid, String depositUUID) {
super(uuid, depositUUID);
}
@Override
public void runJob() {
validateMETS();
// Store a reference to the manifest file
addManifestURI();
LOG.info("METS XML validated");
validateProfile(METSProfile.CDR_SIMPLE);
LOG.info("METS Schematron validated");
Document mets = loadMETS();
LOG.info("METS dom document loaded");
assignPIDs(mets); // assign any missing PIDsq
LOG.info("PIDs assigned");
saveMETS(mets); // manifest updated to have record of all PIDs
LOG.info("METS saved with new PIDs");
Model model = getWritableModel();
CDRMETSGraphExtractor extractor = new CDRMETSGraphExtractor(mets, this.getDepositPID());
LOG.info("Extractor initialized");
extractor.addArrangement(model);
LOG.info("Extractor arrangement added");
extractor.helper.addFileAssociations(model, true);
LOG.info("Extractor file associations added");
extractor.addAccessControls(model);
LOG.info("Extractor access controls added");
final File modsFolder = getDescriptionDir();
modsFolder.mkdir();
extractor.saveDescriptions(new FilePathFunction() {
@Override
public String getPath(String piduri) {
String uuid = new PID(piduri).getUUID();
return new File(modsFolder, uuid+".xml").getAbsolutePath();
}
});
LOG.info("MODS descriptions saved");
recordDepositEvent(Type.NORMALIZATION, "Normalized deposit package from {0} to {1}", PackagingType.METS_CDR.getUri(), PackagingType.BAG_WITH_N3.getUri());
}
}