Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
/**
* The Class CSVMetadataFormatter.
* <p>
* It's a utility class for {@link CSVMetadataToDataObjectPackageImporter} to analyse header line, and then interpret other lines through the formatter.
* It's a utility class for {@link CSVMetadataToDataObjectPackageImporter} to
* analyse header line, and then interpret other lines through the formatter.
*/
public class CSVMetadataFormatter {
/**
Expand Down Expand Up @@ -54,7 +55,6 @@ public String toString() {
}
}


private class ValueAttrMetadataTag {
boolean isValue;
MetadataTag tag;
Expand All @@ -80,9 +80,8 @@ public ValueAttrMetadataTag(boolean isValue, MetadataTag tag) {
* The first columns header names.
*/
private static final List<String> MANDATORY_TRAILING_HEADERS = Arrays.asList(
ID, FILE, PARENTID, PARENTFILE, OBJECTFILES
);
private MetadataTag rootTag, contentTag, managementTag;
ID, FILE, PARENTID, PARENTFILE, OBJECTFILES);
private MetadataTag rootTag, contentTag, managementTag, archiveUnitProfileTag;
private LinkedHashMap<Integer, ValueAttrMetadataTag> tagHeaderColumnMapping;
private int numberOfMandatoryHeaderFound;
private int columnCount;
Expand All @@ -95,7 +94,6 @@ public ValueAttrMetadataTag(boolean isValue, MetadataTag tag) {
private int parentGUIDColumn;
private boolean isOnlyFile;


private void analyseFirstColumns(String[] headerRow) throws SEDALibException {
List<String> firstsMandatoryHeadersFound = new ArrayList<>();
for (int i = 0; i < 4; i++) {
Expand All @@ -112,38 +110,44 @@ private void analyseFirstColumns(String[] headerRow) throws SEDALibException {
fileColumn = 0;
objectfilesColumn = -1;
parentGUIDColumn = -1;
} else if (numberOfMandatoryHeaderFound == 2 && firstsMandatoryHeadersFound.containsAll(List.of(FILE, PARENTFILE))) {
} else if (numberOfMandatoryHeaderFound == 2
&& firstsMandatoryHeadersFound.containsAll(List.of(FILE, PARENTFILE))) {
isOnlyFile = false;
guidColumn = firstsMandatoryHeadersFound.indexOf(FILE);
fileColumn = guidColumn;
objectfilesColumn = -1;
parentGUIDColumn = firstsMandatoryHeadersFound.indexOf(PARENTFILE);
} else if (numberOfMandatoryHeaderFound == 3 && firstsMandatoryHeadersFound.containsAll(List.of(FILE, PARENTFILE, ID))) {
} else if (numberOfMandatoryHeaderFound == 3
&& firstsMandatoryHeadersFound.containsAll(List.of(FILE, PARENTFILE, ID))) {
isOnlyFile = false;
guidColumn = firstsMandatoryHeadersFound.indexOf(ID);
fileColumn = firstsMandatoryHeadersFound.indexOf(FILE);
objectfilesColumn = -1;
parentGUIDColumn = firstsMandatoryHeadersFound.indexOf(PARENTFILE);
} else if (numberOfMandatoryHeaderFound == 3 && firstsMandatoryHeadersFound.containsAll(List.of(FILE, PARENTID, ID))) {
} else if (numberOfMandatoryHeaderFound == 3
&& firstsMandatoryHeadersFound.containsAll(List.of(FILE, PARENTID, ID))) {
isOnlyFile = false;
guidColumn = firstsMandatoryHeadersFound.indexOf(ID);
fileColumn = firstsMandatoryHeadersFound.indexOf(FILE);
objectfilesColumn = -1;
parentGUIDColumn = firstsMandatoryHeadersFound.indexOf(PARENTID);
} else if (numberOfMandatoryHeaderFound == 3 && firstsMandatoryHeadersFound.containsAll(List.of(OBJECTFILES, PARENTID, ID))) {
} else if (numberOfMandatoryHeaderFound == 3
&& firstsMandatoryHeadersFound.containsAll(List.of(OBJECTFILES, PARENTID, ID))) {
isOnlyFile = false;
guidColumn = firstsMandatoryHeadersFound.indexOf(ID);
fileColumn = -1;
objectfilesColumn = firstsMandatoryHeadersFound.indexOf(OBJECTFILES);
parentGUIDColumn = firstsMandatoryHeadersFound.indexOf(PARENTID);
} else if (numberOfMandatoryHeaderFound == 4 && firstsMandatoryHeadersFound.containsAll(List.of(FILE, OBJECTFILES, PARENTID, ID))) {
} else if (numberOfMandatoryHeaderFound == 4
&& firstsMandatoryHeadersFound.containsAll(List.of(FILE, OBJECTFILES, PARENTID, ID))) {
isOnlyFile = false;
guidColumn = firstsMandatoryHeadersFound.indexOf(ID);
objectfilesColumn = firstsMandatoryHeadersFound.indexOf(OBJECTFILES);
fileColumn = firstsMandatoryHeadersFound.indexOf(FILE);
parentGUIDColumn = firstsMandatoryHeadersFound.indexOf(PARENTID);
} else {
throw new SEDALibException("Le header [" + String.join("|", headerRow) + "] est mal formatté. Il doit contenir au début soit une colonne File, " +
throw new SEDALibException("Le header [" + String.join("|", headerRow)
+ "] est mal formatté. Il doit contenir au début soit une colonne File, " +
"soit deux colonnes File et ParentFile, soit trois colonnes ID, File et ParentFile ou ID, File " +
", soit quatre colonnes ID, ParentID, File, ObjectFiles " +
"et ParentID.");
Expand All @@ -167,6 +171,8 @@ private MetadataTag getInSubTagsMap(MetadataTag tag, String name, int rank) thro
contentTag = subTag;
} else if (name.equals("Management")) {
managementTag = subTag;
} else if (name.equals("ArchiveUnitProfile")) {
archiveUnitProfileTag = subTag;
} else {
throw new SEDALibException("Métadonnées [" + name + "] non conforme SEDA.");
}
Expand Down Expand Up @@ -198,7 +204,7 @@ private MetadataTag getTag(MetadataTag tag, List<String> splittedMetadataName) t
rank = Integer.parseInt(splittedMetadataName.get(1));
splittedMetadataName.remove(0);
} catch (Exception e) {
//ignored
// ignored
}
}
MetadataTag subTag = getInSubTagsMap(tag, name, rank);
Expand All @@ -213,7 +219,9 @@ private void analyseTags(String[] headerRow) throws SEDALibException {
if (headerRow.length <= numberOfMandatoryHeaderFound) {
throw new SEDALibException("Pas de colonne de métadonnées.");
}
if (headerRow[numberOfMandatoryHeaderFound].startsWith("Content.") || headerRow[numberOfMandatoryHeaderFound].startsWith("Management.")) {
if (headerRow[numberOfMandatoryHeaderFound].startsWith("Content.") ||
headerRow[numberOfMandatoryHeaderFound].startsWith("Management.") ||
headerRow[numberOfMandatoryHeaderFound].startsWith("ArchiveUnitProfile")) {
rootTag = new MetadataTag(null, null);
contentTag = null;
} else {
Expand Down Expand Up @@ -448,7 +456,8 @@ private String generateTagXML(MetadataTag tag) throws SEDALibException {
return "";
}
if (!value.isEmpty() && (tag.value != null) && !tag.value.isEmpty()) {
throw new SEDALibException("Il ne peut y avoir une valeur et des sous-éléments dans un élément SEDA [" + tag + "].");
throw new SEDALibException(
"Il ne peut y avoir une valeur et des sous-éléments dans un élément SEDA [" + tag + "].");
}
if (tag.name != null) {
result = "<" + tag.name;
Expand Down Expand Up @@ -499,6 +508,18 @@ public String extractManagementXML() throws SEDALibException {
return generateTagXML(managementTag);
}

/**
* Extract the XML ArchiveUnitProfile metadata
*
* @return the XML ArchiveUnitProfile metadata or null
* @throws SEDALibException the seda lib exception
*/
public String extractArchiveUnitProfileXML() throws SEDALibException {
if (archiveUnitProfileTag == null) {
return "";
}
return generateTagXML(archiveUnitProfileTag);
}

/**
* Gets guid.
Expand Down
Loading