Skip to content

Commit ceef4b3

Browse files
authored
Merge pull request DSpace#11197 from atmire/w2p-133543_Hide-Metadata-DSpace-CSV
DSpaceCSV respect metadata.hide properties
2 parents 61a8eba + af97f92 commit ceef4b3

4 files changed

Lines changed: 141 additions & 18 deletions

File tree

dspace-api/src/main/java/org/dspace/app/bulkedit/DSpaceCSV.java

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.commons.io.IOUtils;
2828
import org.apache.commons.lang3.StringUtils;
2929
import org.apache.commons.lang3.Strings;
30+
import org.dspace.app.util.MetadataExposureServiceImpl;
3031
import org.dspace.authority.AuthorityValue;
3132
import org.dspace.authority.factory.AuthorityServiceFactory;
3233
import org.dspace.authority.service.AuthorityValueService;
@@ -323,20 +324,7 @@ protected void init() {
323324
// Set the metadata fields to ignore
324325
ignore = new HashMap<>();
325326

326-
// Specify default values
327-
String[] defaultValues =
328-
new String[] {
329-
"dc.date.accessioned", "dc.date.available", "dc.date.updated", "dc.description.provenance"
330-
};
331-
String[] toIgnoreArray =
332-
DSpaceServicesFactory.getInstance()
333-
.getConfigurationService()
334-
.getArrayProperty("bulkedit.ignore-on-export", defaultValues);
335-
for (String toIgnoreString : toIgnoreArray) {
336-
if (!"".equals(toIgnoreString.trim())) {
337-
ignore.put(toIgnoreString.trim(), toIgnoreString.trim());
338-
}
339-
}
327+
getConfiguredIgnoreFields();
340328
}
341329

342330
/**
@@ -354,6 +342,40 @@ public boolean hasActions() {
354342
return false;
355343
}
356344

345+
/**
346+
* Sets the ignored fields with 'bulkedit.ignore-on-export'
347+
*
348+
* Also adds 'metadata.hide.*' fields to ignored if 'bulkedit.ignore-on-export.include-metadata-hide' is true
349+
*/
350+
private void getConfiguredIgnoreFields() {
351+
// Specify default values
352+
String[] defaultValues =
353+
new String[] {
354+
"dc.date.accessioned", "dc.date.available", "dc.date.updated", "dc.description.provenance"
355+
};
356+
String[] toIgnoreArray =
357+
DSpaceServicesFactory.getInstance()
358+
.getConfigurationService()
359+
.getArrayProperty("bulkedit.ignore-on-export", defaultValues);
360+
361+
boolean ignoreHiddenMetadata = DSpaceServicesFactory.getInstance().getConfigurationService()
362+
.getBooleanProperty("bulkedit.ignore-on-export.include-metadata-hide", true);
363+
if (ignoreHiddenMetadata) {
364+
List<String> hiddenMetadata = DSpaceServicesFactory.getInstance().getConfigurationService()
365+
.getPropertyKeys(MetadataExposureServiceImpl.CONFIG_PREFIX);
366+
for (String hiddenMetadataKey : hiddenMetadata) {
367+
String key = hiddenMetadataKey.split(MetadataExposureServiceImpl.CONFIG_PREFIX)[1];
368+
ignore.put(key.trim(), key.trim());
369+
}
370+
}
371+
372+
for (String toIgnoreString : toIgnoreArray) {
373+
if (!"".equals(toIgnoreString.trim())) {
374+
ignore.put(toIgnoreString.trim(), toIgnoreString.trim());
375+
}
376+
}
377+
}
378+
357379
/**
358380
* Set the value separator for multiple values stored in one csv value.
359381
*

dspace-api/src/main/java/org/dspace/app/util/MetadataExposureServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public class MetadataExposureServiceImpl implements MetadataExposureService {
6363
protected Map<String, Set<String>> hiddenElementSets = null;
6464
protected Map<String, Map<String, Set<String>>> hiddenElementMaps = null;
6565

66-
protected final String CONFIG_PREFIX = "metadata.hide.";
66+
public static final String CONFIG_PREFIX = "metadata.hide.";
6767

6868
@Autowired(required = true)
6969
protected AuthorizeService authorizeService;

dspace-api/src/test/java/org/dspace/app/bulkedit/DSpaceCSVTest.java renamed to dspace-api/src/test/java/org/dspace/app/bulkedit/DSpaceCSVIT.java

Lines changed: 101 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99

1010
import static org.hamcrest.CoreMatchers.equalTo;
1111
import static org.hamcrest.MatcherAssert.assertThat;
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertNotNull;
14+
import static org.junit.Assert.assertNull;
1215
import static org.junit.Assert.fail;
1316

1417
import java.io.BufferedWriter;
@@ -20,7 +23,15 @@
2023

2124
import org.apache.commons.io.FileUtils;
2225
import org.apache.logging.log4j.Logger;
23-
import org.dspace.AbstractUnitTest;
26+
import org.dspace.AbstractIntegrationTestWithDatabase;
27+
import org.dspace.builder.CollectionBuilder;
28+
import org.dspace.builder.CommunityBuilder;
29+
import org.dspace.builder.ItemBuilder;
30+
import org.dspace.content.Collection;
31+
import org.dspace.content.Item;
32+
import org.dspace.services.ConfigurationService;
33+
import org.dspace.services.factory.DSpaceServicesFactory;
34+
import org.junit.Before;
2435
import org.junit.Test;
2536

2637

@@ -29,11 +40,39 @@
2940
*
3041
* @author Stuart Lewis
3142
*/
32-
public class DSpaceCSVTest extends AbstractUnitTest {
43+
public class DSpaceCSVIT extends AbstractIntegrationTestWithDatabase {
3344
/**
3445
* log4j category
3546
*/
36-
private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(DSpaceCSVTest.class);
47+
private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(DSpaceCSVIT.class);
48+
49+
ConfigurationService configurationService = DSpaceServicesFactory.getInstance().getConfigurationService();
50+
51+
Item testItem;
52+
53+
54+
@Override
55+
@Before
56+
public void setUp() throws Exception {
57+
super.setUp();
58+
context.turnOffAuthorisationSystem();
59+
60+
parentCommunity = CommunityBuilder.createCommunity(context)
61+
.withName("Parent Community")
62+
.build();
63+
configurationService.addPropertyValue("metadata.hide.dc.subject", true);
64+
65+
Collection parentCollection = CollectionBuilder.createCollection(context, parentCommunity)
66+
.withName("Parent Collection")
67+
.build();
68+
69+
testItem = ItemBuilder.createItem(context, parentCollection).withTitle("Test Item")
70+
.withMetadata("dc", "description", "provenance", "provenance")
71+
.withMetadata("dc", "subject", null, "hidden subject")
72+
.build();
73+
74+
context.restoreAuthSystemState();
75+
}
3776

3877
/**
3978
* Test the reading and parsing of CSV files
@@ -147,4 +186,63 @@ public void testDSpaceCSV() {
147186
fail("IO Error while creating test CSV file");
148187
}
149188
}
189+
190+
/**
191+
* Test the hidden metadata for csv is respected
192+
*
193+
*/
194+
@Test
195+
public void testHiddenDspaceCSV() throws Exception {
196+
197+
DSpaceCSV dSpaceCSV = new DSpaceCSV(false);
198+
199+
dSpaceCSV.addItem(testItem);
200+
201+
List<DSpaceCSVLine> lines = dSpaceCSV.getCSVLines();
202+
203+
assertThat(lines.size(), equalTo(1));
204+
205+
DSpaceCSVLine line = lines.get(0);
206+
207+
List<String> subject = line.get("dc.subject");
208+
List<String> provenance = line.get("dc.description.provenance");
209+
List<String> title = line.get("dc.title");
210+
211+
assertNull(subject);
212+
assertNull(provenance);
213+
assertNotNull(title);
214+
assertEquals("Test Item", title.get(0));
215+
216+
}
217+
218+
/**
219+
* Test the hidden metadata is still shown when force is applied.
220+
*
221+
*/
222+
@Test
223+
public void testHiddenDspaceForceCSV() throws Exception {
224+
225+
DSpaceCSV dSpaceCSV = new DSpaceCSV(true);
226+
227+
dSpaceCSV.addItem(testItem);
228+
229+
List<DSpaceCSVLine> lines = dSpaceCSV.getCSVLines();
230+
231+
assertThat(lines.size(), equalTo(1));
232+
233+
DSpaceCSVLine line = lines.get(0);
234+
235+
List<String> subject = line.get("dc.subject");
236+
List<String> provenance = line.get("dc.description.provenance");
237+
List<String> title = line.get("dc.title");
238+
239+
assertNotNull(subject);
240+
assertNotNull(provenance);
241+
assertEquals("hidden subject", subject.get(0));
242+
assertEquals("provenance", provenance.get(0));
243+
assertNotNull(title);
244+
assertEquals("Test Item", title.get(0));
245+
246+
}
247+
150248
}

dspace/config/modules/bulkedit.cfg

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,6 @@ bulkedit.change.commit.count = 100
4444
# Recommend to keep this at a feasible number, as exporting large amounts of items can be resource intensive
4545
# If not set, this will default to 500 items
4646
# bulkedit.export.max.items = 500
47+
48+
# Bulkedit setting to add metadata.hide fields to ignored fields defaults to true
49+
# bulkedit.ignore-on-export.include-metadata-hide = true

0 commit comments

Comments
 (0)