diff --git a/dspace-api/src/main/java/org/dspace/content/Bitstream.java b/dspace-api/src/main/java/org/dspace/content/Bitstream.java index b0b6c210e4..2c6684f860 100644 --- a/dspace-api/src/main/java/org/dspace/content/Bitstream.java +++ b/dspace-api/src/main/java/org/dspace/content/Bitstream.java @@ -10,6 +10,7 @@ package org.dspace.content; import java.io.InputStream; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Date; import java.util.List; import org.dspace.content.factory.ContentServiceFactory; @@ -437,4 +438,16 @@ public class Bitstream extends DSpaceObject implements DSpaceObjectLegacySupport return hash; } + /** + * Add date for bitstream granted (used into the use case for license grant the {@link LicenseUtils#grantLicense(Context, Item, String, String)} + * + * @param context + * the dspace context + * @param acceptanceDate the granted date + * @throws SQLException + */ + public void setAcceptanceDate(Context context, DCDate acceptanceDate) throws SQLException { + getBitstreamService().setMetadataSingleValue(context, this, MetadataSchema.DC_SCHEMA, "rights", "date", null, acceptanceDate.toString()); + } + } diff --git a/dspace-api/src/main/java/org/dspace/content/LicenseUtils.java b/dspace-api/src/main/java/org/dspace/content/LicenseUtils.java index 813d92481e..429a61bc84 100644 --- a/dspace-api/src/main/java/org/dspace/content/LicenseUtils.java +++ b/dspace-api/src/main/java/org/dspace/content/LicenseUtils.java @@ -10,6 +10,7 @@ package org.dspace.content; import java.io.ByteArrayInputStream; import java.io.IOException; import java.sql.SQLException; +import java.util.Date; import java.util.Formatter; import java.util.Locale; import java.util.Map; @@ -133,12 +134,13 @@ public class LicenseUtils * the item object of the license * @param licenseText * the license the user granted + * @param acceptanceDate TODO * @throws SQLException if database error * @throws IOException if IO error * @throws AuthorizeException if authorization error */ public static void grantLicense(Context context, Item item, - String licenseText) throws SQLException, IOException, + String licenseText, String acceptanceDate) throws SQLException, IOException, AuthorizeException { // Put together text to store @@ -154,7 +156,12 @@ public class LicenseUtils // Now set the format and name of the bitstream b.setName(context, "license.txt"); b.setSource(context, "Written by org.dspace.content.LicenseUtils"); - + + DCDate acceptanceDCDate = DCDate.getCurrent(); + if(acceptanceDate!=null) { + acceptanceDCDate = new DCDate(acceptanceDate); + } + b.setAcceptanceDate(context, acceptanceDCDate); // Find the License format BitstreamFormat bf = bitstreamFormat.findByShortDescription(context, "License"); diff --git a/dspace-api/src/test/java/org/dspace/content/LicenseUtilsTest.java b/dspace-api/src/test/java/org/dspace/content/LicenseUtilsTest.java index d135d326d3..52c42fd307 100644 --- a/dspace-api/src/test/java/org/dspace/content/LicenseUtilsTest.java +++ b/dspace-api/src/test/java/org/dspace/content/LicenseUtilsTest.java @@ -233,7 +233,7 @@ public class LicenseUtilsTest extends AbstractUnitTest Item item = installItemService.installItem(context, workspaceItemService.create(context, collection, false)); String defaultLicense = licenseService.getDefaultSubmissionLicense(); - LicenseUtils.grantLicense(context, item, defaultLicense); + LicenseUtils.grantLicense(context, item, defaultLicense, null); StringWriter writer = new StringWriter(); IOUtils.copy(bitstreamService.retrieve(context, itemService.getBundles(item, "LICENSE").get(0).getBitstreams().get(0)), writer); diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/WorkspaceItemRestRepository.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/WorkspaceItemRestRepository.java index b1510e3749..09b48c873e 100644 --- a/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/WorkspaceItemRestRepository.java +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/WorkspaceItemRestRepository.java @@ -251,16 +251,16 @@ public class WorkspaceItemRestRepository extends DSpaceRestRepository4) { index = path[4]; } - String operation = op.getOp(); - LateObjectEvaluator value = (LateObjectEvaluator)op.getValue(); - evaluatePatch(context, request, source, wsi, operation, section, target, index, value); + String operation = op.getOp(); + + evaluatePatch(context, request, source, wsi, operation, section, target, index, op.getValue()); } } wis.update(context, source); } private void evaluatePatch(Context context, HttpServletRequest request, WorkspaceItem source, WorkspaceItemRest wsi, String operation, String section, String target, String index, - LateObjectEvaluator value) throws Exception { + Object value) throws Exception { SubmissionConfig submissionConfig = submissionConfigReader.getSubmissionConfigByName(wsi.getSubmissionDefinition().getName()); for(int stepNum = 0; stepNum T getData(WorkspaceItem obj, SubmissionStepConfig config) throws Exception; public void doPatchProcessing(Context context, Request currentRequest, WorkspaceItem source, String operation, - String target, String index, LateObjectEvaluator value) throws Exception; + String target, String index, Object value) throws Exception; } diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/CollectionStep.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/CollectionStep.java index da8eef91bd..87dc840929 100644 --- a/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/CollectionStep.java +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/CollectionStep.java @@ -34,7 +34,7 @@ public class CollectionStep extends org.dspace.submit.step.SelectCollectionStep @Override public void doPatchProcessing(Context context, Request currentRequest, WorkspaceItem source, String operation, - String target, String index, LateObjectEvaluator value) { + String target, String index, Object value) { switch (operation) { case "move": diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/DescribeStep.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/DescribeStep.java index 3d8ec20b6e..b4ba040a24 100644 --- a/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/DescribeStep.java +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/DescribeStep.java @@ -79,10 +79,11 @@ public class DescribeStep extends org.dspace.submit.step.DescribeStep implements @Override public void doPatchProcessing(Context context, Request currentRequest, WorkspaceItem source, String operation, - String target, String index, LateObjectEvaluator value) throws Exception { + String target, String index, Object value) throws Exception { MetadataValueRest[] list = null; if(value!=null) { - list = (MetadataValueRest[])value.evaluate(MetadataValueRest[].class); + LateObjectEvaluator object = (LateObjectEvaluator)value; + list = (MetadataValueRest[])object.evaluate(MetadataValueRest[].class); } switch (operation) { case "add": diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/LicenseStep.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/LicenseStep.java index c304150a6f..484ba6cec5 100644 --- a/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/LicenseStep.java +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/LicenseStep.java @@ -7,15 +7,23 @@ */ package org.dspace.app.rest.submit.step; +import java.io.IOException; +import java.sql.SQLException; +import java.util.Date; + import org.atteo.evo.inflector.English; import org.dspace.app.rest.model.BitstreamRest; import org.dspace.app.rest.model.step.DataLicense; import org.dspace.app.rest.submit.AbstractRestProcessingStep; import org.dspace.app.util.SubmissionStepConfig; +import org.dspace.authorize.AuthorizeException; import org.dspace.content.Bitstream; +import org.dspace.content.Item; +import org.dspace.content.LicenseUtils; import org.dspace.content.WorkspaceItem; import org.dspace.core.Constants; import org.dspace.core.Context; +import org.dspace.eperson.EPerson; import org.dspace.services.model.Request; import org.springframework.data.rest.webmvc.json.patch.LateObjectEvaluator; @@ -43,16 +51,29 @@ public class LicenseStep extends org.dspace.submit.step.LicenseStep implements A @Override public void doPatchProcessing(Context context, Request currentRequest, WorkspaceItem source, String operation, - String target, String index, LateObjectEvaluator value) { - switch (operation) { - case "replace": - - break; - case "remove": - - break; - default: - throw new RuntimeException("Operation "+operation+" not yet implemented!"); + String target, String index, Object value) throws Exception { + + if("acceptanceDate".equals(target)) { + Item item = source.getItem(); + EPerson submitter = context.getCurrentUser(); + + switch (operation) { + case "replace": + // remove any existing DSpace license (just in case the user + // accepted it previously) + itemService.removeDSpaceLicense(context, item); + + String license = LicenseUtils.getLicenseText(context.getCurrentLocale(), source.getCollection(), item, + submitter); + + LicenseUtils.grantLicense(context, item, license, (String)value); + break; + case "remove": + itemService.removeDSpaceLicense(context, item); + break; + default: + throw new RuntimeException("Operation " + operation + " not yet implemented!"); + } } } } diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/UploadStep.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/UploadStep.java index 7cd85c75de..c42f9c28de 100644 --- a/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/UploadStep.java +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/submit/step/UploadStep.java @@ -46,7 +46,7 @@ public class UploadStep extends org.dspace.submit.step.UploadStep implements Abs @Override public void doPatchProcessing(Context context, Request currentRequest, WorkspaceItem source, String operation, - String target, String index, LateObjectEvaluator value) { + String target, String index, Object value) { switch (operation) { case "add": diff --git a/dspace/config/registries/dublin-core-types.xml b/dspace/config/registries/dublin-core-types.xml index 50e79b0d61..595d14ca6a 100644 --- a/dspace/config/registries/dublin-core-types.xml +++ b/dspace/config/registries/dublin-core-types.xml @@ -590,5 +590,10 @@ license - + + dc + rights + date + +