Skip to content

Commit ad6098a

Browse files
committed
feat: let APIs return more info about role assignments
1 parent 613f0a0 commit ad6098a

4 files changed

Lines changed: 51 additions & 22 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/DvObject.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ public String visit(DataFile df) {
140140

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

143+
public String getDtype() { return dtype; }
144+
143145
@OneToMany(mappedBy="dvobject",fetch = FetchType.LAZY,cascade={CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
144146
private List<DataverseFeaturedItem> dataverseFeaturedItems;
145147

src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -90,17 +90,22 @@ public class JsonPrinter {
9090
@EJB
9191
static InAppNotificationsJsonPrinter inAppNotificationsJsonPrinter;
9292

93+
@EJB
94+
static RoleAssigneeServiceBean roleAssigneeService;
95+
9396
public static void injectSettingsService(SettingsServiceBean ssb,
9497
DatasetFieldServiceBean dfsb,
9598
DataverseFieldTypeInputLevelServiceBean dfils,
9699
DatasetServiceBean ds,
97100
MailServiceBean ms,
98-
InAppNotificationsJsonPrinter njp) {
101+
InAppNotificationsJsonPrinter njp,
102+
RoleAssigneeServiceBean ras) {
99103
settingsService = ssb;
100104
datasetFieldService = dfsb;
101105
datasetService = ds;
102106
mailService = ms;
103107
inAppNotificationsJsonPrinter = njp;
108+
roleAssigneeService = ras;
104109
}
105110

106111
public JsonPrinter() {
@@ -155,14 +160,24 @@ public static JsonArrayBuilder jsonRoleAssignments(List<RoleAssignment> roleAssi
155160
}
156161

157162
public static JsonObjectBuilder json(RoleAssignment ra) {
158-
return jsonObjectBuilder()
159-
.add("id", ra.getId())
160-
.add("assignee", ra.getAssigneeIdentifier())
161-
.add("roleId", ra.getRole().getId())
162-
.add("roleName", ra.getRole().getName())
163-
.add("_roleAlias", ra.getRole().getAlias())
164-
.add("privateUrlToken", ra.getPrivateUrlToken())
165-
.add("definitionPointId", ra.getDefinitionPoint().getId());
163+
JsonObjectBuilder job = jsonObjectBuilder()
164+
.add("id", ra.getId())
165+
.add("assignee", ra.getAssigneeIdentifier())
166+
.add("assigneeName", roleAssigneeService.getRoleAssignee(ra.getAssigneeIdentifier()).getDisplayInfo().getTitle())
167+
.add("roleId", ra.getRole().getId())
168+
.add("roleName", ra.getRole().getName())
169+
.add("roleDescription", ra.getRole().getDescription())
170+
.add("_roleAlias", ra.getRole().getAlias())
171+
.add("privateUrlToken", ra.getPrivateUrlToken())
172+
.add("definitionPointId", ra.getDefinitionPoint().getId())
173+
.add("definitionPointName", ra.getDefinitionPoint().getDisplayName())
174+
.add("definitionPointType", ra.getDefinitionPoint().getDtype());
175+
176+
if (ra.getDefinitionPoint().getGlobalId() != null) {
177+
job.add("definitionPointGlobalId", ra.getDefinitionPoint().getGlobalId().toString());
178+
}
179+
180+
return job;
166181
}
167182

168183
public static JsonArrayBuilder json(Set<Permission> permissions) {
@@ -296,12 +311,12 @@ public static JsonObjectBuilder json(Workflow wf){
296311

297312
return bld;
298313
}
299-
314+
300315
public static JsonObjectBuilder json(Dataverse dv, boolean minimal) {
301316
if (!minimal){
302317
return json(dv, false, false, false, null);
303318
} else {
304-
return json(dv, false, false, true, null);
319+
return json(dv, false, false, true, null);
305320
}
306321
}
307322

@@ -315,7 +330,7 @@ public static JsonObjectBuilder json(Dataverse dv, Boolean hideEmail, Boolean re
315330
.add("id", dv.getId())
316331
.add("alias", dv.getAlias())
317332
.add("name", dv.getName());
318-
//minimal refers to only returning the id alias and name for
333+
//minimal refers to only returning the id alias and name for
319334
//used in selecting collections available for linking
320335
if (minimal) {
321336
return bld;
@@ -1715,7 +1730,7 @@ public static JsonArrayBuilder json(List<UserNotification> notifications, Authen
17151730

17161731
return notificationsArray;
17171732
}
1718-
1733+
17191734
public static JsonObjectBuilder jsonLanguage(String locale, String title) {
17201735
// returns a single metadata language entry
17211736
return jsonObjectBuilder().add("locale", locale).add("title", title);
@@ -1725,7 +1740,7 @@ public static JsonArrayBuilder jsonLanguage(Map<String, String> langMap) {
17251740
// returns an array of metadatalanguages
17261741
return Json.createArrayBuilder(langMap.entrySet().stream().map(entry -> jsonLanguage(entry.getKey(), entry.getValue())).toList());
17271742
}
1728-
1743+
17291744
public static JsonArrayBuilder jsonDatasetVersionSummaries(List<DatasetVersionSummary> summaries) {
17301745
JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
17311746
summaries.stream()

src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinterHelper.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package edu.harvard.iq.dataverse.util.json;
22

3-
import edu.harvard.iq.dataverse.DatasetFieldServiceBean;
4-
import edu.harvard.iq.dataverse.DatasetServiceBean;
5-
import edu.harvard.iq.dataverse.DataverseFieldTypeInputLevelServiceBean;
6-
import edu.harvard.iq.dataverse.MailServiceBean;
3+
import edu.harvard.iq.dataverse.*;
74
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
85

96
import jakarta.annotation.PostConstruct;
@@ -37,6 +34,9 @@ public class JsonPrinterHelper {
3734
@EJB
3835
InAppNotificationsJsonPrinter inAppNotificationsJsonPrinter;
3936

37+
@EJB
38+
RoleAssigneeServiceBean roleAssigneeService;
39+
4040
@PostConstruct
4141
public void injectService() {
4242
JsonPrinter.injectSettingsService(
@@ -45,7 +45,8 @@ public void injectService() {
4545
datasetFieldInpuLevelSvc,
4646
datasetSvc,
4747
mailSvc,
48-
inAppNotificationsJsonPrinter
48+
inAppNotificationsJsonPrinter,
49+
roleAssigneeService
4950
);
5051
}
5152
}

src/test/java/edu/harvard/iq/dataverse/util/json/JsonPrinterTest.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ public void setUp() {
105105

106106
@Test
107107
public void testJson_RoleAssignment() {
108+
JsonPrinter.injectSettingsService(null, null, null, null, null, null, new MockRoleAssigneeService());
108109
DataverseRole aRole = new DataverseRole();
109110
PrivateUrlUser privateUrlUserIn = new PrivateUrlUser(42);
110111
RoleAssignee anAssignee = privateUrlUserIn;
@@ -122,6 +123,7 @@ public void testJson_RoleAssignment() {
122123

123124
@Test
124125
public void testJson_PrivateUrl() {
126+
JsonPrinter.injectSettingsService(null, null, null, null, null, null, new MockRoleAssigneeService());
125127
DataverseRole aRole = new DataverseRole();
126128
PrivateUrlUser privateUrlUserIn = new PrivateUrlUser(42);
127129
RoleAssignee anAssignee = privateUrlUserIn;
@@ -205,7 +207,7 @@ public void testDatasetContactOutOfBoxNoPrivacy() {
205207
datasetContactField.setDatasetFieldCompoundValues(vals);
206208
fields.add(datasetContactField);
207209

208-
JsonPrinter.injectSettingsService(null, null, null, null, null, null);
210+
JsonPrinter.injectSettingsService(null, null, null, null, null, null, null);
209211

210212
JsonObject jsonObject = JsonPrinter.json(block, fields).build();
211213
assertNotNull(jsonObject);
@@ -246,7 +248,7 @@ public void testDatasetContactWithPrivacy() {
246248
datasetContactField.setDatasetFieldCompoundValues(vals);
247249
fields.add(datasetContactField);
248250

249-
JsonPrinter.injectSettingsService(new MockSettingsSvc(), null, null, null, null, null);
251+
JsonPrinter.injectSettingsService(new MockSettingsSvc(), null, null, null, null, null, null);
250252

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

297299
block.setDatasetFieldTypes(datasetFieldTypes);
298300

299-
JsonPrinter.injectSettingsService(new MockSettingsSvc(), null, null ,null, null, null);
301+
JsonPrinter.injectSettingsService(new MockSettingsSvc(), null, null ,null, null, null, null);
300302

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

362364
}
363365

366+
private static class MockRoleAssigneeService extends RoleAssigneeServiceBean {
367+
368+
@Override
369+
public RoleAssignee getRoleAssignee(String identifier) {
370+
return new PrivateUrlUser(42);
371+
}
372+
373+
}
374+
364375
@Test
365376
public void testEnum() throws JsonParseException {
366377
JsonArrayBuilder arr = JsonPrinter.enumsToJson(Arrays.asList(Type.REVOKEROLE, Type.ASSIGNROLE));

0 commit comments

Comments
 (0)