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 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",