diff --git a/pom.xml b/pom.xml
index 7f20cba..c32198e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
edu.stanford.protege
webprotege-authorization
- 2.0.1
+ 2.1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleAssignmentsRequest.java b/src/main/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleAssignmentsRequest.java
new file mode 100644
index 0000000..da1dd8d
--- /dev/null
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleAssignmentsRequest.java
@@ -0,0 +1,17 @@
+package edu.stanford.protege.webprotege.authorization;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import edu.stanford.protege.webprotege.common.ProjectId;
+import edu.stanford.protege.webprotege.common.ProjectRequest;
+
+@JsonTypeName(GetProjectRoleAssignmentsRequest.CHANNEL)
+public record GetProjectRoleAssignmentsRequest(@JsonProperty("projectId") ProjectId projectId) implements ProjectRequest {
+
+ public static final String CHANNEL = "webprotege.authorization.GetProjectRoleAssignments";
+
+ @Override
+ public String getChannel() {
+ return CHANNEL;
+ }
+}
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleAssignmentsResponse.java b/src/main/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleAssignmentsResponse.java
new file mode 100644
index 0000000..475046b
--- /dev/null
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleAssignmentsResponse.java
@@ -0,0 +1,17 @@
+package edu.stanford.protege.webprotege.authorization;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import edu.stanford.protege.webprotege.common.Response;
+
+import java.util.Objects;
+
+@JsonTypeName(GetProjectRoleAssignmentsRequest.CHANNEL)
+public record GetProjectRoleAssignmentsResponse(@JsonProperty("assignments") ProjectRoleAssignments assignments) implements Response {
+
+ @JsonCreator
+ public GetProjectRoleAssignmentsResponse(@JsonProperty("assignments") ProjectRoleAssignments assignments) {
+ this.assignments = Objects.requireNonNull(assignments);
+ }
+}
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/ProjectRoleAssignments.java b/src/main/java/edu/stanford/protege/webprotege/authorization/ProjectRoleAssignments.java
new file mode 100644
index 0000000..757af2d
--- /dev/null
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/ProjectRoleAssignments.java
@@ -0,0 +1,15 @@
+package edu.stanford.protege.webprotege.authorization;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+import java.util.Objects;
+
+public record ProjectRoleAssignments(@JsonProperty("userAssignments") List userAssignments) {
+
+ @JsonCreator
+ public ProjectRoleAssignments(@JsonProperty("userAssignments" ) List userAssignments) {
+ this.userAssignments = Objects.requireNonNull(userAssignments);
+ }
+}
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/ResetProjectRoleDefinitionsRequest.java b/src/main/java/edu/stanford/protege/webprotege/authorization/ResetProjectRoleDefinitionsRequest.java
new file mode 100644
index 0000000..50ebfde
--- /dev/null
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/ResetProjectRoleDefinitionsRequest.java
@@ -0,0 +1,19 @@
+package edu.stanford.protege.webprotege.authorization;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import edu.stanford.protege.webprotege.common.ProjectId;
+import edu.stanford.protege.webprotege.common.ProjectRequest;
+
+import static edu.stanford.protege.webprotege.authorization.ResetProjectRoleDefinitionsRequest.CHANNEL;
+
+@JsonTypeName(CHANNEL)
+public record ResetProjectRoleDefinitionsRequest(@JsonProperty("projectId") ProjectId projectId) implements ProjectRequest {
+
+ public static final String CHANNEL = "webprotege.authorization.ResetProjectRoleDefinitions";
+
+ @Override
+ public String getChannel() {
+ return CHANNEL;
+ }
+}
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/ResetProjectRoleDefinitionsResponse.java b/src/main/java/edu/stanford/protege/webprotege/authorization/ResetProjectRoleDefinitionsResponse.java
new file mode 100644
index 0000000..50632d6
--- /dev/null
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/ResetProjectRoleDefinitionsResponse.java
@@ -0,0 +1,16 @@
+package edu.stanford.protege.webprotege.authorization;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import edu.stanford.protege.webprotege.common.Response;
+
+import java.util.List;
+import java.util.Objects;
+
+@JsonTypeName(ResetProjectRoleDefinitionsRequest.CHANNEL)
+public record ResetProjectRoleDefinitionsResponse(@JsonProperty("roleDefinitions") List roleDefinitions) implements Response {
+
+ public ResetProjectRoleDefinitionsResponse(@JsonProperty("roleDefinitions" ) List roleDefinitions) {
+ this.roleDefinitions = List.copyOf(Objects.requireNonNull(roleDefinitions));
+ }
+}
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/RoleDefinition.java b/src/main/java/edu/stanford/protege/webprotege/authorization/RoleDefinition.java
index fdfbb2c..7806d3f 100644
--- a/src/main/java/edu/stanford/protege/webprotege/authorization/RoleDefinition.java
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/RoleDefinition.java
@@ -4,6 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -14,17 +15,20 @@ public record RoleDefinition(@Nonnull @JsonProperty("roleId") RoleId roleId,
@Nonnull @JsonProperty("roleType") RoleType roleType,
@Nonnull @JsonProperty("parentRoles") Set parentRoles,
@Nonnull @JsonProperty("roleCapabilities") Set roleCapabilities,
+ @Nonnull @JsonProperty("label") String label,
@Nonnull @JsonProperty("description") String description) {
public RoleDefinition(@Nonnull @JsonProperty("roleId") RoleId roleId,
@Nonnull @JsonProperty("roleType") RoleType roleType,
@Nonnull @JsonProperty("parentRoles") Set parentRoles,
@Nonnull @JsonProperty("roleCapabilities") Set roleCapabilities,
+ @Nonnull @JsonProperty("label") String label,
@Nonnull @JsonProperty("description") String description) {
this.roleId = Objects.requireNonNull(roleId);
this.roleType = Objects.requireNonNull(roleType);
this.parentRoles = Set.copyOf(Objects.requireNonNull(parentRoles));
this.roleCapabilities = Set.copyOf(Objects.requireNonNull(roleCapabilities));
+ this.label = Objects.requireNonNull(label);
this.description = Objects.requireNonNull(description);
}
@@ -33,19 +37,22 @@ public static RoleDefinition get(@JsonProperty("roleId") RoleId roleId,
@JsonProperty("roleType") RoleType roleType,
@JsonProperty("parentRoles") Set parentRoles,
@JsonProperty("roleCapabilities") Set roleCapabilities,
+ @JsonProperty("label") String label,
@JsonProperty("description") String description) {
- return new RoleDefinition(roleId, roleType, parentRoles, roleCapabilities, description);
+ return new RoleDefinition(roleId, roleType, parentRoles, roleCapabilities,
+ Objects.requireNonNullElse(label, ""),
+ description);
}
public RoleDefinition withoutCapabilities(Predicate filter) {
var remainingCapabilities = roleCapabilities.stream().filter(not(filter)).collect(Collectors.toSet());
- return new RoleDefinition(roleId, roleType, parentRoles, remainingCapabilities, description);
+ return new RoleDefinition(roleId, roleType, parentRoles, remainingCapabilities, label, description);
}
public RoleDefinition addCapabilities(Collection extends Capability> capabilities) {
var combinedCapabilities = new LinkedHashSet<>(this.roleCapabilities);
combinedCapabilities.addAll(capabilities);
- return new RoleDefinition(roleId, roleType, parentRoles, combinedCapabilities, description);
+ return new RoleDefinition(roleId, roleType, parentRoles, combinedCapabilities, label, description);
}
}
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleAssignmentsRequest.java b/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleAssignmentsRequest.java
new file mode 100644
index 0000000..3076dc8
--- /dev/null
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleAssignmentsRequest.java
@@ -0,0 +1,27 @@
+package edu.stanford.protege.webprotege.authorization;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import edu.stanford.protege.webprotege.common.ProjectId;
+import edu.stanford.protege.webprotege.common.Request;
+
+import java.util.Objects;
+
+import static edu.stanford.protege.webprotege.authorization.SetProjectRoleAssignmentsRequest.CHANNEL;
+
+@JsonTypeName(CHANNEL)
+public record SetProjectRoleAssignmentsRequest(@JsonProperty("projectId") ProjectId projectId,
+ @JsonProperty("assignments") ProjectRoleAssignments assignments) implements Request {
+
+ public static final String CHANNEL = "webprotege.authorization.SetProjectRoleAssignments";
+
+ public SetProjectRoleAssignmentsRequest(@JsonProperty("projectId" ) ProjectId projectId, @JsonProperty("assignments" ) ProjectRoleAssignments assignments) {
+ this.projectId = Objects.requireNonNull(projectId);
+ this.assignments = Objects.requireNonNull(assignments);
+ }
+
+ @Override
+ public String getChannel() {
+ return CHANNEL;
+ }
+}
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleAssignmentsResponse.java b/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleAssignmentsResponse.java
new file mode 100644
index 0000000..ee24796
--- /dev/null
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleAssignmentsResponse.java
@@ -0,0 +1,15 @@
+package edu.stanford.protege.webprotege.authorization;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import edu.stanford.protege.webprotege.common.Response;
+
+import java.util.Objects;
+
+@JsonTypeName(SetProjectRoleAssignmentsRequest.CHANNEL)
+public record SetProjectRoleAssignmentsResponse(@JsonProperty("assignments") ProjectRoleAssignments assignments) implements Response {
+
+ public SetProjectRoleAssignmentsResponse(@JsonProperty("assignments" ) ProjectRoleAssignments assignments) {
+ this.assignments = Objects.requireNonNull(assignments);
+ }
+}
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsRequest.java b/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsRequest.java
index b6ed72b..efcd00d 100644
--- a/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsRequest.java
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsRequest.java
@@ -13,7 +13,6 @@
import static com.fasterxml.jackson.annotation.JsonTypeInfo.*;
-@JsonTypeInfo(use = Id.NAME)
@JsonTypeName(SetProjectRoleDefinitionsRequest.CHANNEL)
public record SetProjectRoleDefinitionsRequest(@JsonProperty("projectId") ProjectId projectId,
@JsonProperty("roleDefinitions") List roleDefinitions) implements Request {
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsResponse.java b/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsResponse.java
index 06a68dc..746fb0f 100644
--- a/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsResponse.java
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsResponse.java
@@ -12,7 +12,6 @@
import static com.fasterxml.jackson.annotation.JsonTypeInfo.*;
-@JsonTypeInfo(use = Id.NAME)
@JsonTypeName(SetProjectRoleDefinitionsRequest.CHANNEL)
public record SetProjectRoleDefinitionsResponse(List roleDefinitions) implements Response {
diff --git a/src/main/java/edu/stanford/protege/webprotege/authorization/UserRoleAssignment.java b/src/main/java/edu/stanford/protege/webprotege/authorization/UserRoleAssignment.java
new file mode 100644
index 0000000..9410ea1
--- /dev/null
+++ b/src/main/java/edu/stanford/protege/webprotege/authorization/UserRoleAssignment.java
@@ -0,0 +1,17 @@
+package edu.stanford.protege.webprotege.authorization;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import edu.stanford.protege.webprotege.common.UserId;
+
+import java.util.Objects;
+
+public record UserRoleAssignment(@JsonProperty("userId") UserId userId,
+ @JsonProperty("roleId") RoleId roleId) {
+
+ @JsonCreator
+ public UserRoleAssignment(@JsonProperty("userId" ) UserId userId, @JsonProperty("roleId" ) RoleId roleId) {
+ this.userId = Objects.requireNonNull(userId);
+ this.roleId = Objects.requireNonNull(roleId);
+ }
+}
diff --git a/src/test/java/edu/stanford/protege/webprotege/authorization/GetDefaultRoleDefinitionsResponseTest.java b/src/test/java/edu/stanford/protege/webprotege/authorization/GetDefaultRoleDefinitionsResponseTest.java
index f446fb6..f68580f 100644
--- a/src/test/java/edu/stanford/protege/webprotege/authorization/GetDefaultRoleDefinitionsResponseTest.java
+++ b/src/test/java/edu/stanford/protege/webprotege/authorization/GetDefaultRoleDefinitionsResponseTest.java
@@ -29,6 +29,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("parent-role")),
Set.of(BasicCapability.valueOf("ViewProject")),
+ "Test label",
"Test role description"
)
);
diff --git a/src/test/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleDefinitionsResponseTest.java b/src/test/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleDefinitionsResponseTest.java
index 639ac6a..e376e28 100644
--- a/src/test/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleDefinitionsResponseTest.java
+++ b/src/test/java/edu/stanford/protege/webprotege/authorization/GetProjectRoleDefinitionsResponseTest.java
@@ -30,6 +30,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("parent-role")),
Set.of(BasicCapability.valueOf("ViewProject")),
+ "Test label",
"Test role description"
)
);
diff --git a/src/test/java/edu/stanford/protege/webprotege/authorization/RoleDefinitionTest.java b/src/test/java/edu/stanford/protege/webprotege/authorization/RoleDefinitionTest.java
index fdd5c43..e99fe41 100644
--- a/src/test/java/edu/stanford/protege/webprotege/authorization/RoleDefinitionTest.java
+++ b/src/test/java/edu/stanford/protege/webprotege/authorization/RoleDefinitionTest.java
@@ -25,8 +25,9 @@ void shouldSerialize() throws IOException {
var roleId = RoleId.valueOf("test-role");
var parentRoles = Set.of(RoleId.valueOf("parent-role"));
var capabilities = Set.of(BasicCapability.valueOf("ViewProject"));
+ var label = "Test label";
var description = "Test role description";
- var roleDefinition = new RoleDefinition(roleId, RoleType.PROJECT_ROLE, parentRoles, capabilities, description);
+ var roleDefinition = new RoleDefinition(roleId, RoleType.PROJECT_ROLE, parentRoles, capabilities, label, description);
var jsonContent = tester.write(roleDefinition);
@@ -35,6 +36,7 @@ void shouldSerialize() throws IOException {
assertThat(jsonContent).extractingJsonPathArrayValue("$.parentRoles").containsExactly("parent-role");
assertThat(jsonContent).extractingJsonPathStringValue("$.roleCapabilities[0].id").isEqualTo("ViewProject");
assertThat(jsonContent).extractingJsonPathStringValue("$.roleCapabilities[0].@type").isEqualTo("BasicCapability");
+ assertThat(jsonContent).extractingJsonPathStringValue("$.label").isEqualTo(label);
assertThat(jsonContent).extractingJsonPathStringValue("$.description").isEqualTo(description);
}
@@ -51,6 +53,7 @@ void shouldDeserialize() throws IOException {
"id": "ViewProject"
}
],
+ "label": "Test label",
"description": "Test role description"
}
""";
@@ -60,6 +63,7 @@ void shouldDeserialize() throws IOException {
assertThat(deserialized.roleId()).isEqualTo(RoleId.valueOf("test-role"));
assertThat(deserialized.parentRoles()).containsExactly(RoleId.valueOf("parent-role"));
assertThat(deserialized.roleCapabilities()).containsExactly(BasicCapability.valueOf("ViewProject"));
+ assertThat(deserialized.label()).isEqualTo("Test label");
assertThat(deserialized.description()).isEqualTo("Test role description");
}
}
\ No newline at end of file
diff --git a/src/test/java/edu/stanford/protege/webprotege/authorization/SetDefaultRoleDefinitionsRequestTest.java b/src/test/java/edu/stanford/protege/webprotege/authorization/SetDefaultRoleDefinitionsRequestTest.java
index cbb3a69..ea5e250 100644
--- a/src/test/java/edu/stanford/protege/webprotege/authorization/SetDefaultRoleDefinitionsRequestTest.java
+++ b/src/test/java/edu/stanford/protege/webprotege/authorization/SetDefaultRoleDefinitionsRequestTest.java
@@ -29,6 +29,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("ParentRole")),
Set.of(BasicCapability.valueOf("EditOntology")),
+ "Test label",
"Test Description"
);
var request = SetDefaultRoleDefinitionsRequest.get(List.of(roleDefinition));
diff --git a/src/test/java/edu/stanford/protege/webprotege/authorization/SetDefaultRoleDefinitionsResponseTest.java b/src/test/java/edu/stanford/protege/webprotege/authorization/SetDefaultRoleDefinitionsResponseTest.java
index 497e1d8..3cd9abc 100644
--- a/src/test/java/edu/stanford/protege/webprotege/authorization/SetDefaultRoleDefinitionsResponseTest.java
+++ b/src/test/java/edu/stanford/protege/webprotege/authorization/SetDefaultRoleDefinitionsResponseTest.java
@@ -29,6 +29,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("ParentRole")),
Set.of(BasicCapability.valueOf("EditOntology")),
+ "Test label",
"Test Description"
);
var response = SetDefaultRoleDefinitionsResponse.get(List.of(roleDefinition));
diff --git a/src/test/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsRequestTest.java b/src/test/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsRequestTest.java
index d30bb7a..39b3dc7 100644
--- a/src/test/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsRequestTest.java
+++ b/src/test/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsRequestTest.java
@@ -31,6 +31,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("parent-role")),
Set.of(BasicCapability.valueOf("ViewProject")),
+ "Test label",
"Test role description"
)
);
@@ -38,7 +39,6 @@ void shouldSerialize() throws IOException {
var jsonContent = tester.write(request);
- assertThat(jsonContent).extractingJsonPathStringValue("$.@type").isEqualTo("webprotege.authorization.SetProjectRoleDefinitions");
assertThat(jsonContent).extractingJsonPathStringValue("$.projectId").isEqualTo("12345678-1234-5678-1234-567812345678");
assertThat(jsonContent).extractingJsonPathArrayValue("$.roleDefinitions").hasSize(1);
}
@@ -47,7 +47,6 @@ void shouldSerialize() throws IOException {
void shouldDeserialize() throws IOException {
var jsonContent = """
{
- "@type": "webprotege.authorization.SetProjectRoleDefinitions",
"projectId": "12345678-1234-5678-1234-567812345678",
"roleDefinitions": [
{
diff --git a/src/test/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsResponseTest.java b/src/test/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsResponseTest.java
index cd63f60..3f293d1 100644
--- a/src/test/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsResponseTest.java
+++ b/src/test/java/edu/stanford/protege/webprotege/authorization/SetProjectRoleDefinitionsResponseTest.java
@@ -29,6 +29,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("parent-role")),
Set.of(BasicCapability.valueOf("ViewProject")),
+ "Test label",
"Test role description"
)
);
@@ -36,7 +37,6 @@ void shouldSerialize() throws IOException {
var jsonContent = tester.write(response);
- assertThat(jsonContent).extractingJsonPathStringValue("$.@type").isEqualTo("webprotege.authorization.SetProjectRoleDefinitions");
assertThat(jsonContent).extractingJsonPathArrayValue("$.roleDefinitions").hasSize(1);
}
@@ -44,7 +44,6 @@ void shouldSerialize() throws IOException {
void shouldDeserialize() throws IOException {
var jsonContent = """
{
- "@type": "webprotege.authorization.SetProjectRoleDefinitions",
"roleDefinitions": [
{
"roleId": "test-role",