mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
added config hal link to SubmissionAccessOption rest object and refactored converter
This commit is contained in:
@@ -30,6 +30,7 @@ public class SubmissionStepConfig implements Serializable {
|
||||
|
||||
public static final String INPUT_FORM_STEP_NAME = "submission-form";
|
||||
public static final String UPLOAD_STEP_NAME = "upload";
|
||||
public static final String ACCESS_CONDITION_STEP_NAME = "accessCondition";
|
||||
|
||||
/*
|
||||
* The identifier for the Select Collection step
|
||||
|
@@ -6,9 +6,15 @@
|
||||
* http://www.dspace.org/license/
|
||||
*/
|
||||
package org.dspace.app.rest.converter;
|
||||
import java.text.ParseException;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.dspace.app.rest.model.AccessConditionOptionRest;
|
||||
import org.dspace.app.rest.model.SubmissionAccessOptionRest;
|
||||
import org.dspace.app.rest.projection.Projection;
|
||||
import org.dspace.submit.model.AccessConditionConfiguration;
|
||||
import org.dspace.submit.model.AccessConditionOption;
|
||||
import org.dspace.util.DateMathParser;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
@@ -21,12 +27,37 @@ import org.springframework.stereotype.Component;
|
||||
public class SubmissionAccessOptionConverter
|
||||
implements DSpaceConverter<AccessConditionConfiguration, SubmissionAccessOptionRest> {
|
||||
|
||||
DateMathParser dateMathParser = new DateMathParser();
|
||||
|
||||
@Override
|
||||
public SubmissionAccessOptionRest convert(AccessConditionConfiguration obj, Projection projection) {
|
||||
public SubmissionAccessOptionRest convert(AccessConditionConfiguration config, Projection projection) {
|
||||
SubmissionAccessOptionRest model = new SubmissionAccessOptionRest();
|
||||
model.setId(obj.getName());
|
||||
model.setDiscoverable(obj.getDiscoverable());
|
||||
model.setAccessConditionOptions(obj.getOptions());
|
||||
model.setId(config.getName());
|
||||
model.setDiscoverable(config.getDiscoverable());
|
||||
model.setProjection(projection);
|
||||
for (AccessConditionOption option : config.getOptions()) {
|
||||
AccessConditionOptionRest optionRest = new AccessConditionOptionRest();
|
||||
optionRest.setHasStartDate(option.getHasStartDate());
|
||||
optionRest.setHasEndDate(option.getHasEndDate());
|
||||
if (StringUtils.isNotBlank(option.getStartDateLimit())) {
|
||||
try {
|
||||
optionRest.setMaxStartDate(dateMathParser.parseMath(option.getStartDateLimit()));
|
||||
} catch (ParseException e) {
|
||||
throw new IllegalStateException("Wrong start date limit configuration for the access condition "
|
||||
+ "option named " + option.getName());
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(option.getEndDateLimit())) {
|
||||
try {
|
||||
optionRest.setMaxEndDate(dateMathParser.parseMath(option.getEndDateLimit()));
|
||||
} catch (ParseException e) {
|
||||
throw new IllegalStateException("Wrong end date limit configuration for the access condition "
|
||||
+ "option named " + option.getName());
|
||||
}
|
||||
}
|
||||
optionRest.setName(option.getName());
|
||||
model.getAccessConditionOptions().add(optionRest);
|
||||
}
|
||||
return model;
|
||||
}
|
||||
|
||||
|
@@ -6,13 +6,14 @@
|
||||
* http://www.dspace.org/license/
|
||||
*/
|
||||
package org.dspace.app.rest.link;
|
||||
|
||||
import static org.dspace.app.rest.model.SubmissionFormRest.NAME_LINK_ON_PANEL;
|
||||
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
|
||||
|
||||
import java.util.LinkedList;
|
||||
|
||||
import org.atteo.evo.inflector.English;
|
||||
import org.dspace.app.rest.RestResourceController;
|
||||
import org.dspace.app.rest.model.SubmissionAccessOptionRest;
|
||||
import org.dspace.app.rest.model.SubmissionFormRest;
|
||||
import org.dspace.app.rest.model.SubmissionSectionRest;
|
||||
import org.dspace.app.rest.model.SubmissionUploadRest;
|
||||
@@ -36,26 +37,22 @@ public class SubmissionSectionHalLinkFactory extends HalLinkFactory<SubmissionSe
|
||||
SubmissionSectionRest sd = halResource.getContent();
|
||||
|
||||
if (SubmissionStepConfig.INPUT_FORM_STEP_NAME.equals(sd.getSectionType())) {
|
||||
UriComponentsBuilder uriComponentsBuilder = linkTo(
|
||||
getMethodOn(SubmissionFormRest.CATEGORY, SubmissionFormRest.NAME)
|
||||
.findRel(null, null, SubmissionFormRest.CATEGORY, English.plural(SubmissionFormRest.NAME),
|
||||
sd.getId(), "", null, null))
|
||||
.toUriComponentsBuilder();
|
||||
String uribuilder = uriComponentsBuilder.build().toString();
|
||||
list.add(
|
||||
buildLink(SubmissionFormRest.NAME_LINK_ON_PANEL, uribuilder.substring(0, uribuilder.lastIndexOf("/"))));
|
||||
buildLink(list, sd, SubmissionFormRest.CATEGORY, SubmissionFormRest.NAME);
|
||||
}
|
||||
if (SubmissionStepConfig.UPLOAD_STEP_NAME.equals(sd.getSectionType())) {
|
||||
UriComponentsBuilder uriComponentsBuilder = linkTo(
|
||||
getMethodOn(RestResourceController.class, SubmissionUploadRest.CATEGORY, SubmissionUploadRest.NAME)
|
||||
.findRel(null, null, SubmissionUploadRest.CATEGORY, English.plural(SubmissionUploadRest.NAME),
|
||||
sd.getId(), "", null, null))
|
||||
.toUriComponentsBuilder();
|
||||
String uribuilder = uriComponentsBuilder.build().toString();
|
||||
list.add(
|
||||
buildLink(SubmissionFormRest.NAME_LINK_ON_PANEL, uribuilder.substring(0, uribuilder.lastIndexOf("/"))));
|
||||
buildLink(list, sd, SubmissionUploadRest.CATEGORY, SubmissionUploadRest.NAME);
|
||||
}
|
||||
if (SubmissionStepConfig.ACCESS_CONDITION_STEP_NAME.equals(sd.getSectionType())) {
|
||||
buildLink(list, sd, SubmissionAccessOptionRest.CATEGORY, SubmissionAccessOptionRest.NAME);
|
||||
}
|
||||
}
|
||||
|
||||
private void buildLink(final LinkedList<Link> list, SubmissionSectionRest sd, String category, String name) {
|
||||
UriComponentsBuilder uriComponentsBuilder = linkTo(getMethodOn(category, name)
|
||||
.findRel(null, null, category, English.plural(name), sd.getId(), "", null, null))
|
||||
.toUriComponentsBuilder();
|
||||
String uribuilder = uriComponentsBuilder.build().toString();
|
||||
list.add(buildLink(NAME_LINK_ON_PANEL, uribuilder.substring(0, uribuilder.lastIndexOf("/"))));
|
||||
}
|
||||
|
||||
protected Class<RestResourceController> getControllerClass() {
|
||||
|
@@ -12,7 +12,6 @@ import java.util.Objects;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import org.dspace.app.rest.RestResourceController;
|
||||
import org.dspace.submit.model.AccessConditionOption;
|
||||
|
||||
/**
|
||||
* The Access Condition Section Configuration REST Resource
|
||||
@@ -31,7 +30,7 @@ public class SubmissionAccessOptionRest extends BaseObjectRest<String> {
|
||||
|
||||
private Boolean discoverable;
|
||||
|
||||
private List<AccessConditionOption> accessConditionOptions;
|
||||
private List<AccessConditionOptionRest> accessConditionOptions;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
@@ -49,14 +48,14 @@ public class SubmissionAccessOptionRest extends BaseObjectRest<String> {
|
||||
this.discoverable = discoverable;
|
||||
}
|
||||
|
||||
public List<AccessConditionOption> getAccessConditionOptions() {
|
||||
public List<AccessConditionOptionRest> getAccessConditionOptions() {
|
||||
if (Objects.isNull(accessConditionOptions)) {
|
||||
accessConditionOptions = new ArrayList<>();
|
||||
}
|
||||
return accessConditionOptions;
|
||||
}
|
||||
|
||||
public void setAccessConditionOptions(List<AccessConditionOption> accessConditionOptions) {
|
||||
public void setAccessConditionOptions(List<AccessConditionOptionRest> accessConditionOptions) {
|
||||
this.accessConditionOptions = accessConditionOptions;
|
||||
}
|
||||
|
||||
|
@@ -41,11 +41,11 @@ public class SubmissionAccessOptionRestRepositoryIT extends AbstractControllerIn
|
||||
.andExpect(jsonPath("$.discoverable", is(true)))
|
||||
.andExpect(jsonPath("$.accessConditionOptions", Matchers.containsInAnyOrder(
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"openaccess","Anonymous", false , false, null, null),
|
||||
"openaccess", false , false, null, null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"embargo","Anonymous", true , false, "+36MONTHS", null),
|
||||
"embargo", true , false, "+36MONTHS", null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"administrator","Administrator", false , false, null, null))
|
||||
"administrator", false , false, null, null))
|
||||
))
|
||||
.andExpect(jsonPath("$.type", is("submissionaccessoption")));
|
||||
|
||||
@@ -56,13 +56,13 @@ public class SubmissionAccessOptionRestRepositoryIT extends AbstractControllerIn
|
||||
.andExpect(jsonPath("$.id", is("defaultAC")))
|
||||
.andExpect(jsonPath("$.discoverable", is(true)))
|
||||
.andExpect(jsonPath("$.accessConditionOptions", Matchers.containsInAnyOrder(
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"openaccess","Anonymous", false , false, null, null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"embargo","Anonymous", true , false, "+36MONTHS", null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"administrator","Administrator", false , false, null, null))
|
||||
))
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"openaccess", false , false, null, null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"embargo", true , false, "+36MONTHS", null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"administrator", false , false, null, null))
|
||||
))
|
||||
.andExpect(jsonPath("$.type", is("submissionaccessoption")));
|
||||
|
||||
getClient().perform(get("/api/config/submissionaccessoptions/defaultAC"))
|
||||
@@ -70,13 +70,13 @@ public class SubmissionAccessOptionRestRepositoryIT extends AbstractControllerIn
|
||||
.andExpect(jsonPath("$.id", is("defaultAC")))
|
||||
.andExpect(jsonPath("$.discoverable", is(true)))
|
||||
.andExpect(jsonPath("$.accessConditionOptions", Matchers.containsInAnyOrder(
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"openaccess","Anonymous", false , false, null, null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"embargo","Anonymous", true , false, "+36MONTHS", null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"administrator","Administrator", false , false, null, null))
|
||||
))
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"openaccess", false , false, null, null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"embargo", true , false, "+36MONTHS", null),
|
||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||
"administrator", false , false, null, null))
|
||||
))
|
||||
.andExpect(jsonPath("$.type", is("submissionaccessoption")));
|
||||
}
|
||||
|
||||
|
@@ -6,11 +6,15 @@
|
||||
* http://www.dspace.org/license/
|
||||
*/
|
||||
package org.dspace.app.rest.matcher;
|
||||
|
||||
import static com.jayway.jsonpath.matchers.JsonPathMatchers.hasJsonPath;
|
||||
import static com.jayway.jsonpath.matchers.JsonPathMatchers.hasNoJsonPath;
|
||||
import static org.hamcrest.Matchers.allOf;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.notNullValue;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.hamcrest.Matcher;
|
||||
|
||||
/**
|
||||
@@ -23,15 +27,19 @@ public class AccessConditionOptionMatcher {
|
||||
|
||||
private AccessConditionOptionMatcher() {}
|
||||
|
||||
public static Matcher<? super Object> matchAccessConditionOption(String name, String groupName,
|
||||
boolean hasStartDate, boolean hasEndDate, String startDateLimit, String endDateLimit) {
|
||||
public static Matcher<? super Object> matchAccessConditionOption(String name,
|
||||
Boolean hasStartDate, Boolean hasEndDate, String maxStartDate, String maxEndDate) {
|
||||
return allOf(
|
||||
hasJsonPath("$.name", is(name)),
|
||||
hasJsonPath("$.groupName", is(groupName)),
|
||||
hasJsonPath("$.hasStartDate", is(hasStartDate)),
|
||||
hasJsonPath("$.hasEndDate", is(hasEndDate)),
|
||||
hasJsonPath("$.startDateLimit", is(startDateLimit)),
|
||||
hasJsonPath("$.endDateLimit", is(endDateLimit))
|
||||
Objects.nonNull(hasStartDate) ? hasJsonPath("$.hasStartDate", is(hasStartDate))
|
||||
: hasNoJsonPath("$.hasStartDate"),
|
||||
Objects.nonNull(hasEndDate) ? hasJsonPath("$.hasEndDate", is(hasEndDate))
|
||||
: hasNoJsonPath("$.hasEndDate"),
|
||||
StringUtils.isNotBlank(maxStartDate) ? hasJsonPath("$.maxStartDate", notNullValue())
|
||||
: hasNoJsonPath("$.maxStartDate"),
|
||||
StringUtils.isNotBlank(maxEndDate) ? hasJsonPath("$.maxEndDate", notNullValue())
|
||||
: hasNoJsonPath("$.maxEndDate")
|
||||
);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user