mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-19 07:53:08 +00:00
[DS-3952] Bitstream is optional if allfiles:true. Implement and test.
This commit is contained in:
@@ -98,14 +98,21 @@ public class RequestItemEmailNotifier {
|
||||
email.addArgument(authorEmail); // {8} corresponding author email
|
||||
email.addArgument(configurationService.getProperty("dspace.name"));
|
||||
email.addArgument(configurationService.getProperty("mail.helpdesk"));
|
||||
|
||||
// Send the email.
|
||||
try {
|
||||
email.send();
|
||||
Bitstream bitstream = ri.getBitstream();
|
||||
String bitstreamID;
|
||||
if (null == bitstream) {
|
||||
bitstreamID = "null";
|
||||
} else {
|
||||
bitstreamID = ri.getBitstream().getID().toString();
|
||||
}
|
||||
LOG.info(LogHelper.getHeader(context,
|
||||
"sent_email_requestItem",
|
||||
"submitter_id={},bitstream_id={},requestEmail={}"),
|
||||
ri.getReqEmail(), ri.getBitstream().getID().toString(),
|
||||
ri.getReqEmail());
|
||||
ri.getReqEmail(), bitstreamID, ri.getReqEmail());
|
||||
} catch (MessagingException e) {
|
||||
LOG.warn(LogHelper.getHeader(context,
|
||||
"error_mailing_requestItem", e.getMessage()));
|
||||
|
@@ -9,6 +9,7 @@
|
||||
package org.dspace.builder;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -55,8 +56,16 @@ public class RequestItemBuilder
|
||||
}
|
||||
}
|
||||
|
||||
public static RequestItemBuilder createRequestItem(Context ctx, Item item,
|
||||
Bitstream bitstream) {
|
||||
/**
|
||||
* Initialize a RequestItem.
|
||||
*
|
||||
* @param ctx current DSpace session.
|
||||
* @param item the requested Item.
|
||||
* @param bitstream the single requested Bitstream, or null for "all files".
|
||||
* @return a builder initialized for this request.
|
||||
*/
|
||||
public static RequestItemBuilder createRequestItem(Context ctx,
|
||||
@NotNull Item item, Bitstream bitstream) {
|
||||
RequestItemBuilder builder = new RequestItemBuilder(ctx);
|
||||
return builder.create(item, bitstream);
|
||||
}
|
||||
@@ -64,8 +73,9 @@ public class RequestItemBuilder
|
||||
private RequestItemBuilder create(Item item, Bitstream bitstream) {
|
||||
String token;
|
||||
try {
|
||||
token = requestItemService.createRequest(context, bitstream,
|
||||
item, true, REQ_EMAIL, REQ_NAME, REQ_MESSAGE);
|
||||
token = requestItemService.createRequest(context, bitstream, item,
|
||||
(null == bitstream),
|
||||
REQ_EMAIL, REQ_NAME, REQ_MESSAGE);
|
||||
} catch (SQLException ex) {
|
||||
return handleException(ex);
|
||||
}
|
||||
|
@@ -11,11 +11,9 @@ package org.dspace.app.rest.converter;
|
||||
import javax.inject.Named;
|
||||
|
||||
import org.dspace.app.requestitem.RequestItem;
|
||||
import org.dspace.app.requestitem.service.RequestItemService;
|
||||
import org.dspace.app.rest.model.RequestItemRest;
|
||||
import org.dspace.app.rest.projection.Projection;
|
||||
import org.dspace.services.RequestService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.dspace.content.Bitstream;
|
||||
|
||||
/**
|
||||
* Convert between {@link org.dspace.app.requestitem.RequestItem} and
|
||||
@@ -26,18 +24,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
@Named
|
||||
public class RequestItemConverter
|
||||
implements DSpaceConverter<RequestItem, RequestItemRest> {
|
||||
@Autowired(required = true)
|
||||
protected BitstreamConverter bitstreamConverter;
|
||||
|
||||
@Autowired(required = true)
|
||||
protected ItemConverter itemConverter;
|
||||
|
||||
@Autowired(required = true)
|
||||
protected RequestItemService requestItemService;
|
||||
|
||||
@Autowired(required = true)
|
||||
protected RequestService requestService;
|
||||
|
||||
@Override
|
||||
public RequestItemRest convert(RequestItem requestItem, Projection projection) {
|
||||
RequestItemRest requestItemRest = new RequestItemRest();
|
||||
@@ -45,7 +31,12 @@ public class RequestItemConverter
|
||||
|
||||
requestItemRest.setAcceptRequest(requestItem.isAccept_request());
|
||||
requestItemRest.setAllfiles(requestItem.isAllfiles());
|
||||
requestItemRest.setBitstreamId(requestItem.getBitstream().getID().toString());
|
||||
Bitstream bitstream = requestItem.getBitstream();
|
||||
if (null == bitstream) {
|
||||
requestItemRest.setBitstreamId(null);
|
||||
} else {
|
||||
requestItemRest.setBitstreamId(requestItem.getBitstream().getID().toString());
|
||||
}
|
||||
requestItemRest.setDecisionDate(requestItem.getDecision_date());
|
||||
requestItemRest.setExpires(requestItem.getExpires());
|
||||
requestItemRest.setId(requestItem.getID());
|
||||
|
@@ -124,17 +124,27 @@ public class RequestItemRepository
|
||||
throw new AuthorizeException("Anonymous requests are not permitted.");
|
||||
}
|
||||
|
||||
// Create the item request model object from the REST object.
|
||||
String token;
|
||||
String bitstreamId = rir.getBitstreamId();
|
||||
if (isBlank(bitstreamId)) {
|
||||
throw new IncompleteItemRequestException("A bitstream ID is required");
|
||||
}
|
||||
Bitstream bitstream = bitstreamService.find(ctx, UUID.fromString(bitstreamId));
|
||||
if (null == bitstream) {
|
||||
throw new IncompleteItemRequestException("That bitstream does not exist");
|
||||
/* Create the item request model object from the REST object. */
|
||||
|
||||
// Requesting all bitstreams of an item, or a single bitstream?
|
||||
boolean allFiles = rir.isAllfiles();
|
||||
|
||||
// Requested bitstream. Ignored if all files requested, otherwise required.
|
||||
Bitstream bitstream;
|
||||
if (!allFiles) {
|
||||
String bitstreamId = rir.getBitstreamId();
|
||||
if (isBlank(bitstreamId)) {
|
||||
throw new IncompleteItemRequestException("A bitstream ID is required");
|
||||
}
|
||||
bitstream = bitstreamService.find(ctx, UUID.fromString(bitstreamId));
|
||||
if (null == bitstream) {
|
||||
throw new IncompleteItemRequestException("That bitstream does not exist");
|
||||
}
|
||||
} else {
|
||||
bitstream = null;
|
||||
}
|
||||
|
||||
// Requested item.
|
||||
String itemId = rir.getItemId();
|
||||
if (isBlank(itemId)) {
|
||||
throw new IncompleteItemRequestException("An item ID is required");
|
||||
@@ -144,30 +154,35 @@ public class RequestItemRepository
|
||||
throw new IncompleteItemRequestException("That item does not exist");
|
||||
}
|
||||
|
||||
boolean allFiles = rir.isAllfiles();
|
||||
|
||||
String email = rir.getRequestEmail();
|
||||
if (isBlank(email)) {
|
||||
throw new IncompleteItemRequestException("A submitter's email address is required");
|
||||
}
|
||||
EmailValidator emailValidator = EmailValidator.getInstance(false, false);
|
||||
if (!emailValidator.isValid(email)) {
|
||||
throw new UnprocessableEntityException("Invalid email address");
|
||||
}
|
||||
|
||||
// If there is a current user, replace email and name
|
||||
String username;
|
||||
if (null != user) {
|
||||
username = user.getFullName();
|
||||
// Requester's email address.
|
||||
String email;
|
||||
if (null != user) { // Prefer authenticated user's email.
|
||||
email = user.getEmail();
|
||||
} else {
|
||||
} else { // Require an anonymous session to provide an email address.
|
||||
email = rir.getRequestEmail();
|
||||
if (isBlank(email)) {
|
||||
throw new IncompleteItemRequestException("A submitter's email address is required");
|
||||
}
|
||||
EmailValidator emailValidator = EmailValidator.getInstance(false, false);
|
||||
if (!emailValidator.isValid(email)) {
|
||||
throw new UnprocessableEntityException("Invalid email address");
|
||||
}
|
||||
}
|
||||
|
||||
// Requester's human-readable name.
|
||||
String username;
|
||||
if (null != user) { // Prefer authenticated user's name.
|
||||
username = user.getFullName();
|
||||
} else { // An anonymous session may provide a name.
|
||||
// Escape username to evade nasty XSS attempts
|
||||
username = StringEscapeUtils.escapeHtml4(rir.getRequestName());
|
||||
}
|
||||
|
||||
// Escape message text to evade nasty XSS attempts
|
||||
// Requester's message text, escaped to evade nasty XSS attempts
|
||||
String message = StringEscapeUtils.escapeHtml4(rir.getRequestMessage());
|
||||
|
||||
// Create the request.
|
||||
String token;
|
||||
token = requestItemService.createRequest(ctx, bitstream, item,
|
||||
allFiles, email, username, message);
|
||||
|
||||
|
@@ -206,12 +206,11 @@ public class RequestItemRepositoryIT
|
||||
|
||||
// Fake up a request in REST form.
|
||||
RequestItemRest rir = new RequestItemRest();
|
||||
rir.setBitstreamId(bitstream.getID().toString());
|
||||
rir.setAllfiles(true);
|
||||
rir.setItemId(item.getID().toString());
|
||||
rir.setRequestEmail(eperson.getEmail());
|
||||
rir.setRequestMessage(RequestItemBuilder.REQ_MESSAGE);
|
||||
rir.setRequestName(eperson.getFullName());
|
||||
rir.setAllfiles(false);
|
||||
rir.setRequestMessage(RequestItemBuilder.REQ_MESSAGE);
|
||||
|
||||
// Create it and see if it was created correctly.
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
@@ -231,7 +230,7 @@ public class RequestItemRepositoryIT
|
||||
hasJsonPath("$.requestEmail", is(eperson.getEmail())),
|
||||
hasJsonPath("$.requestMessage", is(RequestItemBuilder.REQ_MESSAGE)),
|
||||
hasJsonPath("$.requestName", is(eperson.getFullName())),
|
||||
hasJsonPath("$.allfiles", is(false)),
|
||||
hasJsonPath("$.allfiles", is(true)),
|
||||
// TODO should be an ISO datetime
|
||||
hasJsonPath("$.requestDate", not(is(emptyOrNullString()))),
|
||||
hasJsonPath("$._links.self.href", not(is(emptyOrNullString())))
|
||||
@@ -261,12 +260,12 @@ public class RequestItemRepositoryIT
|
||||
|
||||
// Fake up a request in REST form.
|
||||
RequestItemRest rir = new RequestItemRest();
|
||||
rir.setAllfiles(false);
|
||||
rir.setBitstreamId(bitstream.getID().toString());
|
||||
rir.setItemId(item.getID().toString());
|
||||
rir.setRequestEmail(RequestItemBuilder.REQ_EMAIL);
|
||||
rir.setRequestMessage(RequestItemBuilder.REQ_MESSAGE);
|
||||
rir.setRequestName(RequestItemBuilder.REQ_NAME);
|
||||
rir.setAllfiles(false);
|
||||
|
||||
// Create it and see if it was created correctly.
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
Reference in New Issue
Block a user