diff --git a/dspace-rest/src/main/java/org/dspace/rest/BitstreamResource.java b/dspace-rest/src/main/java/org/dspace/rest/BitstreamResource.java index 4074dd81b3..dc3a590ede 100644 --- a/dspace-rest/src/main/java/org/dspace/rest/BitstreamResource.java +++ b/dspace-rest/src/main/java/org/dspace/rest/BitstreamResource.java @@ -101,7 +101,7 @@ public class BitstreamResource extends Resource org.dspace.content.Bitstream dspaceBitstream = findBitstream(context, bitstreamId, org.dspace.core.Constants.READ); writeStats(dspaceBitstream, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); bitstream = new Bitstream(dspaceBitstream, expand); context.complete(); @@ -241,7 +241,7 @@ public class BitstreamResource extends Resource // reading under administrator permissions bitstreams.add(new Bitstream(dspaceBitstreams[i], expand)); writeStats(dspaceBitstreams[i], UsageEvent.Action.VIEW, user_ip, user_agent, - xforwarderfor, headers, request); + xforwarderfor, headers, request, context); } } } @@ -308,7 +308,7 @@ public class BitstreamResource extends Resource org.dspace.content.Bitstream dspaceBitstream = findBitstream(context, bitstreamId, org.dspace.core.Constants.READ); writeStats(dspaceBitstream, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); log.trace("Bitsream(id=" + bitstreamId + ") data was successfully read."); inputStream = dspaceBitstream.retrieve(); @@ -463,7 +463,7 @@ public class BitstreamResource extends Resource org.dspace.content.Bitstream dspaceBitstream = findBitstream(context, bitstreamId, org.dspace.core.Constants.WRITE); writeStats(dspaceBitstream, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); log.trace("Updating bitstream metadata."); dspaceBitstream.setDescription(bitstream.getDescription()); @@ -594,7 +594,7 @@ public class BitstreamResource extends Resource org.dspace.content.Bitstream dspaceBitstream = findBitstream(context, bitstreamId, org.dspace.core.Constants.WRITE); writeStats(dspaceBitstream, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); log.trace("Creating new bitstream."); int newBitstreamId = BitstreamStorageManager.store(context, is); @@ -678,7 +678,7 @@ public class BitstreamResource extends Resource org.dspace.content.Bitstream dspaceBitstream = findBitstream(context, bitstreamId, org.dspace.core.Constants.DELETE); writeStats(dspaceBitstream, UsageEvent.Action.DELETE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); log.trace("Deleting bitstream from all bundles."); for (org.dspace.content.Bundle bundle : dspaceBitstream.getBundles()) diff --git a/dspace-rest/src/main/java/org/dspace/rest/CollectionsResource.java b/dspace-rest/src/main/java/org/dspace/rest/CollectionsResource.java index 7fc6138e28..acadb84df8 100644 --- a/dspace-rest/src/main/java/org/dspace/rest/CollectionsResource.java +++ b/dspace-rest/src/main/java/org/dspace/rest/CollectionsResource.java @@ -99,7 +99,7 @@ public class CollectionsResource extends Resource org.dspace.content.Collection dspaceCollection = findCollection(context, collectionId, org.dspace.core.Constants.READ); writeStats(dspaceCollection, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); collection = new Collection(dspaceCollection, expand, context, limit, offset); context.complete(); @@ -182,7 +182,7 @@ public class CollectionsResource extends Resource offset); collections.add(collection); writeStats(dspaceCollection, UsageEvent.Action.VIEW, user_ip, user_agent, - xforwarderfor, headers, request); + xforwarderfor, headers, request, context); } } context.complete(); @@ -254,7 +254,7 @@ public class CollectionsResource extends Resource org.dspace.content.Collection dspaceCollection = findCollection(context, collectionId, org.dspace.core.Constants.READ); writeStats(dspaceCollection, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); items = new ArrayList(); org.dspace.content.ItemIterator dspaceItems = dspaceCollection.getItems(); @@ -267,7 +267,7 @@ public class CollectionsResource extends Resource { items.add(new Item(dspaceItem, expand, context)); writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); } } } @@ -335,7 +335,7 @@ public class CollectionsResource extends Resource org.dspace.core.Constants.WRITE); writeStats(dspaceCollection, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); log.trace("Creating item in collection(id=" + collectionId + ")."); org.dspace.content.WorkspaceItem workspaceItem = org.dspace.content.WorkspaceItem.create(context, dspaceCollection, @@ -435,7 +435,7 @@ public class CollectionsResource extends Resource org.dspace.core.Constants.WRITE); writeStats(dspaceCollection, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); dspaceCollection.setMetadata("name", collection.getName()); dspaceCollection.setLicense(collection.getLicense()); @@ -451,7 +451,7 @@ public class CollectionsResource extends Resource } catch (ContextException e) { - processException("Could not update collection(id=" + collectionId + "), ContextEception. Message: " + e.getMessage(), + processException("Could not update collection(id=" + collectionId + "), ContextException. Message: " + e.getMessage(), context); } catch (SQLException e) @@ -507,7 +507,7 @@ public class CollectionsResource extends Resource org.dspace.core.Constants.DELETE); writeStats(dspaceCollection, UsageEvent.Action.REMOVE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); org.dspace.content.Community community = (org.dspace.content.Community) dspaceCollection.getParentObject(); community.removeCollection(dspaceCollection); @@ -610,8 +610,8 @@ public class CollectionsResource extends Resource } writeStats(dspaceCollection, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, - headers, request); - writeStats(item, UsageEvent.Action.REMOVE, user_ip, user_agent, xforwarderfor, headers, request); + headers, request, context); + writeStats(item, UsageEvent.Action.REMOVE, user_ip, user_agent, xforwarderfor, headers, request, context); dspaceCollection.removeItem(item); diff --git a/dspace-rest/src/main/java/org/dspace/rest/CommunitiesResource.java b/dspace-rest/src/main/java/org/dspace/rest/CommunitiesResource.java index 8fb93c39d6..5300aa09e1 100644 --- a/dspace-rest/src/main/java/org/dspace/rest/CommunitiesResource.java +++ b/dspace-rest/src/main/java/org/dspace/rest/CommunitiesResource.java @@ -87,7 +87,7 @@ public class CommunitiesResource extends Resource org.dspace.content.Community dspaceCommunity = findCommunity(context, communityId, org.dspace.core.Constants.READ); writeStats(dspaceCommunity, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); community = new Community(dspaceCommunity, expand, context); context.complete(); @@ -167,7 +167,7 @@ public class CommunitiesResource extends Resource { Community community = new Community(dspaceCommunities[i], expand, context); writeStats(dspaceCommunities[i], UsageEvent.Action.VIEW, user_ip, user_agent, - xforwarderfor, headers, request); + xforwarderfor, headers, request, context); communities.add(community); } } @@ -249,7 +249,7 @@ public class CommunitiesResource extends Resource { Community community = new Community(dspaceCommunities[i], expand, context); writeStats(dspaceCommunities[i], UsageEvent.Action.VIEW, user_ip, user_agent, - xforwarderfor, headers, request); + xforwarderfor, headers, request, context); communities.add(community); } } @@ -317,7 +317,7 @@ public class CommunitiesResource extends Resource org.dspace.content.Community dspaceCommunity = findCommunity(context, communityId, org.dspace.core.Constants.READ); writeStats(dspaceCommunity, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); if (!((limit != null) && (limit >= 0) && (offset != null) && (offset >= 0))) { @@ -334,7 +334,7 @@ public class CommunitiesResource extends Resource { collections.add(new Collection(dspaceCollections[i], expand, context, 20, 0)); writeStats(dspaceCollections[i], UsageEvent.Action.VIEW, user_ip, user_agent, - xforwarderfor, headers, request); + xforwarderfor, headers, request, context); } } @@ -403,7 +403,7 @@ public class CommunitiesResource extends Resource org.dspace.content.Community dspaceCommunity = findCommunity(context, communityId, org.dspace.core.Constants.READ); writeStats(dspaceCommunity, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); if (!((limit != null) && (limit >= 0) && (offset != null) && (offset >= 0))) { @@ -420,7 +420,7 @@ public class CommunitiesResource extends Resource { communities.add(new Community(dspaceCommunities[i], expand, context)); writeStats(dspaceCommunities[i], UsageEvent.Action.VIEW, user_ip, user_agent, - xforwarderfor, headers, request); + xforwarderfor, headers, request, context); } } @@ -490,7 +490,7 @@ public class CommunitiesResource extends Resource org.dspace.content.Community dspaceCommunity = org.dspace.content.Community.create(null, context); writeStats(dspaceCommunity, UsageEvent.Action.CREATE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); dspaceCommunity.setMetadata("name", community.getName()); dspaceCommunity.setMetadata(org.dspace.content.Community.COPYRIGHT_TEXT, community.getCopyrightText()); @@ -563,7 +563,7 @@ public class CommunitiesResource extends Resource org.dspace.content.Community dspaceCommunity = findCommunity(context, communityId, org.dspace.core.Constants.WRITE); writeStats(dspaceCommunity, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); org.dspace.content.Collection dspaceCollection = dspaceCommunity.createCollection(); dspaceCollection.setLicense(collection.getLicense()); @@ -648,7 +648,7 @@ public class CommunitiesResource extends Resource org.dspace.core.Constants.WRITE); writeStats(dspaceParentCommunity, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); org.dspace.content.Community dspaceCommunity = org.dspace.content.Community.create(dspaceParentCommunity, context); dspaceCommunity.setMetadata("name", community.getName()); @@ -726,7 +726,7 @@ public class CommunitiesResource extends Resource org.dspace.content.Community dspaceCommunity = findCommunity(context, communityId, org.dspace.core.Constants.WRITE); writeStats(dspaceCommunity, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); // dspaceCommunity.setLogo(arg0); // TODO Add this option. dspaceCommunity.setMetadata("name", community.getName()); @@ -793,7 +793,7 @@ public class CommunitiesResource extends Resource org.dspace.content.Community community = findCommunity(context, communityId, org.dspace.core.Constants.DELETE); writeStats(community, UsageEvent.Action.DELETE, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); community.delete(); context.complete(); @@ -893,9 +893,9 @@ public class CommunitiesResource extends Resource } writeStats(community, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); writeStats(collection, UsageEvent.Action.DELETE, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); community.removeCollection(collection); @@ -1000,9 +1000,9 @@ public class CommunitiesResource extends Resource } writeStats(parentCommunity, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); writeStats(subcommunity, UsageEvent.Action.DELETE, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); parentCommunity.removeSubcommunity(subcommunity); context.complete(); diff --git a/dspace-rest/src/main/java/org/dspace/rest/ItemsResource.java b/dspace-rest/src/main/java/org/dspace/rest/ItemsResource.java index 941f780e4c..cc0910b842 100644 --- a/dspace-rest/src/main/java/org/dspace/rest/ItemsResource.java +++ b/dspace-rest/src/main/java/org/dspace/rest/ItemsResource.java @@ -104,7 +104,7 @@ public class ItemsResource extends Resource context = createContext(getUser(headers)); org.dspace.content.Item dspaceItem = findItem(context, itemId, org.dspace.core.Constants.READ); - writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, request); + writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, request, context); item = new Item(dspaceItem, expand, context); context.complete(); @@ -182,7 +182,7 @@ public class ItemsResource extends Resource { items.add(new Item(dspaceItem, expand, context)); writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, - headers, request); + headers, request, context); } } } @@ -240,7 +240,7 @@ public class ItemsResource extends Resource context = createContext(getUser(headers)); org.dspace.content.Item dspaceItem = findItem(context, itemId, org.dspace.core.Constants.READ); - writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, request); + writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, request, context); metadata = new org.dspace.rest.common.Item(dspaceItem, "metadata", context).getMetadata(); context.complete(); @@ -299,7 +299,7 @@ public class ItemsResource extends Resource context = createContext(getUser(headers)); org.dspace.content.Item dspaceItem = findItem(context, itemId, org.dspace.core.Constants.READ); - writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, request); + writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, request, context); List itemBitstreams = new Item(dspaceItem, "bitstreams", context).getBitstreams(); @@ -370,7 +370,7 @@ public class ItemsResource extends Resource context = createContext(getUser(headers)); org.dspace.content.Item dspaceItem = findItem(context, itemId, org.dspace.core.Constants.WRITE); - writeStats(dspaceItem, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request); + writeStats(dspaceItem, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request, context); for (MetadataEntry entry : metadata) { @@ -450,7 +450,7 @@ public class ItemsResource extends Resource context = createContext(getUser(headers)); org.dspace.content.Item dspaceItem = findItem(context, itemId, org.dspace.core.Constants.WRITE); - writeStats(dspaceItem, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request); + writeStats(dspaceItem, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request, context); // Is better to add bitstream to ORIGINAL bundle or to item own? log.trace("Creating bitstream in item."); @@ -616,7 +616,7 @@ public class ItemsResource extends Resource context = createContext(getUser(headers)); org.dspace.content.Item dspaceItem = findItem(context, itemId, org.dspace.core.Constants.WRITE); - writeStats(dspaceItem, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request); + writeStats(dspaceItem, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request, context); log.trace("Deleting original metadata from item."); for (MetadataEntry entry : metadata) @@ -698,7 +698,7 @@ public class ItemsResource extends Resource context = createContext(getUser(headers)); org.dspace.content.Item dspaceItem = findItem(context, itemId, org.dspace.core.Constants.DELETE); - writeStats(dspaceItem, UsageEvent.Action.REMOVE, user_ip, user_agent, xforwarderfor, headers, request); + writeStats(dspaceItem, UsageEvent.Action.REMOVE, user_ip, user_agent, xforwarderfor, headers, request, context); log.trace("Deleting item."); org.dspace.content.Collection collection = org.dspace.content.Collection.find(context, @@ -767,7 +767,7 @@ public class ItemsResource extends Resource context = createContext(getUser(headers)); org.dspace.content.Item dspaceItem = findItem(context, itemId, org.dspace.core.Constants.WRITE); - writeStats(dspaceItem, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request); + writeStats(dspaceItem, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request, context); log.trace("Deleting metadata."); // TODO Rewrite without deprecated object. Leave there only generated metadata. @@ -862,9 +862,9 @@ public class ItemsResource extends Resource return Response.status(Status.UNAUTHORIZED).build(); } - writeStats(item, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request); + writeStats(item, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwarderfor, headers, request, context); writeStats(bitstream, UsageEvent.Action.REMOVE, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); log.trace("Deleting bitstream..."); for (org.dspace.content.Bundle bundle : item.getBundles()) @@ -1005,7 +1005,7 @@ public class ItemsResource extends Resource org.dspace.core.Constants.READ); Item item = new Item(dspaceItem, "", context); writeStats(dspaceItem, UsageEvent.Action.VIEW, user_ip, user_agent, xforwarderfor, headers, - request); + request, context); items.add(item); } diff --git a/dspace-rest/src/main/java/org/dspace/rest/Resource.java b/dspace-rest/src/main/java/org/dspace/rest/Resource.java index f049b0582f..bce6b200f2 100644 --- a/dspace-rest/src/main/java/org/dspace/rest/Resource.java +++ b/dspace-rest/src/main/java/org/dspace/rest/Resource.java @@ -19,6 +19,7 @@ import javax.ws.rs.core.Response; import org.apache.log4j.Logger; import org.dspace.content.DSpaceObject; import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; import org.dspace.eperson.EPerson; import org.dspace.rest.exceptions.ContextException; import org.dspace.usage.UsageEvent; @@ -99,55 +100,27 @@ public class Resource * @param xforwarderfor * @param headers * @param request + * @param context */ protected void writeStats(DSpaceObject dspaceObject, UsageEvent.Action action, - String user_ip, String user_agent, String xforwarderfor, HttpHeaders headers, HttpServletRequest request) + String user_ip, String user_agent, String xforwarderfor, HttpHeaders headers, HttpServletRequest request, Context context) { - if (!writeStatistics) { return; } - org.dspace.core.Context context = null; + if ((user_ip == null) || (user_ip.length() == 0)) + { + new DSpace().getEventService().fireEvent(new UsageEvent(action, request, context, dspaceObject)); + } + else + { + new DSpace().getEventService().fireEvent( + new UsageEvent(action, user_ip, user_agent, xforwarderfor, context, dspaceObject)); + } - try - { - context = createContext(getUser(headers)); - - if ((user_ip == null) || (user_ip.length() == 0)) - { - new DSpace().getEventService().fireEvent(new UsageEvent(action, request, context, dspaceObject)); - } - else - { - new DSpace().getEventService().fireEvent( - new UsageEvent(action, user_ip, user_agent, xforwarderfor, context, dspaceObject)); - } - - log.debug("fired event"); - context.complete(); - } - catch (SQLException e) - { - if ((context != null) && (context.isValid())) - { - context.abort(); - } - log.error("Could not write usageEvent, SQLException. Message: " + e); - } - catch (ContextException e) - { - log.error("Could not write usageEvent, ContextException. Message: " + e.getMessage()); - } - finally - { - if ((context != null) && (context.isValid())) - { - context.abort(); - log.error("Something get wrong. Aborting context in finally statement."); - } - } + log.debug("fired event"); } /**