Fix bug in MetadataImport where it could call addMetadata() with empty values. Minor refactors to MetadataImportIT to make findItemByName more efficient.

This commit is contained in:
Tim Donohue
2024-05-24 12:01:03 -05:00
parent 25f722ed98
commit f8ac8edc49
2 changed files with 21 additions and 16 deletions

View File

@@ -825,8 +825,10 @@ public class MetadataImport extends DSpaceRunnable<MetadataImportScriptConfigura
addRelationships(c, item, element, values); addRelationships(c, item, element, values);
} else { } else {
itemService.clearMetadata(c, item, schema, element, qualifier, language); itemService.clearMetadata(c, item, schema, element, qualifier, language);
itemService.addMetadata(c, item, schema, element, qualifier, if (!values.isEmpty()) {
language, values, authorities, confidences); itemService.addMetadata(c, item, schema, element, qualifier,
language, values, authorities, confidences);
}
itemService.update(c, item); itemService.update(c, item);
} }
} }
@@ -1121,8 +1123,8 @@ public class MetadataImport extends DSpaceRunnable<MetadataImportScriptConfigura
.getAuthoritySeparator() + dcv.getConfidence(); .getAuthoritySeparator() + dcv.getConfidence();
} }
// Add it // Add it, if value is not blank
if ((value != null) && (!"".equals(value))) { if (value != null && StringUtils.isNotBlank(value)) {
changes.registerAdd(dcv); changes.registerAdd(dcv);
} }
} }

View File

@@ -9,12 +9,12 @@ package org.dspace.app.bulkedit;
import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue; import static junit.framework.TestCase.assertTrue;
import static junit.framework.TestCase.fail;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.sql.SQLException;
import java.util.List; import java.util.List;
import org.apache.commons.cli.ParseException; import org.apache.commons.cli.ParseException;
@@ -218,9 +218,10 @@ public class MetadataImportIT extends AbstractIntegrationTestWithDatabase {
@Test @Test
public void metadataImportRemovingValueTest() throws Exception { public void metadataImportRemovingValueTest() throws Exception {
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
Item item = ItemBuilder.createItem(context,personCollection).withAuthor("TestAuthorToRemove").withTitle("title") String itemTitle = "Testing removing author";
Item item = ItemBuilder.createItem(context,personCollection).withAuthor("TestAuthorToRemove")
.withTitle(itemTitle)
.build(); .build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
@@ -232,19 +233,21 @@ public class MetadataImportIT extends AbstractIntegrationTestWithDatabase {
String[] csv = {"id,collection,dc.title,dc.contributor.author[*]", String[] csv = {"id,collection,dc.title,dc.contributor.author[*]",
item.getID().toString() + "," + personCollection.getHandle() + "," + item.getName() + ","}; item.getID().toString() + "," + personCollection.getHandle() + "," + item.getName() + ","};
performImportScript(csv); performImportScript(csv);
item = findItemByName("title"); item = findItemByName(itemTitle);
assertEquals(0, itemService.getMetadata(item, "dc", "contributor", "author", Item.ANY).size()); assertEquals(0, itemService.getMetadata(item, "dc", "contributor", "author", Item.ANY).size());
} }
private Item findItemByName(String name) throws SQLException { private Item findItemByName(String name) throws Exception {
Item importedItem = null; List<Item> items =
List<Item> allItems = IteratorUtils.toList(itemService.findAll(context)); IteratorUtils.toList(itemService.findByMetadataField(context, "dc", "title", null, name));
for (Item item : allItems) {
if (item.getName().equals(name)) { if (items != null && !items.isEmpty()) {
importedItem = item; // Just return first matching Item. Tests should ensure name/title is unique.
} return items.get(0);
} else {
fail("Could not find expected Item with dc.title = '" + name + "'");
return null;
} }
return importedItem;
} }
public void performImportScript(String[] csv) throws Exception { public void performImportScript(String[] csv) throws Exception {