[CST-5760] LicenseValidation bean instrumented so that license is validated during submission, tests expectations updated accordingly

This commit is contained in:
Corrado Lombardi
2022-04-20 15:09:27 +02:00
parent 50bb8456ea
commit 9843b72a86
3 changed files with 79 additions and 27 deletions

View File

@@ -25,4 +25,8 @@
<property name="itemService" ref="org.dspace.content.ItemServiceImpl"/>
<property name="uploadConfigurationService" ref="uploadConfigurationService"/>
</bean>
ins
<bean name="licenseValidation" class="org.dspace.app.rest.submit.step.validation.LicenseValidation">
<property name="name" value="license"/>
</bean>
</beans>

View File

@@ -768,6 +768,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
WorkspaceItem wsitem = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
.withTitle("Submission Item")
.withIssueDate("2017-10-17")
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -926,6 +927,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
.withIssueDate("2017-10-17")
.withAuthor("Smith, Donald").withAuthor("Doe, John")
.withSubject("ExtraEntry")
.grantLicense()
.build();
claimedTask.setStepID("editstep");
claimedTask.setActionID("editaction");
@@ -1053,6 +1055,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
.withTitle("Workflow Item 1")
.withIssueDate("2017-10-17")
.withSubject("ExtraEntry")
.grantLicense()
.build();
claimedTask.setStepID("editstep");
claimedTask.setActionID("editaction");
@@ -1122,6 +1125,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
.withIssueDate("2017-10-17")
.withAuthor("Smith, Donald").withAuthor("Doe, John")
.withSubject("ExtraEntry")
.grantLicense()
.build();
claimedTask.setStepID("editstep");
claimedTask.setActionID("editaction");
@@ -1134,6 +1138,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
.withSubject("Subject2")
.withSubject("Subject3")
.withSubject("Subject4")
.grantLicense()
.build();
claimedTask2.setStepID("editstep");
claimedTask2.setActionID("editaction");
@@ -1146,6 +1151,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
.withSubject("Subject2")
.withSubject("Subject3")
.withSubject("Subject4")
.grantLicense()
.build();
claimedTask3.setStepID("editstep");
claimedTask3.setActionID("editaction");
@@ -1320,6 +1326,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
ClaimedTask claimedTask = ClaimedTaskBuilder.createClaimedTask(context, col1, eperson)
.withIssueDate("2017-10-17")
.withSubject("ExtraEntry")
.grantLicense()
.build();
claimedTask.setStepID("editstep");
claimedTask.setActionID("editaction");
@@ -1390,6 +1397,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
.withIssueDate("2017-10-17")
.withAuthor("Smith, Donald").withAuthor("Doe, John")
.withSubject("ExtraEntry")
.grantLicense()
.build();
claimedTask.setStepID("editstep");
claimedTask.setActionID("editaction");
@@ -1896,6 +1904,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
witem = WorkspaceItemBuilder.createWorkspaceItem(context, collection1)
.withTitle("Test WorkspaceItem")
.withIssueDate("2019-10-01")
.grantLicense()
.build();
bitstream = BitstreamBuilder.createBitstream(context, witem.getItem(), is)
@@ -2026,6 +2035,7 @@ public class WorkflowItemRestRepositoryIT extends AbstractControllerIntegrationT
WorkspaceItem witem = WorkspaceItemBuilder.createWorkspaceItem(context, collection1)
.withTitle("Test WorkspaceItem")
.withIssueDate("2019-10-01")
.grantLicense()
.build();
UUID itemUuid = witem.getItem().getID();

View File

@@ -12,6 +12,7 @@ import static com.jayway.jsonpath.matchers.JsonPathMatchers.hasJsonPath;
import static org.dspace.app.rest.matcher.MetadataMatcher.matchMetadata;
import static org.dspace.authorize.ResourcePolicy.TYPE_CUSTOM;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
@@ -331,16 +332,16 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem2, "Workspace Item 2",
"2016-02-13"))))
.andExpect(jsonPath("$._embedded.workspaceitems",
Matchers.not(Matchers.contains(WorkspaceItemMatcher
Matchers.not(contains(WorkspaceItemMatcher
.matchItemWithTitleAndDateIssued(workspaceItem3, "Workspace Item 3", "2016-02-13")))));
getClient(token).perform(get("/api/submission/workspaceitems").param("size", "2").param("page", "1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$._embedded.workspaceitems",
Matchers.contains(WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem3,
contains(WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem3,
"Workspace Item 3", "2016-02-13"))))
.andExpect(jsonPath("$._embedded.workspaceitems",
Matchers.not(Matchers.contains(
Matchers.not(contains(
WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem1, "Workspace Item 1",
"2017-10-17"),
WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem2, "Workspace Item 2",
@@ -725,7 +726,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem2, "Workspace Item 2",
"2016-02-13"))))
.andExpect(jsonPath("$._embedded.workspaceitems",
Matchers.not(Matchers.contains(WorkspaceItemMatcher
Matchers.not(contains(WorkspaceItemMatcher
.matchItemWithTitleAndDateIssued(workspaceItem3, "Workspace Item 3", "2016-02-13")))))
.andExpect(jsonPath("$.page.size", is(20)))
.andExpect(jsonPath("$.page.totalElements", is(2)));
@@ -738,10 +739,10 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.param("uuid", submitter1.getID().toString()))
.andExpect(status().isOk())
.andExpect(jsonPath("$._embedded.workspaceitems",
Matchers.contains(WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem2,
contains(WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem2,
"Workspace Item 2", "2016-02-13"))))
.andExpect(jsonPath("$._embedded.workspaceitems",
Matchers.not(Matchers.contains(
Matchers.not(contains(
WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem1, "Workspace Item 1",
"2017-10-17"),
WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem3, "Workspace Item 3",
@@ -756,7 +757,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.param("uuid", submitter2.getID().toString()))
.andExpect(status().isOk())
.andExpect(jsonPath("$._embedded.workspaceitems",
Matchers.contains(
contains(
WorkspaceItemMatcher.matchItemWithTitleAndDateIssued(workspaceItem3, "Workspace Item 3",
"2016-02-13"))))
.andExpect(jsonPath("$.page.size", is(20)))
@@ -1824,10 +1825,12 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
WorkspaceItem workspaceItem1 = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
.withTitle("Workspace Item 1")
.withIssueDate("2017-10-17")
.grantLicense()
.build();
WorkspaceItem workspaceItem2 = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
.withTitle("Workspace Item 2")
.grantLicense()
.build();
//disable file upload mandatory
@@ -1846,8 +1849,8 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
getClient(authToken).perform(get("/api/submission/workspaceitems/" + workspaceItem2.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.required')]",
Matchers.contains(
hasJsonPath("$.paths", Matchers.contains(
contains(
hasJsonPath("$.paths", contains(
hasJsonPath("$", Matchers.is("/sections/traditionalpageone/dc.date.issued"))
)))))
;
@@ -1860,7 +1863,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
// title and dateissued are required in the first panel
// the json path with a @ selector always return an array
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.required')]",
Matchers.contains(
contains(
hasJsonPath("$.paths", Matchers.containsInAnyOrder(
hasJsonPath("$", Matchers.is("/sections/traditionalpageone/dc.title")),
hasJsonPath("$", Matchers.is("/sections/traditionalpageone/dc.date.issued"))
@@ -1896,6 +1899,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("Workspace Item 1")
.withIssueDate("2017-10-17")
.withSubject("ExtraEntry")
.grantLicense()
.build();
//disable file upload mandatory
@@ -2188,6 +2192,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("Workspace Item 1")
.withIssueDate("2017-10-17")
.withSubject("ExtraEntry")
.grantLicense()
.build();
WorkspaceItem witemMultipleSubjects = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
@@ -2197,6 +2202,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withSubject("Subject2")
.withSubject("Subject3")
.withSubject("Subject4")
.grantLicense()
.build();
WorkspaceItem witemWithTitleDateAndSubjects = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
@@ -2206,6 +2212,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withSubject("Subject2")
.withSubject("Subject3")
.withSubject("Subject4")
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -2220,8 +2227,8 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.contentType(MediaType.APPLICATION_JSON_PATCH_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.required')]",
Matchers.contains(hasJsonPath("$.paths",
Matchers.contains(
contains(hasJsonPath("$.paths",
contains(
hasJsonPath("$",
Matchers.is("/sections/traditionalpageone/dc.title")))))))
.andExpect(jsonPath("$",
@@ -2233,8 +2240,8 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
getClient(authToken).perform(get("/api/submission/workspaceitems/" + witem.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.required')]",
Matchers.contains(
hasJsonPath("$.paths", Matchers.contains(
contains(
hasJsonPath("$.paths", contains(
hasJsonPath("$", Matchers.is("/sections/traditionalpageone/dc.title"))
)))))
.andExpect(jsonPath("$",
@@ -2468,6 +2475,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
WorkspaceItem witem = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
.withIssueDate("2017-10-17")
.withSubject("ExtraEntry")
.grantLicense()
.build();
//disable file upload mandatory
@@ -2539,6 +2547,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
WorkspaceItem witem = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
.withIssueDate("2017-10-17")
.withSubject("ExtraEntry")
.grantLicense()
.build();
//disable file upload mandatory
@@ -2749,6 +2758,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
WorkspaceItem witem = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
.withTitle("Test WorkspaceItem")
.withIssueDate("2017-10-17")
.grantLicense()
.build();
//disable file upload mandatory
@@ -3154,7 +3164,9 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.content(patchBody)
.contentType(MediaType.APPLICATION_JSON_PATCH_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors").doesNotExist())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.license.notgranted')]",
contains( hasJsonPath("$.paths",
contains(hasJsonPath("$", is("/sections/license")))))))
.andExpect(jsonPath("$.sections.license.granted",
is(false)))
.andExpect(jsonPath("$.sections.license.acceptanceDate").isEmpty())
@@ -3164,7 +3176,9 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
// verify that the patch changes have been persisted
getClient(authToken).perform(get("/api/submission/workspaceitems/" + witem.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors").doesNotExist())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.license.notgranted')]",
contains( hasJsonPath("$.paths",
contains(hasJsonPath("$", is("/sections/license")))))))
.andExpect(jsonPath("$.sections.license.granted",
is(false)))
.andExpect(jsonPath("$.sections.license.acceptanceDate").isEmpty())
@@ -3180,7 +3194,9 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.content(patchBody)
.contentType(MediaType.APPLICATION_JSON_PATCH_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors").doesNotExist())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.license.notgranted')]",
contains( hasJsonPath("$.paths",
contains(hasJsonPath("$", is("/sections/license")))))))
.andExpect(jsonPath("$.sections.license.granted",
is(false)))
.andExpect(jsonPath("$.sections.license.acceptanceDate").isEmpty())
@@ -3190,7 +3206,9 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
// verify that the patch changes have been persisted
getClient(authToken).perform(get("/api/submission/workspaceitems/" + witem2.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors").doesNotExist())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.license.notgranted')]",
contains( hasJsonPath("$.paths",
contains(hasJsonPath("$", is("/sections/license")))))))
.andExpect(jsonPath("$.sections.license.granted",
is(false)))
.andExpect(jsonPath("$.sections.license.acceptanceDate").isEmpty())
@@ -3206,7 +3224,9 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.content(patchBody)
.contentType(MediaType.APPLICATION_JSON_PATCH_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors").doesNotExist())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.license.notgranted')]",
contains( hasJsonPath("$.paths",
contains(hasJsonPath("$", is("/sections/license")))))))
.andExpect(jsonPath("$.sections.license.granted",
is(false)))
.andExpect(jsonPath("$.sections.license.acceptanceDate").isEmpty())
@@ -3216,7 +3236,9 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
// verify that the patch changes have been persisted
getClient(authToken).perform(get("/api/submission/workspaceitems/" + witem3.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors").doesNotExist())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.license.notgranted')]",
contains( hasJsonPath("$.paths",
contains(hasJsonPath("$", is("/sections/license")))))))
.andExpect(jsonPath("$.sections.license.granted",
is(false)))
.andExpect(jsonPath("$.sections.license.acceptanceDate").isEmpty())
@@ -3232,7 +3254,10 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.content(patchBody)
.contentType(MediaType.APPLICATION_JSON_PATCH_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors").doesNotExist())
.andExpect(
jsonPath("$.errors[?(@.message=='error.validation.license.notgranted')]",
contains( hasJsonPath("$.paths",
contains(hasJsonPath("$", is("/sections/license")))))))
.andExpect(jsonPath("$.sections.license.granted",
is(false)))
.andExpect(jsonPath("$.sections.license.acceptanceDate").isEmpty())
@@ -3242,7 +3267,9 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
// verify that the patch changes have been persisted
getClient(authToken).perform(get("/api/submission/workspaceitems/" + witem4.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors").doesNotExist())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.license.notgranted')]",
contains( hasJsonPath("$.paths",
contains(hasJsonPath("$", is("/sections/license")))))))
.andExpect(jsonPath("$.sections.license.granted",
is(false)))
.andExpect(jsonPath("$.sections.license.acceptanceDate").isEmpty())
@@ -3570,6 +3597,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
WorkspaceItem witem = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
.withTitle("WorkspaceItem")
.withIssueDate("2019-10-27")
.grantLicense()
.build();
InputStream pdf = getClass().getResourceAsStream("simple-article.pdf");
@@ -3609,6 +3637,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
WorkspaceItem witem = WorkspaceItemBuilder.createWorkspaceItem(context, col1)
.withTitle("Test WorkspaceItem")
.withIssueDate("2017-10-17")
.grantLicense()
.build();
InputStream pdf = getClass().getResourceAsStream("simple-article.pdf");
@@ -3659,8 +3688,8 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors").isNotEmpty())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.filerequired')]",
Matchers.contains(
hasJsonPath("$.paths", Matchers.contains(
contains(
hasJsonPath("$.paths", contains(
hasJsonPath("$", Matchers.is("/sections/upload"))
)))));
}
@@ -5435,6 +5464,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
"Test Item patchUploadAddAdminRPInstallAndVerifyOnlyAdminCanView")
.withIssueDate("2019-03-06")
.withFulltext("upload2.pdf", "/local/path/simple-article.pdf", pdf)
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -5513,6 +5543,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("Test Item patchUploadAddOpenAccessRPInstallAndVerifyOnlyAdminCanView")
.withIssueDate("2019-03-06")
.withFulltext("upload2.pdf", "/local/path/simple-article.pdf", pdf)
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -5579,6 +5610,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("Test Item patchUploadAddOpenAccessRPInstallAndVerifyOnlyAdminCanView")
.withIssueDate("2019-03-06")
.withFulltext("upload2.pdf", "/local/path/simple-article.pdf", pdf)
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -5672,6 +5704,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("Test wsItem")
.withIssueDate("2019-03-06")
.withFulltext("upload2.pdf", "/local/path/simple-article.pdf", pdf)
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -5745,6 +5778,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("Test wsItem")
.withIssueDate("2019-03-06")
.withFulltext("upload2.pdf", "/local/path/simple-article.pdf", pdf)
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -5808,6 +5842,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("Test wsItem")
.withIssueDate("2019-03-06")
.withFulltext("upload2.pdf", "/local/path/simple-article.pdf", pdf)
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -5890,6 +5925,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("Test wsItem")
.withIssueDate("2019-03-06")
.withFulltext("upload2.pdf", "/local/path/simple-article.pdf", pdf)
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -5954,6 +5990,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("Test wsItem")
.withIssueDate("2019-03-06")
.withFulltext("upload2.pdf", "/local/path/simple-article.pdf", pdf)
.grantLicense()
.build();
context.restoreAuthSystemState();
@@ -6049,8 +6086,8 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
getClient(authToken).perform(get(workspaceItemsUri + workspaceItem3.getID()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.errors[?(@.message=='error.validation.required')]",
Matchers.contains(
hasJsonPath("$.paths", Matchers.contains(
contains(
hasJsonPath("$.paths", contains(
hasJsonPath("$", Matchers.is("/sections/qualdroptest/dc.identifier"))
)))));
}
@@ -7127,6 +7164,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
.withTitle("My Article")
.withIssueDate("2019-03-16")
.withFulltext("upload.pdf", "/local/path/simple-article.pdf", pdf)
.grantLicense()
.build();
Bundle bundle = wItem.getItem().getBundles().get(0);
@@ -7255,7 +7293,7 @@ public class WorkspaceItemRestRepositoryIT extends AbstractControllerIntegration
getClient(tokenAdmin).perform(get("/api/authz/resourcepolicies/search/resource")
.param("uuid", bitstream2.getID().toString()))
.andExpect(status().isOk())
.andExpect(jsonPath("$._embedded.resourcepolicies", Matchers.contains(
.andExpect(jsonPath("$._embedded.resourcepolicies", contains(
ResourcePolicyMatcher.matchResourcePolicyProperties(anonymousGroup, null,
bitstream2, ResourcePolicy.TYPE_CUSTOM, Constants.READ, "embargo")
)))