Commit 6041419e authored by marceteau's avatar marceteau
Browse files

plan de classement + disseminationrule + ajout du sip dans le paquet

(flux courant) + au fantome + mapping divers
parent eebdcc21
......@@ -67,6 +67,7 @@ public class ArchiveConverterMain {
private Path errorFolder;
private Path errorLanguageFolder;
private Path planClassementFile;
private Path currentArchivePath;
private String formalism;
......@@ -114,6 +115,14 @@ public class ArchiveConverterMain {
}
}
if(commandLine.hasOption("p")) {
planClassementFile = Paths.get(commandLine.getOptionValue("p")) ;
if(!planClassementFile.toFile().exists()) {
System.err.println("Le fichier de plan de classement " + planClassementFile.toString() + " n'existe pas.");
System.exit(-1);
}
}
if(!commandLine.hasOption("f")) {
System.err.println("Le formalisme d'entrée est obligatoire. Précisez l'entrée souhaitée : sip ou seda1");
formatter.printHelp("archive-converter", options);
......
......@@ -113,6 +113,7 @@ import fr.gouv.culture.archivesdefrance.seda.v2.DataObjectPackageType;
import fr.gouv.culture.archivesdefrance.seda.v2.DataObjectRefType;
import fr.gouv.culture.archivesdefrance.seda.v2.DescriptiveMetadataContentType;
import fr.gouv.culture.archivesdefrance.seda.v2.DescriptiveMetadataType;
import fr.gouv.culture.archivesdefrance.seda.v2.DisseminationRuleType;
import fr.gouv.culture.archivesdefrance.seda.v2.EventLogBookOgType;
import fr.gouv.culture.archivesdefrance.seda.v2.EventType;
import fr.gouv.culture.archivesdefrance.seda.v2.FileInfoType;
......@@ -131,6 +132,7 @@ import fr.gouv.culture.archivesdefrance.seda.v2.OrganizationWithIdType;
import fr.gouv.culture.archivesdefrance.seda.v2.RuleIdType;
import fr.gouv.culture.archivesdefrance.seda.v2.TextTechnicalMetadataType;
import fr.gouv.culture.archivesdefrance.seda.v2.TextType;
import fr.gouv.culture.archivesdefrance.seda.v2.UpdateOperationType;
import fr.gouv.culture.archivesdefrance.seda.v2.VideoTechnicalMetadataType;
......@@ -221,6 +223,7 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
private static final String TRANSFERRING_AGENCY_ARCHIVE_UNIT_IDENTIFIER = "TransferringAgencyArchiveUnitIdentifier";
private static final String CINES_DC_FORMAT = "format";
private static final String APPRAISAL_RULE = "AppraisalRule_Rule";
private static final String DISSEMINATION_RULE = "DisseminationRule_Rule";
/**
* Label présent dans des balises, à ne pas mapper en Tag
*/
......@@ -440,10 +443,26 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
archivalProfile.setValue(archiveProfile);
managementMetadata.setArchivalProfile(archivalProfile);
}
AppraisalRuleType appraisalRule = mapAppraisalRules(sip.getDocMeta());
AppraisalRuleType appraisalRule = null;
try {
appraisalRule = mapAppraisalRules(sip.getDocMeta());
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
managementMetadata.setAppraisalRule(appraisalRule);
//disseminationRule
String disseminationRule_property = properties.getProperty(DISSEMINATION_RULE);
if (!"".equals(disseminationRule_property) && !"false".equalsIgnoreCase(disseminationRule_property) && (disseminationRule_property != null)) {
DisseminationRuleType disseminationRule = objectFactory.createDisseminationRuleType();
RuleIdType ruleId = objectFactory.createRuleIdType();
ruleId.setValue(disseminationRule_property);
disseminationRule.getRuleAndStartDate().add(ruleId);
managementMetadata.setDisseminationRule(disseminationRule);
}
//TODO : AccessRestrictionRule pas dans le mapping excel
AccessRuleType accessRestrictionRule = mapAccessRule(sip.getDocMeta());
if (sip.getDocMeta().getCommunicabilite() != null)
......@@ -463,6 +482,10 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
if (this.getSipType().equals("aip")) {
addAipXml(sip);
}
if (this.getSipType().equals("sip")) {
addSipXml(sip);
}
List<DataObjectGroupType> dataObjectGroupList = mapDataObjectGroup(sip);
......@@ -482,6 +505,7 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
String archiveUnitProfileProp = properties.getProperty(ARCHIVE_UNIT_PROFILE);
if (!"".equals(archiveUnitProfileProp) && !"false".equalsIgnoreCase(archiveUnitProfileProp)) {
IdentifierType archiveUnitProfile = objectFactory.createIdentifierType();
archiveUnitProfile.setValue(archiveUnitProfileProp);
rootArchiveUnit.setArchiveUnitProfile(archiveUnitProfile);
}
......@@ -558,16 +582,16 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
archiveUnitCounter++;
ghostArchiveUnitAttachment.setId("ID" + archiveUnitCounter);
String refId = rootArchiveUnit.getId();
//ghostArchiveUnitAttachment.setArchiveUnitRefId(refId);
DescriptiveMetadataContentType ghostContent = objectFactory.createDescriptiveMetadataContentType();
ManagementType ghostManagement = objectFactory.createManagementType();
ghostContent.getSystemId().add(systemId);
ghostContent.setDescriptionLevel(LevelType.fromValue(descriptionLevelStr));
ghostContent.getTitle().add(title);
//ghostManagement.getOtherManagementAbstract().add(createXMLElement("toto", "UpdateOperation"));
UpdateOperationType updateOperation = objectFactory.createUpdateOperationType();
updateOperation.setSystemId(systemId);
ghostManagement.setUpdateOperation(updateOperation);
ghostArchiveUnit.setManagement(ghostManagement);
ghostArchiveUnit.setContent(ghostContent);
......@@ -728,6 +752,23 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
sip.getFichMeta().add(aipfichmeta);
}
/**
* @param sip
*/
private void addSipXml(PacType sip) {
FichMetaType sipfichmeta = new FichMetaType();
sipfichmeta.setNomFichier("sip.xml");
sipfichmeta.setFormatFichier("XML");
sipfichmeta.setEncodage("UTF_8");
//aipfichmeta.setVersionFormatFichier("1.0");
EmpreinteType empreinteType = new EmpreinteType();
Path sipPath = Paths.get(this.rootFolder.getParent().toString(), "sip.xml");
empreinteType.setValue(computeChecksum(sipPath.toString(), "SHA-256"));
empreinteType.setType("SHA-256");
sipfichmeta.setEmpreinte(empreinteType);
sipfichmeta.setTailleEnOctets(BigInteger.valueOf(sipPath.toFile().length()));
sip.getFichMeta().add(sipfichmeta);
}
/**
* Génère une entrée LogBook pour tracer l'événement d'archivage dans Arcsys
* @return {@link LogBookType} une entrée LogBook
......@@ -850,11 +891,13 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
* et renvoie les règles de conservation au format SEDA 2.1
* @param currentArchive ArchiveType
* @return Instance de AppraisalRuleType
* @throws Exception
*/
private AppraisalRuleType mapAppraisalRules(DocMetaType docMetaType) {
private AppraisalRuleType mapAppraisalRules(DocMetaType docMetaType) throws Exception {
AppraisalRuleType appraisalRule = objectFactory.createAppraisalRuleType();
String appraisalRuleProperty = properties.getProperty(APPRAISAL_RULE);
/*//Bloc de code qu'il faudra probablement supprimer
// Règles d'évaluation - DUA et sort final
if (docMetaType.getSortFinal() != null) {
String sortFinal = docMetaType.getSortFinal().getValue();
......@@ -888,9 +931,13 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
}
}
}*/
if (docMetaType.getEvaluation() != null) {
if("false".equals(appraisalRuleProperty)) {
//Dans le cas où l'on a un bloc évaluation, une valeur est obligatoirement fournie dans le fichier property
throw new Exception("AppraisalRule manquant dans le fichier property");
}
RuleIdType ruleIdType = objectFactory.createRuleIdType();
ruleIdType.setValue(appraisalRuleProperty);
XMLGregorianCalendar startDate = null;
......@@ -908,6 +955,14 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
finalActionCodeType = FinalActionAppraisalCodeType.DESTROY;
}
appraisalRule.setFinalAction(finalActionCodeType);
}else {
if(!"false".equals(appraisalRuleProperty)) {
//Dans le cas où l'on n'a pas de bloc évaluation, la valeur est nécessairement
// à false sinon c'est qu'il manque le bloc evaluation
throw new Exception("Bloc evaluation manquant, ce bloc est obligatoire car appraisalRule n'est pas à false");
}
FinalActionAppraisalCodeType finalActionCodeType = FinalActionAppraisalCodeType.KEEP;
appraisalRule.setFinalAction(finalActionCodeType);
}
return appraisalRule;
......@@ -950,7 +1005,7 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
// On peuple la liste DataObjectMapper
DataObjectMapper dom = null;
if(this.getSipType().equals("aip") && document.getNomFichier().equals("aip.xml")) {
if((this.getSipType().equals("aip") && document.getNomFichier().equals("aip.xml")) | (this.getSipType().equals("sip") && document.getNomFichier().equals("sip.xml"))) {
dom = new DataObjectMapper(document.getNomFichier().trim(), binaryDataObject.getUri());
// Le fichier aip.xml n'est pas dans le répertoire DEPOT mais à la racine
filePath = this.rootFolder.getParent().resolve(document.getNomFichier().trim());
......@@ -1045,7 +1100,7 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
String declaredChecksum = empreinte;
String declaredTypeChecksum = type;
String computedChecksum = computeChecksum(filePath.toString(), declaredTypeChecksum);
if(!computedChecksum.equalsIgnoreCase(declaredChecksum) && !document.getNomFichier().equals("aip.xml")) {
if(!computedChecksum.equalsIgnoreCase(declaredChecksum) && !document.getNomFichier().equals("aip.xml") && !document.getNomFichier().equals("sip.xml")) {
logger.error("Le checksum du bordereau est différent du checksum calculé pour le fichier : {}", document.getNomFichier());
}
String algorithm = "SHA-512";
......@@ -1544,7 +1599,7 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
//TODO: voir dans quelles circonstances il faudra mettre la valeur RI au lieu de PDI ou CDO
TextType type = new TextType();
if(fichMeta.getNomFichier().startsWith("DESC/") || fichMeta.getNomFichier().equals("aip.xml")) {
if(fichMeta.getNomFichier().startsWith("DESC/") || fichMeta.getNomFichier().equals("aip.xml") || fichMeta.getNomFichier().equals("sip.xml")) {
type.setValue(ObjectType.PDI.name());
content.setType(type);
} else {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment