Commit 2314e415 authored by marceteau's avatar marceteau
Browse files

refactoring + debug + balise relation mappée pour BSU

parent 032f17e6
......@@ -21,7 +21,10 @@
*/
package fr.cines.pac.converter;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
......@@ -303,6 +306,60 @@ public abstract class AbstractArchiveConverter implements ManifestConverter {
}
}
/**
* cherche le bon fichier properties pour un service versant et un filePlan donné
* puis retourne un tableau de string contenant les valeurs planClassement, sydtemId, descriptionLevel, title
* Dans le cas où il n'y a qu'un fichier properties pour un service versant, la valeur "/" est indiquée par défaut
*
* @param filePath
* @param agency
* @return
* @throws IOException
* @throws Exception
*/
protected static String propertiesCorespondance(String filePath, String agency, String planClassement) {
try(BufferedReader br = new BufferedReader(new FileReader(filePath + "/correspondances_properties.csv"))) {
String ligne = null;
agency = agency.trim();
if (planClassement==null) {
planClassement = "/";
}
planClassement = planClassement.trim();
String defaultProperties = "";
while ((ligne = br.readLine()) != null)
{
String[] data = ligne.split("\t");
if (data.length == 3) {
String agencyFile = data[0].trim();
String planClassementFile = data[1].trim();
if(agency.equalsIgnoreCase(agencyFile) && planClassement.equalsIgnoreCase(planClassementFile)) {
br.close();
return data[2];
} else if(agency.equalsIgnoreCase(agencyFile) && "/".equalsIgnoreCase(planClassementFile)) {
defaultProperties = data[2];
}
}
}
if(!defaultProperties.equals("")) {
br.close();
return defaultProperties;
}
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//TODO : lever une exception car on n'a pas de fichier properties
return null;
}
public String detectLanguage(String string) {
detector.setShortText(true);
LanguageResult result = detector.detect(string);
......
......@@ -328,7 +328,11 @@ public class ArchiveConverterMain {
ArchiveConverter archiveConverter = null;
if(formalism.equals("sip") || formalism.equals("aip")) {
archiveConverter = new DCToSeda21TarMaker(this.agency, this.planClassementFile.toString(), formalism);
if(this.planClassementFile != null) {
archiveConverter = new DCToSeda21TarMaker(this.agency, this.planClassementFile.toString(), formalism);
} else {
archiveConverter = new DCToSeda21TarMaker(this.agency, null, formalism);
}
}else if(formalism.equals("seda1")) {
archiveConverter = new Seda1ToSeda21TarMaker(this.agency);
}else {
......
......@@ -238,6 +238,8 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
private static final String APPRAISAL_RULE = "AppraisalRule_Rule";
private static final String DISSEMINATION_RULE = "DisseminationRule_Rule";
private static final String PREFIXE_ARK = "prefixeARK";
//Relation est un cas particulier pour la BSU
private static final String RELATION = "relation";
/**
* Label présent dans des balises, à ne pas mapper en Tag
*/
......@@ -620,7 +622,7 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
}
try {
if(planClassementFilePath.equals(""))
if(planClassementFilePath == null || planClassementFilePath.equals(""))
throw new Exception("Aucun fichier de plan de classement fourni "
+ "alors que les propriétés demandent sa génération. "
+ "Ajoutez-le en entrée avec l'option -p ");
......@@ -721,16 +723,29 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
content.setCoverage(coverage);
}
if(sip.getDocDC().getSource() != null && !sip.getDocDC().getSource().isEmpty()) {
content.setSource(sip.getDocDC().getSource().get(0).getValue());
}
List<AgentType> writers = mapWriters(sip.getDocDC());
if (!writers.isEmpty())
content.getWriter().addAll(mapWriters(sip.getDocDC()));
if(!sip.getDocDC().getSource().isEmpty())
content.setSource(mapSource(sip.getDocDC()));
boolean takeRelation = Boolean.parseBoolean(properties.getProperty(RELATION));
if(takeRelation) {
String sourceString = content.getSource();
if(sourceString == null)
sourceString = "";
for(StringNotNULLtext relation : sip.getDocDC().getRelation()) {
if (sourceString.equalsIgnoreCase("")) {
sourceString += relation.getValue();
} else {
sourceString += " | " + relation.getValue();
}
}
if (!sourceString.equalsIgnoreCase("")) {
content.setSource(sourceString);
}
}
if(sip.getDocMeta().getVersion() != null && !sip.getDocMeta().getVersion().isEmpty())
content.setVersion(sip.getDocMeta().getVersion());
......@@ -1189,7 +1204,9 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
} catch (IOException e) {
logger.error("problème d'entrée/sortie lecture/écriture sur le fichier {}", document.getNomFichier());
} catch (UnknownFormatException e) {
logger.error("Impossible d'identifier le format du dichier {}", document.getNomFichier());
logger.error("Impossible d'identifier le format du fichier {}", document.getNomFichier());
} catch (Exception e) {
logger.error("Identification impossible du format du fichier {}", document.getNomFichier());
}
format = (ValidableFormat) validator.getIdentifiedFormat();
......@@ -2059,62 +2076,6 @@ public class DCToSeda21Converter extends AbstractArchiveConverter {
return null;
}
/**
* cherche le bon fichier properties pour un service versant et un filePlan donné
* puis retourne un tableau de string contenant les valeurs planClassement, sydtemId, descriptionLevel, title
* Dans le cas où il n'y a qu'un fichier properties pour un service versant, la valeur "/" est indiquée par défaut
*
* @param filePath
* @param agency
* @return
* @throws IOException
* @throws Exception
*/
private static String propertiesCorespondance(String filePath, String agency, String planClassement)
{
try(BufferedReader br = new BufferedReader(new FileReader(filePath + "/correspondances_properties.csv"))) {
String ligne = null;
agency = agency.trim();
if (planClassement==null) {
planClassement = "/";
}
planClassement = planClassement.trim();
String defaultProperties = "";
while ((ligne = br.readLine()) != null)
{
String[] data = ligne.split("\t");
if (data.length == 3) {
String agencyFile = data[0].trim();
String planClassementFile = data[1].trim();
if(agency.equalsIgnoreCase(agencyFile) && planClassement.equalsIgnoreCase(planClassementFile)) {
br.close();
return data[2];
} else if(agency.equalsIgnoreCase(agencyFile) && "/".equalsIgnoreCase(planClassementFile)) {
defaultProperties = data[2];
}
}
}
if(!defaultProperties.equals("")) {
br.close();
return defaultProperties;
}
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//TODO : lever une exception car on n'a pas de fichier properties
return null;
}
public List<DataObjectMapper> getDataObjectMapper() {
return dataObjectMapper;
}
......
......@@ -779,11 +779,14 @@ public class Seda1ToSeda21Converter extends AbstractArchiveConverter {
}
// Le format - identifiant pronom va dans le bloc <FormatIdentification>
String filePathString = document.getAttachment().getFilename();
String[] filePathString = document.getAttachment().getFilename().split("/");
//On ne garde que le nom du fichier, et non pas le chemin relatif (qui ne correspond pas)
String fileNameString = filePathString[filePathString.length -1];
/**
* Chemin du fichier sur le système pour la validation de format
*/
Path filePath = this.rootFolder.resolve(Paths.get(filePathString));
Path filePath = this.rootFolder.resolve(Paths.get("Content/" + fileNameString));
ValidableFormat format = null;
if(!isOnlyManifest()) {
......@@ -834,7 +837,7 @@ public class Seda1ToSeda21Converter extends AbstractArchiveConverter {
String unitCode = measure.getUnitCode();
BigDecimal sizeValue = measure.getValue();
if (unitCode != null && !unitCode.equals("") && !unitCode.equalsIgnoreCase("AD"))
System.err.println("Attention la taille du fichier " + document.getAttachment().getFilename() + " n'est pas exprimé en octets. Code : " + unitCode);
System.err.println("Attention la taille du fichier " + fileNameString + " n'est pas exprimé en octets. Code : " + unitCode);
binaryDataObject.setSize(sizeValue.toBigInteger());
} else {
......
Markdown is supported
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