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/11920-more-ra-info.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
All API endpoints that return information about role assignments (such as `/api/dataverses/$ID/assignments`) now include additional fields in their JSON responses: `assigneeName`, `roleDescription`, `definitionPointName`, `definitionPointType`, and `definitionPointGlobalId` (if available).
4 changes: 4 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/DvObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,10 @@ public String visit(DataFile df) {

@Column(insertable = false, updatable = false) private String dtype;

public String getDtype() {
return dtype;
}

@OneToMany(mappedBy="dvobject",fetch = FetchType.LAZY,cascade={CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private List<DataverseFeaturedItem> dataverseFeaturedItems;

Expand Down
33 changes: 24 additions & 9 deletions src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,17 +90,22 @@ public class JsonPrinter {
@EJB
static InAppNotificationsJsonPrinter inAppNotificationsJsonPrinter;

@EJB
static RoleAssigneeServiceBean roleAssigneeService;

public static void injectSettingsService(SettingsServiceBean ssb,
DatasetFieldServiceBean dfsb,
DataverseFieldTypeInputLevelServiceBean dfils,
DatasetServiceBean ds,
MailServiceBean ms,
InAppNotificationsJsonPrinter njp) {
InAppNotificationsJsonPrinter njp,
RoleAssigneeServiceBean ras) {
settingsService = ssb;
datasetFieldService = dfsb;
datasetService = ds;
mailService = ms;
inAppNotificationsJsonPrinter = njp;
roleAssigneeService = ras;
}

public JsonPrinter() {
Expand Down Expand Up @@ -155,14 +160,24 @@ public static JsonArrayBuilder jsonRoleAssignments(List<RoleAssignment> roleAssi
}

public static JsonObjectBuilder json(RoleAssignment ra) {
return jsonObjectBuilder()
.add("id", ra.getId())
.add("assignee", ra.getAssigneeIdentifier())
.add("roleId", ra.getRole().getId())
.add("roleName", ra.getRole().getName())
.add("_roleAlias", ra.getRole().getAlias())
.add("privateUrlToken", ra.getPrivateUrlToken())
.add("definitionPointId", ra.getDefinitionPoint().getId());
JsonObjectBuilder job = jsonObjectBuilder()
.add("id", ra.getId())
.add("assignee", ra.getAssigneeIdentifier())
.add("assigneeName", roleAssigneeService.getRoleAssignee(ra.getAssigneeIdentifier()).getDisplayInfo().getTitle())
.add("roleId", ra.getRole().getId())
.add("roleName", ra.getRole().getName())
.add("roleDescription", ra.getRole().getDescription())
.add("_roleAlias", ra.getRole().getAlias())
.add("privateUrlToken", ra.getPrivateUrlToken())
.add("definitionPointId", ra.getDefinitionPoint().getId())
.add("definitionPointName", ra.getDefinitionPoint().getDisplayName())
.add("definitionPointType", ra.getDefinitionPoint().getDtype());

if (ra.getDefinitionPoint().getGlobalId() != null) {
job.add("definitionPointGlobalId", ra.getDefinitionPoint().getGlobalId().toString());
}

return job;
}

public static JsonArrayBuilder json(Set<Permission> permissions) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package edu.harvard.iq.dataverse.util.json;

import edu.harvard.iq.dataverse.DatasetFieldServiceBean;
import edu.harvard.iq.dataverse.DatasetServiceBean;
import edu.harvard.iq.dataverse.DataverseFieldTypeInputLevelServiceBean;
import edu.harvard.iq.dataverse.MailServiceBean;
import edu.harvard.iq.dataverse.*;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;

import jakarta.annotation.PostConstruct;
Expand Down Expand Up @@ -37,6 +34,9 @@ public class JsonPrinterHelper {
@EJB
InAppNotificationsJsonPrinter inAppNotificationsJsonPrinter;

@EJB
RoleAssigneeServiceBean roleAssigneeService;

@PostConstruct
public void injectService() {
JsonPrinter.injectSettingsService(
Expand All @@ -45,7 +45,8 @@ public void injectService() {
datasetFieldInpuLevelSvc,
datasetSvc,
mailSvc,
inAppNotificationsJsonPrinter
inAppNotificationsJsonPrinter,
roleAssigneeService
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ public void setUp() {

@Test
public void testJson_RoleAssignment() {
JsonPrinter.injectSettingsService(null, null, null, null, null, null, new MockRoleAssigneeService());
DataverseRole aRole = new DataverseRole();
PrivateUrlUser privateUrlUserIn = new PrivateUrlUser(42);
RoleAssignee anAssignee = privateUrlUserIn;
Expand All @@ -122,6 +123,7 @@ public void testJson_RoleAssignment() {

@Test
public void testJson_PrivateUrl() {
JsonPrinter.injectSettingsService(null, null, null, null, null, null, new MockRoleAssigneeService());
DataverseRole aRole = new DataverseRole();
PrivateUrlUser privateUrlUserIn = new PrivateUrlUser(42);
RoleAssignee anAssignee = privateUrlUserIn;
Expand Down Expand Up @@ -205,7 +207,7 @@ public void testDatasetContactOutOfBoxNoPrivacy() {
datasetContactField.setDatasetFieldCompoundValues(vals);
fields.add(datasetContactField);

JsonPrinter.injectSettingsService(null, null, null, null, null, null);
JsonPrinter.injectSettingsService(null, null, null, null, null, null, null);

JsonObject jsonObject = JsonPrinter.json(block, fields).build();
assertNotNull(jsonObject);
Expand Down Expand Up @@ -246,7 +248,7 @@ public void testDatasetContactWithPrivacy() {
datasetContactField.setDatasetFieldCompoundValues(vals);
fields.add(datasetContactField);

JsonPrinter.injectSettingsService(new MockSettingsSvc(), null, null, null, null, null);
JsonPrinter.injectSettingsService(new MockSettingsSvc(), null, null, null, null, null, null);

JsonObject jsonObject = JsonPrinter.json(block, fields).build();
assertNotNull(jsonObject);
Expand Down Expand Up @@ -296,7 +298,7 @@ public void testDatasetFieldTypesWithChildren() {

block.setDatasetFieldTypes(datasetFieldTypes);

JsonPrinter.injectSettingsService(new MockSettingsSvc(), null, null ,null, null, null);
JsonPrinter.injectSettingsService(new MockSettingsSvc(), null, null ,null, null, null, null);

JsonObject jsonObject = JsonPrinter.json(block).build();
assertNotNull(jsonObject);
Expand Down Expand Up @@ -361,6 +363,15 @@ public boolean isTrueForKey(SettingsServiceBean.Key key, boolean defaultValue) {

}

private static class MockRoleAssigneeService extends RoleAssigneeServiceBean {

@Override
public RoleAssignee getRoleAssignee(String identifier) {
return new PrivateUrlUser(42);
}

}

@Test
public void testEnum() throws JsonParseException {
JsonArrayBuilder arr = JsonPrinter.enumsToJson(Arrays.asList(Type.REVOKEROLE, Type.ASSIGNROLE));
Expand Down