Fix bug in DSpaceObjectServiceImpl where MetadataValues were never being deleted, but just disassociated with objects.

This commit is contained in:
Tim Donohue
2016-07-12 12:59:14 -05:00
parent 3f98a52dd8
commit 09ad42eaec

View File

@@ -332,16 +332,15 @@ public abstract class DSpaceObjectServiceImpl<T extends DSpaceObject> implements
@Override @Override
public void clearMetadata(Context context, T dso, String schema, String element, String qualifier, String lang) throws SQLException { public void clearMetadata(Context context, T dso, String schema, String element, String qualifier, String lang) throws SQLException {
// We will build a list of values NOT matching the values to clear
Iterator<MetadataValue> metadata = dso.getMetadata().iterator(); Iterator<MetadataValue> metadata = dso.getMetadata().iterator();
while (metadata.hasNext()) while (metadata.hasNext())
{ {
MetadataValue metadataValue = metadata.next(); MetadataValue metadataValue = metadata.next();
// If this value matches, delete it
if (match(schema, element, qualifier, lang, metadataValue)) if (match(schema, element, qualifier, lang, metadataValue))
{ {
metadataValue.setDSpaceObject(null);
metadata.remove(); metadata.remove();
// metadataValueService.delete(context, metadataValue); metadataValueService.delete(context, metadataValue);
} }
} }
dso.setMetadataModified(); dso.setMetadataModified();
@@ -355,7 +354,7 @@ public abstract class DSpaceObjectServiceImpl<T extends DSpaceObject> implements
if(values.contains(metadataValue)) if(values.contains(metadataValue))
{ {
metadata.remove(); metadata.remove();
// metadataValueService.delete(context, metadataValue); metadataValueService.delete(context, metadataValue);
} }
} }
dso.setMetadataModified(); dso.setMetadataModified();