diff --git a/dspace-api/src/main/java/org/dspace/content/CollectionServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/CollectionServiceImpl.java index 7c7f287b4c..7081e7c50e 100644 --- a/dspace-api/src/main/java/org/dspace/content/CollectionServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/CollectionServiceImpl.java @@ -547,17 +547,18 @@ public class CollectionServiceImpl extends DSpaceObjectServiceImpl i @Override public void removeItem(Context context, Collection collection, Item item) throws SQLException, AuthorizeException, IOException { - // Check authorisation + // Check authorisation authorizeService.authorizeAction(context, collection, Constants.REMOVE); - //Remove the item from the collection - item.removeCollection(collection); - //Check if we orphaned our poor item - if (item.getCollections().isEmpty()) + if (item.getCollections().size() == 1) { // Orphan; delete it itemService.delete(context, item); + } else { + //Remove the item from the collection if we have multiple collections + item.removeCollection(collection); + } context.addEvent(new Event(Event.REMOVE, Constants.COLLECTION, diff --git a/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java index 043c7d9284..ac12adb60f 100644 --- a/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java @@ -578,8 +578,6 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl implements It @Override public void delete(Context context, Item item) throws SQLException, AuthorizeException, IOException { authorizeService.authorizeAction(context, item, Constants.DELETE); - item.getCollections().clear(); - item.setOwningCollection(null); rawDelete(context, item); } @@ -603,14 +601,19 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl implements It // Remove bundles removeAllBundles(context, item); + // remove version attached to the item + removeVersion(context, item); + + //Only clear collections after we have removed everything else from the item + item.getCollections().clear(); + item.setOwningCollection(null); + // remove all of our authorization policies authorizeService.removeAllPolicies(context, item, false); // Remove any Handle handleService.unbindHandle(context, item); - // remove version attached to the item - removeVersion(context, item); // Finally remove item row itemDAO.delete(context, item);