Remaining refactor of REST API methods to use DSpace Services

REST compiles now. However, DSpace still doesn't boot, so its hard to verify
This commit is contained in:
Peter Dietz
2015-08-21 18:16:01 -04:00
parent 59652bf407
commit 9573bb4529
9 changed files with 313 additions and 397 deletions

View File

@@ -10,6 +10,7 @@ package org.dspace.rest;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
@@ -31,10 +32,15 @@ import javax.ws.rs.core.Response;
import org.apache.log4j.Logger;
import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.AuthorizeServiceImpl;
import org.dspace.authorize.factory.AuthorizeServiceFactory;
import org.dspace.authorize.service.AuthorizeService;
import org.dspace.browse.BrowseException;
import org.dspace.content.InstallItemServiceImpl;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.CollectionService;
import org.dspace.content.service.InstallItemService;
import org.dspace.content.service.ItemService;
import org.dspace.content.service.WorkspaceItemService;
import org.dspace.core.Constants;
import org.dspace.rest.common.Collection;
import org.dspace.rest.common.Item;
import org.dspace.rest.common.MetadataEntry;
@@ -49,6 +55,12 @@ import org.dspace.usage.UsageEvent;
@Path("/collections")
public class CollectionsResource extends Resource
{
protected CollectionService collectionService = ContentServiceFactory.getInstance().getCollectionService();
protected ItemService itemService = ContentServiceFactory.getInstance().getItemService();
protected AuthorizeService authorizeService = AuthorizeServiceFactory.getInstance().getAuthorizeService();
protected WorkspaceItemService workspaceItemService = ContentServiceFactory.getInstance().getWorkspaceItemService();
protected InstallItemService installItemService = ContentServiceFactory.getInstance().getInstallItemService();
private static Logger log = Logger.getLogger(CollectionsResource.class);
/**
@@ -175,10 +187,10 @@ public class CollectionsResource extends Resource
offset = 0;
}
org.dspace.content.Collection[] dspaceCollections = org.dspace.content.Collection.findAll(context, limit, offset);
List<org.dspace.content.Collection> dspaceCollections = collectionService.findAll(context, limit, offset);
for(org.dspace.content.Collection dspaceCollection : dspaceCollections)
{
if (AuthorizeServiceImpl.authorizeActionBoolean(context, dspaceCollection, org.dspace.core.Constants.READ))
if (authorizeService.authorizeActionBoolean(context, dspaceCollection, org.dspace.core.Constants.READ))
{
Collection collection = new org.dspace.rest.common.Collection(dspaceCollection, null, context, limit,
offset);
@@ -259,13 +271,13 @@ public class CollectionsResource extends Resource
headers, request, context);
items = new ArrayList<Item>();
org.dspace.content.ItemIterator dspaceItems = dspaceCollection.getItems();
Iterator<org.dspace.content.Item> dspaceItems = itemService.findByCollection(context, dspaceCollection);
for (int i = 0; (dspaceItems.hasNext()) && (i < (limit + offset)); i++)
{
if (i >= offset)
{
org.dspace.content.Item dspaceItem = dspaceItems.next();
if (ItemService.isItemListedForUser(context, dspaceItem))
if (itemService.isItemListedForUser(context, dspaceItem))
{
items.add(new Item(dspaceItem, expand, context));
writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwardedfor,
@@ -340,8 +352,7 @@ public class CollectionsResource extends Resource
headers, request, context);
log.trace("Creating item in collection(id=" + collectionId + ").");
org.dspace.content.WorkspaceItem workspaceItem = org.dspace.content.WorkspaceItem.create(context, dspaceCollection,
false);
org.dspace.content.WorkspaceItem workspaceItem = workspaceItemService.create(context, dspaceCollection, false);
org.dspace.content.Item dspaceItem = workspaceItem.getItem();
log.trace("Adding metadata to item(id=" + dspaceItem.getID() + ").");
@@ -350,17 +361,16 @@ public class CollectionsResource extends Resource
for (MetadataEntry entry : item.getMetadata())
{
String data[] = mySplit(entry.getKey());
dspaceItem.addMetadata(data[0], data[1], data[2], entry.getLanguage(), entry.getValue());
itemService.addMetadata(context, dspaceItem, data[0], data[1], data[2], entry.getLanguage(), entry.getValue());
}
}
workspaceItem.update();
// Index item to browse.
org.dspace.browse.IndexBrowse browse = new org.dspace.browse.IndexBrowse();
browse.indexItem(dspaceItem);
log.trace("Installing item to collection(id=" + collectionId + ").");
dspaceItem = InstallItemServiceImpl.installItem(context, workspaceItem);
dspaceItem = installItemService.installItem(context, workspaceItem);
returnItem = new Item(dspaceItem, "", context);
@@ -376,10 +386,6 @@ public class CollectionsResource extends Resource
processException("Could not add item into collection(id=" + collectionId + "), AuthorizeException. Message: " + e,
context);
}
catch (IOException e)
{
processException("Could not add item into collection(id=" + collectionId + "), IOException. Message: " + e, context);
}
catch (BrowseException e)
{
processException("Could not add item into browse index, BrowseException. Message: " + e, context);
@@ -439,14 +445,14 @@ public class CollectionsResource extends Resource
writeStats(dspaceCollection, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwardedfor,
headers, request, context);
dspaceCollection.setMetadata("name", collection.getName());
dspaceCollection.setLicense(collection.getLicense());
collectionService.setMetadata(context, dspaceCollection, "name", collection.getName());
collectionService.setMetadata(context, dspaceCollection, "license", collection.getLicense());
// dspaceCollection.setLogo(collection.getLogo()); // TODO Add this option.
dspaceCollection.setMetadata(org.dspace.content.Collection.COPYRIGHT_TEXT, collection.getCopyrightText());
dspaceCollection.setMetadata(org.dspace.content.Collection.INTRODUCTORY_TEXT, collection.getIntroductoryText());
dspaceCollection.setMetadata(org.dspace.content.Collection.SHORT_DESCRIPTION, collection.getShortDescription());
dspaceCollection.setMetadata(org.dspace.content.Collection.SIDEBAR_TEXT, collection.getSidebarText());
dspaceCollection.update();
collectionService.setMetadata(context, dspaceCollection, org.dspace.content.Collection.COPYRIGHT_TEXT, collection.getCopyrightText());
collectionService.setMetadata(context, dspaceCollection, org.dspace.content.Collection.INTRODUCTORY_TEXT, collection.getIntroductoryText());
collectionService.setMetadata(context, dspaceCollection, org.dspace.content.Collection.SHORT_DESCRIPTION, collection.getShortDescription());
collectionService.setMetadata(context, dspaceCollection, org.dspace.content.Collection.SIDEBAR_TEXT, collection.getSidebarText());
context.complete();
@@ -460,10 +466,6 @@ public class CollectionsResource extends Resource
{
processException("Could not update collection(id=" + collectionId + "), SQLException. Message: " + e, context);
}
catch (AuthorizeException e)
{
processException("Could not update collection(id=" + collectionId + "), AuthorizeException. Message: " + e, context);
}
finally
{
processFinally(context);
@@ -511,16 +513,12 @@ public class CollectionsResource extends Resource
writeStats(dspaceCollection, UsageEvent.Action.REMOVE, user_ip, user_agent, xforwardedfor,
headers, request, context);
org.dspace.content.Community community = (org.dspace.content.Community) dspaceCollection.getParentObject();
community.removeCollection(dspaceCollection);
context.complete();
collectionService.delete(context, dspaceCollection);
}
catch (ContextException e)
{
processException(
"Could not delete collection(id=" + collectionId + "), ContextExcpetion. Message: " + e.getMessage(), context);
"Could not delete collection(id=" + collectionId + "), ContextException. Message: " + e.getMessage(), context);
}
catch (SQLException e)
{
@@ -577,32 +575,29 @@ public class CollectionsResource extends Resource
try
{
context = createContext(getUser(headers));
org.dspace.content.Collection dspaceCollection = findCollection(context, collectionId,
org.dspace.core.Constants.WRITE);
org.dspace.content.Item item = null;
org.dspace.content.ItemIterator dspaceItems = dspaceCollection.getItems();
while (dspaceItems.hasNext())
{
org.dspace.content.Item dspaceItem = dspaceItems.next();
if (dspaceItem.getID() == itemId)
{
item = dspaceItem;
}
org.dspace.content.Collection dspaceCollection = collectionService.findByLegacyId(context, collectionId);
org.dspace.content.Item item = itemService.findByLegacyId(context, itemId);
if(dspaceCollection == null) {
//throw collection not exist
log.warn("Collection(id=" + itemId + ") was not found!");
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
if (item == null)
{
context.abort();
if(item == null) {
//throw item not exist
log.warn("Item(id=" + itemId + ") was not found!");
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
else if (!AuthorizeServiceImpl.authorizeActionBoolean(context, item, org.dspace.core.Constants.REMOVE))
{
context.abort();
if(!authorizeService.authorizeActionBoolean(context, item, Constants.REMOVE)
|| !authorizeService.authorizeActionBoolean(context, dspaceCollection, Constants.REMOVE)) {
//throw auth
if (context.getCurrentUser() != null)
{
log.error("User(" + context.getCurrentUser().getEmail() + ") has not permission to delete item!");
log.error("User(" + context.getCurrentUser().getEmail() + ") does not have permission to delete item!");
}
else
{
@@ -611,12 +606,12 @@ public class CollectionsResource extends Resource
throw new WebApplicationException(Response.Status.UNAUTHORIZED);
}
collectionService.removeItem(context, dspaceCollection, item);
writeStats(dspaceCollection, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwardedfor,
headers, request, context);
writeStats(item, UsageEvent.Action.REMOVE, user_ip, user_agent, xforwardedfor, headers, request, context);
dspaceCollection.removeItem(item);
context.complete();
}
@@ -675,13 +670,13 @@ public class CollectionsResource extends Resource
try
{
context = createContext(getUser(headers));
org.dspace.content.Collection[] dspaceCollections;
dspaceCollections = org.dspace.content.Collection.findAll(context);
List<org.dspace.content.Collection> dspaceCollections = collectionService.findAll(context);
//TODO, this would be more efficient with a findByName query
for (org.dspace.content.Collection dspaceCollection : dspaceCollections)
{
if (AuthorizeServiceImpl.authorizeActionBoolean(context, dspaceCollection, org.dspace.core.Constants.READ))
if (authorizeService.authorizeActionBoolean(context, dspaceCollection, org.dspace.core.Constants.READ))
{
if (dspaceCollection.getName().equals(name))
{
@@ -742,7 +737,7 @@ public class CollectionsResource extends Resource
org.dspace.content.Collection collection = null;
try
{
collection = org.dspace.content.Collection.find(context, id);
collection = collectionService.findByLegacyId(context, id);
if (collection == null)
{
@@ -750,7 +745,7 @@ public class CollectionsResource extends Resource
log.warn("Collection(id=" + id + ") was not found!");
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
else if (!AuthorizeServiceImpl.authorizeActionBoolean(context, collection, action))
else if (!authorizeService.authorizeActionBoolean(context, collection, action))
{
context.abort();
if (context.getCurrentUser() != null)