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 INPUT_FORM_STEP_NAME = "submission-form";
|
||||||
public static final String UPLOAD_STEP_NAME = "upload";
|
public static final String UPLOAD_STEP_NAME = "upload";
|
||||||
|
public static final String ACCESS_CONDITION_STEP_NAME = "accessCondition";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The identifier for the Select Collection step
|
* The identifier for the Select Collection step
|
||||||
|
@@ -6,9 +6,15 @@
|
|||||||
* http://www.dspace.org/license/
|
* http://www.dspace.org/license/
|
||||||
*/
|
*/
|
||||||
package org.dspace.app.rest.converter;
|
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.model.SubmissionAccessOptionRest;
|
||||||
import org.dspace.app.rest.projection.Projection;
|
import org.dspace.app.rest.projection.Projection;
|
||||||
import org.dspace.submit.model.AccessConditionConfiguration;
|
import org.dspace.submit.model.AccessConditionConfiguration;
|
||||||
|
import org.dspace.submit.model.AccessConditionOption;
|
||||||
|
import org.dspace.util.DateMathParser;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -21,12 +27,37 @@ import org.springframework.stereotype.Component;
|
|||||||
public class SubmissionAccessOptionConverter
|
public class SubmissionAccessOptionConverter
|
||||||
implements DSpaceConverter<AccessConditionConfiguration, SubmissionAccessOptionRest> {
|
implements DSpaceConverter<AccessConditionConfiguration, SubmissionAccessOptionRest> {
|
||||||
|
|
||||||
|
DateMathParser dateMathParser = new DateMathParser();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SubmissionAccessOptionRest convert(AccessConditionConfiguration obj, Projection projection) {
|
public SubmissionAccessOptionRest convert(AccessConditionConfiguration config, Projection projection) {
|
||||||
SubmissionAccessOptionRest model = new SubmissionAccessOptionRest();
|
SubmissionAccessOptionRest model = new SubmissionAccessOptionRest();
|
||||||
model.setId(obj.getName());
|
model.setId(config.getName());
|
||||||
model.setDiscoverable(obj.getDiscoverable());
|
model.setDiscoverable(config.getDiscoverable());
|
||||||
model.setAccessConditionOptions(obj.getOptions());
|
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;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,13 +6,14 @@
|
|||||||
* http://www.dspace.org/license/
|
* http://www.dspace.org/license/
|
||||||
*/
|
*/
|
||||||
package org.dspace.app.rest.link;
|
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 static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
import org.atteo.evo.inflector.English;
|
import org.atteo.evo.inflector.English;
|
||||||
import org.dspace.app.rest.RestResourceController;
|
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.SubmissionFormRest;
|
||||||
import org.dspace.app.rest.model.SubmissionSectionRest;
|
import org.dspace.app.rest.model.SubmissionSectionRest;
|
||||||
import org.dspace.app.rest.model.SubmissionUploadRest;
|
import org.dspace.app.rest.model.SubmissionUploadRest;
|
||||||
@@ -36,26 +37,22 @@ public class SubmissionSectionHalLinkFactory extends HalLinkFactory<SubmissionSe
|
|||||||
SubmissionSectionRest sd = halResource.getContent();
|
SubmissionSectionRest sd = halResource.getContent();
|
||||||
|
|
||||||
if (SubmissionStepConfig.INPUT_FORM_STEP_NAME.equals(sd.getSectionType())) {
|
if (SubmissionStepConfig.INPUT_FORM_STEP_NAME.equals(sd.getSectionType())) {
|
||||||
UriComponentsBuilder uriComponentsBuilder = linkTo(
|
buildLink(list, sd, SubmissionFormRest.CATEGORY, SubmissionFormRest.NAME);
|
||||||
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("/"))));
|
|
||||||
}
|
}
|
||||||
if (SubmissionStepConfig.UPLOAD_STEP_NAME.equals(sd.getSectionType())) {
|
if (SubmissionStepConfig.UPLOAD_STEP_NAME.equals(sd.getSectionType())) {
|
||||||
UriComponentsBuilder uriComponentsBuilder = linkTo(
|
buildLink(list, sd, SubmissionUploadRest.CATEGORY, SubmissionUploadRest.NAME);
|
||||||
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("/"))));
|
|
||||||
}
|
}
|
||||||
|
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() {
|
protected Class<RestResourceController> getControllerClass() {
|
||||||
|
@@ -12,7 +12,6 @@ import java.util.Objects;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import org.dspace.app.rest.RestResourceController;
|
import org.dspace.app.rest.RestResourceController;
|
||||||
import org.dspace.submit.model.AccessConditionOption;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Access Condition Section Configuration REST Resource
|
* The Access Condition Section Configuration REST Resource
|
||||||
@@ -31,7 +30,7 @@ public class SubmissionAccessOptionRest extends BaseObjectRest<String> {
|
|||||||
|
|
||||||
private Boolean discoverable;
|
private Boolean discoverable;
|
||||||
|
|
||||||
private List<AccessConditionOption> accessConditionOptions;
|
private List<AccessConditionOptionRest> accessConditionOptions;
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
return id;
|
return id;
|
||||||
@@ -49,14 +48,14 @@ public class SubmissionAccessOptionRest extends BaseObjectRest<String> {
|
|||||||
this.discoverable = discoverable;
|
this.discoverable = discoverable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<AccessConditionOption> getAccessConditionOptions() {
|
public List<AccessConditionOptionRest> getAccessConditionOptions() {
|
||||||
if (Objects.isNull(accessConditionOptions)) {
|
if (Objects.isNull(accessConditionOptions)) {
|
||||||
accessConditionOptions = new ArrayList<>();
|
accessConditionOptions = new ArrayList<>();
|
||||||
}
|
}
|
||||||
return accessConditionOptions;
|
return accessConditionOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAccessConditionOptions(List<AccessConditionOption> accessConditionOptions) {
|
public void setAccessConditionOptions(List<AccessConditionOptionRest> accessConditionOptions) {
|
||||||
this.accessConditionOptions = accessConditionOptions;
|
this.accessConditionOptions = accessConditionOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -41,11 +41,11 @@ public class SubmissionAccessOptionRestRepositoryIT extends AbstractControllerIn
|
|||||||
.andExpect(jsonPath("$.discoverable", is(true)))
|
.andExpect(jsonPath("$.discoverable", is(true)))
|
||||||
.andExpect(jsonPath("$.accessConditionOptions", Matchers.containsInAnyOrder(
|
.andExpect(jsonPath("$.accessConditionOptions", Matchers.containsInAnyOrder(
|
||||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||||
"openaccess","Anonymous", false , false, null, null),
|
"openaccess", false , false, null, null),
|
||||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||||
"embargo","Anonymous", true , false, "+36MONTHS", null),
|
"embargo", true , false, "+36MONTHS", null),
|
||||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||||
"administrator","Administrator", false , false, null, null))
|
"administrator", false , false, null, null))
|
||||||
))
|
))
|
||||||
.andExpect(jsonPath("$.type", is("submissionaccessoption")));
|
.andExpect(jsonPath("$.type", is("submissionaccessoption")));
|
||||||
|
|
||||||
@@ -56,13 +56,13 @@ public class SubmissionAccessOptionRestRepositoryIT extends AbstractControllerIn
|
|||||||
.andExpect(jsonPath("$.id", is("defaultAC")))
|
.andExpect(jsonPath("$.id", is("defaultAC")))
|
||||||
.andExpect(jsonPath("$.discoverable", is(true)))
|
.andExpect(jsonPath("$.discoverable", is(true)))
|
||||||
.andExpect(jsonPath("$.accessConditionOptions", Matchers.containsInAnyOrder(
|
.andExpect(jsonPath("$.accessConditionOptions", Matchers.containsInAnyOrder(
|
||||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||||
"openaccess","Anonymous", false , false, null, null),
|
"openaccess", false , false, null, null),
|
||||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||||
"embargo","Anonymous", true , false, "+36MONTHS", null),
|
"embargo", true , false, "+36MONTHS", null),
|
||||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||||
"administrator","Administrator", false , false, null, null))
|
"administrator", false , false, null, null))
|
||||||
))
|
))
|
||||||
.andExpect(jsonPath("$.type", is("submissionaccessoption")));
|
.andExpect(jsonPath("$.type", is("submissionaccessoption")));
|
||||||
|
|
||||||
getClient().perform(get("/api/config/submissionaccessoptions/defaultAC"))
|
getClient().perform(get("/api/config/submissionaccessoptions/defaultAC"))
|
||||||
@@ -70,13 +70,13 @@ public class SubmissionAccessOptionRestRepositoryIT extends AbstractControllerIn
|
|||||||
.andExpect(jsonPath("$.id", is("defaultAC")))
|
.andExpect(jsonPath("$.id", is("defaultAC")))
|
||||||
.andExpect(jsonPath("$.discoverable", is(true)))
|
.andExpect(jsonPath("$.discoverable", is(true)))
|
||||||
.andExpect(jsonPath("$.accessConditionOptions", Matchers.containsInAnyOrder(
|
.andExpect(jsonPath("$.accessConditionOptions", Matchers.containsInAnyOrder(
|
||||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||||
"openaccess","Anonymous", false , false, null, null),
|
"openaccess", false , false, null, null),
|
||||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||||
"embargo","Anonymous", true , false, "+36MONTHS", null),
|
"embargo", true , false, "+36MONTHS", null),
|
||||||
AccessConditionOptionMatcher.matchAccessConditionOption(
|
AccessConditionOptionMatcher.matchAccessConditionOption(
|
||||||
"administrator","Administrator", false , false, null, null))
|
"administrator", false , false, null, null))
|
||||||
))
|
))
|
||||||
.andExpect(jsonPath("$.type", is("submissionaccessoption")));
|
.andExpect(jsonPath("$.type", is("submissionaccessoption")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,11 +6,15 @@
|
|||||||
* http://www.dspace.org/license/
|
* http://www.dspace.org/license/
|
||||||
*/
|
*/
|
||||||
package org.dspace.app.rest.matcher;
|
package org.dspace.app.rest.matcher;
|
||||||
|
|
||||||
import static com.jayway.jsonpath.matchers.JsonPathMatchers.hasJsonPath;
|
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.allOf;
|
||||||
import static org.hamcrest.Matchers.is;
|
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;
|
import org.hamcrest.Matcher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -23,15 +27,19 @@ public class AccessConditionOptionMatcher {
|
|||||||
|
|
||||||
private AccessConditionOptionMatcher() {}
|
private AccessConditionOptionMatcher() {}
|
||||||
|
|
||||||
public static Matcher<? super Object> matchAccessConditionOption(String name, String groupName,
|
public static Matcher<? super Object> matchAccessConditionOption(String name,
|
||||||
boolean hasStartDate, boolean hasEndDate, String startDateLimit, String endDateLimit) {
|
Boolean hasStartDate, Boolean hasEndDate, String maxStartDate, String maxEndDate) {
|
||||||
return allOf(
|
return allOf(
|
||||||
hasJsonPath("$.name", is(name)),
|
hasJsonPath("$.name", is(name)),
|
||||||
hasJsonPath("$.groupName", is(groupName)),
|
Objects.nonNull(hasStartDate) ? hasJsonPath("$.hasStartDate", is(hasStartDate))
|
||||||
hasJsonPath("$.hasStartDate", is(hasStartDate)),
|
: hasNoJsonPath("$.hasStartDate"),
|
||||||
hasJsonPath("$.hasEndDate", is(hasEndDate)),
|
Objects.nonNull(hasEndDate) ? hasJsonPath("$.hasEndDate", is(hasEndDate))
|
||||||
hasJsonPath("$.startDateLimit", is(startDateLimit)),
|
: hasNoJsonPath("$.hasEndDate"),
|
||||||
hasJsonPath("$.endDateLimit", is(endDateLimit))
|
StringUtils.isNotBlank(maxStartDate) ? hasJsonPath("$.maxStartDate", notNullValue())
|
||||||
|
: hasNoJsonPath("$.maxStartDate"),
|
||||||
|
StringUtils.isNotBlank(maxEndDate) ? hasJsonPath("$.maxEndDate", notNullValue())
|
||||||
|
: hasNoJsonPath("$.maxEndDate")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user