mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-18 07:23:08 +00:00
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:
@@ -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)
|
||||
|
Reference in New Issue
Block a user