Commit d47d0bed authored by marceteau's avatar marceteau
Browse files

Correctif moche sur les archiveUnit imbriquees avec fonction recursive

parent bcb0ad4a
......@@ -1230,9 +1230,14 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
if(document.getStructureFichier() != null && !document.getStructureFichier().isEmpty()) {
TextTechnicalMetadataType text = objectFactory.createTextTechnicalMetadataType();
for(StructureFichier sf : document.getStructureFichier()) {
//String[] structureFichier = sf.getValue().split("/");
//String schemaValue = structureFichier[structureFichier.length-1];
String schemaValue = sf.getValue();
String schemaValue;
if(sf.getValue().trim().startsWith("DESC/") || sf.getValue().trim().startsWith("DEPOT/DESC/")) {
String[] structureFichier = sf.getValue().split("/");
schemaValue = structureFichier[structureFichier.length-1];
} else {
schemaValue = sf.getValue();
}
JAXBElement<String> jaxbElementSchema = createXMLElement(schemaValue, "Schema");
text.getAny().add(jaxbElementSchema);
representation_information_files.add(schemaValue);
......@@ -1554,12 +1559,12 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
* @return {@link ArchiveUnitType} Une AU SEDA 2.1
*/
private ArchiveUnitType buildArchiveUnit(FichMetaType fichMeta) {
ArchiveUnitType subFolderArchiveUnit = null;
ArchiveUnitType folderArchiveUnit = null;
if (!fichMeta.getNomFichier().contains("DESC/")) { // Si c'est un fichier metadonnees, on ne traite pas les sous-repertoires
String[] pathElements = fichMeta.getNomFichier().split("/");
if (pathElements.length > 1) {
String subFolder = Arrays.stream(pathElements, 0, pathElements.length - 1).collect(Collectors.joining("/"));
subFolderArchiveUnit = buildSubFolderArchiveUnit(subFolder);
folderArchiveUnit = buildSubFolderArchiveUnit(subFolder, subFolder, 0);
}
}
......@@ -1608,9 +1613,38 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
archiveUnit.setContent(content);
// Dans le cas ou l'AU est inclue dans une AU de type item
if (subFolderArchiveUnit != null) {
subFolderArchiveUnit.getArchiveUnitOrArchiveUnitReferenceAbstractOrDataObjectReference().add(archiveUnit);
return subFolderArchiveUnit;
//Le bazar ci dessous permet de placer l'AU archiveUnit dans la bonne AU, en reparcourant depuis la racine de folderArchiveUnit
if (folderArchiveUnit != null) {
// Dans le cas où l'AU est inclue dans plusieurs niveaux de répertoires, on recherche la bonne AU pour y glisser la donnée
String[] pathElements = fichMeta.getNomFichier().split("/");
ArchiveUnitType archiveUnitContainingFile = folderArchiveUnit;
int cptIndexAU;
if(pathElements.length>1) {
for(int i = 1; i<pathElements.length; i++) {
if(i==pathElements.length-1) {
archiveUnitContainingFile.getArchiveUnitOrArchiveUnitReferenceAbstractOrDataObjectReference().add(archiveUnit);
} else {
cptIndexAU =0;
for (Object archiveUnitLoop :archiveUnitContainingFile.getArchiveUnitOrArchiveUnitReferenceAbstractOrDataObjectReference()) {
//Si on a bien un répertoire, on vérifie le title pour voir si on a la bonne AU
if(((ArchiveUnitType) archiveUnitLoop).getContent().getDescriptionLevel().value().equalsIgnoreCase("FILE")
&& (((ArchiveUnitType) archiveUnitLoop).getContent())
.getTitle().get(0).getValue().equalsIgnoreCase(pathElements[i])) {
archiveUnitContainingFile = (ArchiveUnitType) archiveUnitContainingFile.getArchiveUnitOrArchiveUnitReferenceAbstractOrDataObjectReference().get(cptIndexAU);
} else {
cptIndexAU++;
}
}
}
}
} else {
folderArchiveUnit.getArchiveUnitOrArchiveUnitReferenceAbstractOrDataObjectReference().add(archiveUnit);
}
//folderArchiveUnit.getArchiveUnitOrArchiveUnitReferenceAbstractOrDataObjectReference().add(archiveUnit);
return folderArchiveUnit;
}
return archiveUnit;
}
......@@ -1631,22 +1665,32 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
* @param {@link String} subFolderPath Un chemin de répertoire au format REP/SOU-REP/SOUS-SOUS-REP
* @return {@link ArchiveUnitType} Retourne l'AU la plus profonde, la feuille.
*/
private ArchiveUnitType buildSubFolderArchiveUnit(String subFolderPath) {
private ArchiveUnitType buildSubFolderArchiveUnit(String subFolderPathPart, String subFolderPath, int nbIteration) {
nbIteration++;
// Si l'AU est déjà existante, on la renvoie
if (mapFolderArchiveUnit.get(subFolderPath) != null)
return mapFolderArchiveUnit.get(subFolderPath);
String[] pathElements = subFolderPath.split("/");
String[] pathElements = subFolderPathPart.split("/");
// Le title de l'AU courante est le premier element du tableau
// i.e DOSSIER/SOUS-DOSSIER
// title est DOSSIER
String[] subFolderPathKeyList = subFolderPath.split("/");
String firstElementKey = "";
for(int i=0; i<nbIteration;i++) {
if(i==0) {
firstElementKey = subFolderPathKeyList[0];
} else {
firstElementKey = firstElementKey + "/" + subFolderPathKeyList[i];
}
}
String title = pathElements[0];
ArchiveUnitType folderAU = null;
if (mapFolderArchiveUnit.get(title) != null) {
folderAU = mapFolderArchiveUnit.get(title);
if (mapFolderArchiveUnit.get(firstElementKey) != null) {
folderAU = mapFolderArchiveUnit.get(firstElementKey);
} else {
folderAU = objectFactory.createArchiveUnitType();
folderAU.setId("FOLDERID" + folderIdCounter++);
......@@ -1663,10 +1707,21 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
if ((pathElements.length > 1) && (mapFolderArchiveUnit.get(subFolderPath) == null)) {
String subSubFolderName = Arrays.stream(pathElements, 1, pathElements.length).collect(Collectors.joining("/"));
ArchiveUnitType subFolderAU = null;
subFolderAU = buildSubFolderArchiveUnit(subSubFolderName);
folderAU.getArchiveUnitOrArchiveUnitReferenceAbstractOrDataObjectReference().add(subFolderAU);
mapFolderArchiveUnit.put(subFolderPath, subFolderAU);
return subFolderAU;
subFolderAU = buildSubFolderArchiveUnit(subSubFolderName, subFolderPath, nbIteration);
if(!folderAU.getArchiveUnitOrArchiveUnitReferenceAbstractOrDataObjectReference().contains(subFolderAU))
folderAU.getArchiveUnitOrArchiveUnitReferenceAbstractOrDataObjectReference().add(subFolderAU);
//On reconstruit le chemin menant à l'AU pour pouvoir le retrouver en cas de besoin
String subFolderPathKey = "";
for(int i=0; i<nbIteration;i++) {
if(i==0) {
subFolderPathKey = subFolderPathKeyList[0];
} else {
subFolderPathKey = subFolderPathKey + "/" + subFolderPathKeyList[i];
}
}
mapFolderArchiveUnit.put(subFolderPathKey, folderAU);
return folderAU;
} else {
mapFolderArchiveUnit.put(subFolderPath, folderAU);
return folderAU;
......
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