Commit b57f952b authored by marceteau's avatar marceteau
Browse files

ajout des relations + correctif

parent 84928017
......@@ -90,6 +90,7 @@ import fr.cines.ip.InformationPackage;
import fr.cines.pac.aip.CodeType;
import fr.cines.pac.aip.DocDCType;
import fr.cines.pac.aip.DocMetaType;
import fr.cines.pac.aip.DocRelationType;
import fr.cines.pac.aip.EmpreinteType;
import fr.cines.pac.aip.FichMetaType;
import fr.cines.pac.aip.PacType;
......@@ -109,6 +110,7 @@ import fr.gouv.culture.archivesdefrance.seda.v2.CompressedType;
import fr.gouv.culture.archivesdefrance.seda.v2.CoreMetadataType;
import fr.gouv.culture.archivesdefrance.seda.v2.CoverageType;
import fr.gouv.culture.archivesdefrance.seda.v2.DataObjectGroupType;
import fr.gouv.culture.archivesdefrance.seda.v2.DataObjectOrArchiveUnitReferenceType;
import fr.gouv.culture.archivesdefrance.seda.v2.DataObjectPackageType;
import fr.gouv.culture.archivesdefrance.seda.v2.DataObjectRefType;
import fr.gouv.culture.archivesdefrance.seda.v2.DescriptiveMetadataContentType;
......@@ -129,6 +131,7 @@ import fr.gouv.culture.archivesdefrance.seda.v2.MessageDigestBinaryObjectType;
import fr.gouv.culture.archivesdefrance.seda.v2.ObjectFactory;
import fr.gouv.culture.archivesdefrance.seda.v2.OrganizationType;
import fr.gouv.culture.archivesdefrance.seda.v2.OrganizationWithIdType;
import fr.gouv.culture.archivesdefrance.seda.v2.RelatedObjectReferenceType;
import fr.gouv.culture.archivesdefrance.seda.v2.RuleIdType;
import fr.gouv.culture.archivesdefrance.seda.v2.TextTechnicalMetadataType;
import fr.gouv.culture.archivesdefrance.seda.v2.TextType;
......@@ -163,6 +166,12 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
private List<DataObjectMapper> dataObjectMapper = new ArrayList<DataObjectMapper>();
int archiveUnitCounter = 0;
/**
* Compteur pour gérer les problèmes de fichiers avec le même nom
*/
private Map<String, Integer> fileNameCounter = new HashMap<String, Integer>();
/**
* Variable pour compter les objets binaires et leur attribuer un identifiant
*/
......@@ -224,6 +233,7 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
private static final String CINES_DC_FORMAT = "format";
private static final String APPRAISAL_RULE = "AppraisalRule_Rule";
private static final String DISSEMINATION_RULE = "DisseminationRule_Rule";
private static final String PREFIXE_ARK = "prefixeARK";
/**
* Label présent dans des balises, à ne pas mapper en Tag
*/
......@@ -309,7 +319,13 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
ArchiveUnitType archiveUnit = objectFactory.createArchiveUnitType();
DataObjectPackageType dataObjectPackage = mapArchiveBlock(archiveUnit, sip);
DataObjectPackageType dataObjectPackage = null;
try {
dataObjectPackage = mapArchiveBlock(archiveUnit, sip);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
manifest.setDataObjectPackage(dataObjectPackage);
} else {
logger.error("L'archive Dublin Core ne contient pas bloc <Archive>");
......@@ -424,8 +440,10 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
* @param dataObjectPackage
* @param submissionAgency
* @param currentArchive
* @throws Exception
*/
private DataObjectPackageType mapArchiveBlock(ArchiveUnitType currentArchive, PacType sip) throws DuplicateLanguageException {
@SuppressWarnings("null")
private DataObjectPackageType mapArchiveBlock(ArchiveUnitType currentArchive, PacType sip) throws Exception {
DataObjectPackageType dataObjectPackage = objectFactory.createDataObjectPackageType();
// Contrat d'archive
......@@ -693,6 +711,54 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
event.setEventDateTime(sip.getDocMeta().getDateArchivage());
content.getEvent().add(event);
}
//Relations
for(DocRelationType docRelationType : sip.getDocMeta().getDocRelation()) {
String typeRelation = docRelationType.getTypeRelation();
DataObjectOrArchiveUnitReferenceType relation = objectFactory.createDataObjectOrArchiveUnitReferenceType();
String identifiantSourceRelation = docRelationType.getIdentifiantSourceRelation();
if(docRelationType.getSourceRelation().equalsIgnoreCase("PAC")) {
String persistentID = constructArkFromIdentifier(identifiantSourceRelation);
relation.setRepositoryArchiveUnitPID(persistentID);
} else if (docRelationType.getSourceRelation().equalsIgnoreCase("Producteur")) {
relation.setExternalReference(identifiantSourceRelation);
} else {
//Ce cas ne devrait pas se produire
throw new Exception("La valeur de sourceRelation est incorrecte" + docRelationType.getSourceRelation());
}
RelatedObjectReferenceType relatedObjectReference;
if(content.getRelatedObjectReference() != null) {
relatedObjectReference = content.getRelatedObjectReference();
} else {
relatedObjectReference = objectFactory.createRelatedObjectReferenceType();
}
switch (typeRelation) {
case "version":
relatedObjectReference.getReplaces().add(relation);
content.setRelatedObjectReference(relatedObjectReference);
break;
case "maj":
relatedObjectReference.getIsPartOf().add(relation);
content.setRelatedObjectReference(relatedObjectReference);
break;
case "filiation":
relatedObjectReference.getReferences().add(relation);
content.setRelatedObjectReference(relatedObjectReference);
break;
default:
break;
}
if(docRelationType.getTypeRelation().equalsIgnoreCase("version")) {
}
}
boolean generateCinesDc = Boolean.parseBoolean(properties.getProperty(CINES_DC));
......@@ -711,6 +777,19 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
return dataObjectPackage;
}
/**
* Cette fonction sert à tenter de reformer l'ark depuis un identifiant provenant de PAC
*
* @param identifiantSourceRelation
* @return
*/
private String constructArkFromIdentifier(String identifiantSourceRelation) {
// TODO Corriger cette fonction pour être certain que l'ark existe (si c'est seulement possible...)
//Il faudra peut-être aller interroger vitam et/ou arcsys si l'on veut être rigoureux
String prefix = properties.getProperty(PREFIXE_ARK);
return prefix.concat(identifiantSourceRelation);
}
/**
* <h1>Mappe la balise DocDC -> type en DocumentType</h1>
* <p>
......@@ -1151,9 +1230,10 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
if(document.getStructureFichier() != null && !document.getStructureFichier().isEmpty()) {
TextTechnicalMetadataType text = objectFactory.createTextTechnicalMetadataType();
for(StructureFichier sf : document.getStructureFichier()) {
JAXBElement<String> jaxbElementSchema = createXMLElement(sf.getValue(), "Schema");
String[] structureFichier = sf.getValue().split("/");
JAXBElement<String> jaxbElementSchema = createXMLElement(structureFichier[structureFichier.length-1], "Schema");
text.getAny().add(jaxbElementSchema);
representation_information_files.add(sf.getValue());
representation_information_files.add(structureFichier[structureFichier.length-1]);
}
metadata.setText(text);
}
......@@ -1277,6 +1357,7 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
return null;
}
/**
* Mappe les informations d'un fichier<br/>
* Le nom du fichier SEDA 2.1 ne contient pas le répertoire racine Content<br/>
......@@ -1289,7 +1370,14 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
ObjectFactory objectFactory = new ObjectFactory();
FileInfoType fileInfo = objectFactory.createFileInfoType();
Path path = Paths.get(document.getNomFichier().trim());
String finalName = Integer.toString(archiveUnitCounter) + "_" + path.getFileName();
String finalName;
if(!fileNameCounter.containsKey(path.getFileName().toString())) {
fileNameCounter.put(path.getFileName().toString(), new Integer(0));
}
finalName = Integer.toString(fileNameCounter.get(path.getFileName().toString())) + "_" + path.getFileName();
Integer oldCounter = fileNameCounter.get(path.getFileName().toString());
fileNameCounter.replace(path.getFileName().toString(), oldCounter + 1) ;
fileInfo.setFilename(finalName);
......@@ -1624,8 +1712,7 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
description.setLang("fra");
content.getDescription().add(description);
} else {
//title.setValue(pathNomFichier[pathNomFichier.length-1]);
title.setValue(fichMeta.getNomFichier());
title.setValue(pathNomFichier[pathNomFichier.length-1]);
}
content.getTitle().add(title);
......
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