Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/release-notes/12112-get-default-contributor-role.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
A new API endpoint for getting the default contributor role of a collection (`GET /api/dataverses/$ID/defaultContributorRole`) was added.
15 changes: 15 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java
Original file line number Diff line number Diff line change
Expand Up @@ -1631,6 +1631,21 @@ public Response updateDefaultContributorRole(

}

@GET
@AuthRequired
@Path("{identifier}/defaultContributorRole")
public Response getDefaultContributorRole(
@Context ContainerRequestContext crc,
@PathParam("identifier") String dvIdtf) {

return response(req -> ok(
json(
execCommand(
new GetCollectionDefaultContributorRoleCommand(req,
findDataverseOrDie(dvIdtf))))), getRequestUser(crc));

}

@DELETE
@AuthRequired
@Path("{identifier}/groups/{aliasInOwner}")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package edu.harvard.iq.dataverse.engine.command.impl;

import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.authorization.DataverseRole;
import edu.harvard.iq.dataverse.authorization.Permission;
import edu.harvard.iq.dataverse.engine.command.AbstractCommand;
import edu.harvard.iq.dataverse.engine.command.CommandContext;
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

/**
*
* @author landreev
* Gets the default contributor role of a collection.
* Used by the /api/dataverses/.../defaultContributorRole API.
*/
@RequiredPermissions( Permission.ManageDataversePermissions )
public class GetCollectionDefaultContributorRoleCommand extends AbstractCommand<DataverseRole> {

private final Dataverse dataverse;

public GetCollectionDefaultContributorRoleCommand(DataverseRequest aRequest, Dataverse target) {
super(aRequest, target);
dataverse = target;
}

@Override
public DataverseRole execute(CommandContext ctxt) throws CommandException {

if (dataverse != null) {
return dataverse.getDefaultContributorRole();
}

return null;
}
}


23 changes: 13 additions & 10 deletions src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java
Original file line number Diff line number Diff line change
Expand Up @@ -261,16 +261,19 @@ public static JsonArrayBuilder jsonDataverseRoles(List<DataverseRole> roles) {
}

public static JsonObjectBuilder json(DataverseRole role) {
JsonObjectBuilder bld = jsonObjectBuilder()
.add("alias", role.getAlias())
.add("name", role.getName())
.add("permissions", JsonPrinter.json(role.permissions()))
.add("description", role.getDescription());
if (role.getId() != null) {
bld.add("id", role.getId());
}
if (role.getOwner() != null && role.getOwner().getId() != null) {
bld.add("ownerId", role.getOwner().getId());
JsonObjectBuilder bld = jsonObjectBuilder();

if (role != null) {
bld.add("alias", role.getAlias())
.add("name", role.getName())
.add("permissions", JsonPrinter.json(role.permissions()))
.add("description", role.getDescription());
if (role.getId() != null) {
bld.add("id", role.getId());
}
if (role.getOwner() != null && role.getOwner().getId() != null) {
bld.add("ownerId", role.getOwner().getId());
}
}

return bld;
Expand Down
15 changes: 15 additions & 0 deletions src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.nio.file.Paths;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
Expand Down Expand Up @@ -544,6 +545,13 @@ public void testUpdateDefaultContributorRole() {
updateDataverseDefaultRole.then().assertThat()
.body("data.message", equalTo("Default contributor role for Dataverse " + dataverseAlias + " has been set to Curator."))
.statusCode(200);

// test GET API for retrieving the role that was just set
Response getDataverseDefaultRole = UtilIT.getDefaultContributorsRoleOnDataverse(dataverseAlias, apiToken);
getDataverseDefaultRole.prettyPrint();
getDataverseDefaultRole.then().assertThat()
.body("data.alias", equalTo("curator"))
.statusCode(200);

//for test use an existing role. In practice this likely will be a custom role
Response updateDataverseDefaultRoleNone = UtilIT.updateDefaultContributorsRoleOnDataverse(dataverseAlias, "none", apiToken);
Expand All @@ -552,6 +560,13 @@ public void testUpdateDefaultContributorRole() {
.body("data.message", equalTo("Default contributor role for Dataverse " + dataverseAlias + " has been set to None."))
.statusCode(200);

// test GET API for retrieving the role that was just set
Response getDataverseDefaultRoleNone = UtilIT.getDefaultContributorsRoleOnDataverse(dataverseAlias, apiToken);
getDataverseDefaultRoleNone.prettyPrint();
getDataverseDefaultRoleNone.then().assertThat()
.body("data", equalTo(Collections.emptyMap()))
.statusCode(200);

// try bad role alias
Response updateDataverseDefaultRoleBadRoleAlias = UtilIT.updateDefaultContributorsRoleOnDataverse(dataverseAlias, "colonel", apiToken);
updateDataverseDefaultRoleBadRoleAlias.prettyPrint();
Expand Down
9 changes: 8 additions & 1 deletion src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -2624,14 +2624,21 @@ static Response getRoleAssignmentsOnDataverse(String dataverseAliasOrId, String
.get(url);
}

static Response updateDefaultContributorsRoleOnDataverse(String dataverseAliasOrId,String roleAlias, String apiToken) {
static Response updateDefaultContributorsRoleOnDataverse(String dataverseAliasOrId, String roleAlias, String apiToken) {
String url = "/api/dataverses/" + dataverseAliasOrId + "/defaultContributorRole/" + roleAlias;
System.out.println("URL: " + url);
return given()
.header(API_TOKEN_HTTP_HEADER, apiToken)
.put(url);
}

static Response getDefaultContributorsRoleOnDataverse(String dataverseAliasOrId, String apiToken) {
String url = "/api/dataverses/" + dataverseAliasOrId + "/defaultContributorRole";
return given()
.header(API_TOKEN_HTTP_HEADER, apiToken)
.get(url);
}

static Response getRoleAssignmentsOnDataset(String datasetId, String persistentId, String apiToken) {
String url = "/api/datasets/" + datasetId + "/assignments";
System.out.println("URL: " + url);
Expand Down
Loading