From d93ef1e07ba8de6b25ee1908c80315b9c53c53f0 Mon Sep 17 00:00:00 2001 From: Josef Hardi Date: Mon, 18 May 2026 16:41:15 -0700 Subject: [PATCH 1/7] fix(wire-dto): rename non-canonical JSON field names on MISMATCH records MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two backend records used JSON field names that diverged from the canonical `changeRequestId` used by every other ContentChangeRequest implementer: EditAnnotationsAction (`contentChangeRequest`) and MergeUploadedProjectAction (`changeRequesId` — typo). Both showed up in the MISMATCH bucket of the wire-DTO conformance audit (#53) because the gwt-ui client expects the canonical name. Renaming the JSON property aligns these records with the rest of the wire contract; the Java component name is unaffected. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../protege/webprotege/bulkop/EditAnnotationsAction.java | 2 +- .../protege/webprotege/merge/MergeUploadedProjectAction.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/stanford/protege/webprotege/bulkop/EditAnnotationsAction.java b/src/main/java/edu/stanford/protege/webprotege/bulkop/EditAnnotationsAction.java index 141168ea..377f005d 100644 --- a/src/main/java/edu/stanford/protege/webprotege/bulkop/EditAnnotationsAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/bulkop/EditAnnotationsAction.java @@ -21,7 +21,7 @@ @JsonTypeName("webprotege.bulkop.EditAnnotations") -public record EditAnnotationsAction(@JsonProperty("contentChangeRequest") ChangeRequestId changeRequestId, +public record EditAnnotationsAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, @JsonProperty("projectId") @Nonnull ProjectId projectId, @JsonProperty("entities") @Nonnull ImmutableSet entities, @JsonProperty("operation") Operation operation, diff --git a/src/main/java/edu/stanford/protege/webprotege/merge/MergeUploadedProjectAction.java b/src/main/java/edu/stanford/protege/webprotege/merge/MergeUploadedProjectAction.java index 938992cc..6c94dcf6 100644 --- a/src/main/java/edu/stanford/protege/webprotege/merge/MergeUploadedProjectAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/merge/MergeUploadedProjectAction.java @@ -16,7 +16,7 @@ @JsonTypeName("webprotege.projects.MergeUploadedProject") -public record MergeUploadedProjectAction(@JsonProperty("changeRequesId") ChangeRequestId changeRequestId, +public record MergeUploadedProjectAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, @JsonProperty("projectId") ProjectId projectId, @JsonProperty("documentId") DocumentId uploadedDocumentId, @JsonProperty("commitMessage") String commitMessage) implements ProjectAction, ContentChangeRequest { From ac099c668e8c74ec1d17b8a070c2cb4f7ddf9fbf Mon Sep 17 00:00:00 2001 From: Josef Hardi Date: Mon, 18 May 2026 16:41:30 -0700 Subject: [PATCH 2/7] refactor(wire-dto): pin @JsonProperty on MISMATCH record components #52 pinned @JsonProperty on the FRAGILE bucket but skipped records whose audit pair was already classified as MISMATCH. These 12 records still have naked record components, so a Java rename would silently break the wire contract once the gwt-ui client side of #53 lands. Pinning here uses the existing JSON name (= the record component identifier) so no behavior changes today; it just locks the wire field name against future renames and makes the contract greppable. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../app/SetApplicationSettingsAction.java | 5 +++-- .../webprotege/change/RevertRevisionAction.java | 5 ++++- .../crud/SetEntityCrudKitSettingsAction.java | 8 ++++++-- .../webprotege/entity/MergeEntitiesAction.java | 13 +++++++------ .../individuals/GetIndividualsAction.java | 11 ++++++----- .../protege/webprotege/issues/AddCommentAction.java | 9 +++++---- .../issues/CreateEntityDiscussionThreadAction.java | 9 +++++---- .../webprotege/issues/DeleteCommentAction.java | 7 ++++--- .../issues/SetDiscussionThreadStatusAction.java | 9 +++++---- .../perspective/ResetPerspectivesAction.java | 5 +++-- .../project/SetProjectPrefixDeclarationsAction.java | 7 ++++--- .../webprotege/tag/UpdateEntityTagsAction.java | 11 ++++++----- 12 files changed, 58 insertions(+), 41 deletions(-) diff --git a/src/main/java/edu/stanford/protege/webprotege/app/SetApplicationSettingsAction.java b/src/main/java/edu/stanford/protege/webprotege/app/SetApplicationSettingsAction.java index 11b476e1..f5a414fb 100644 --- a/src/main/java/edu/stanford/protege/webprotege/app/SetApplicationSettingsAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/app/SetApplicationSettingsAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.app; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequest; import edu.stanford.protege.webprotege.common.ChangeRequestId; @@ -15,8 +16,8 @@ @JsonTypeName("webprotege.application.SetApplicationSettings") -public record SetApplicationSettingsAction(ChangeRequestId changeRequestId, - @Nonnull ApplicationSettings applicationSettings) implements Action, ChangeRequest { +public record SetApplicationSettingsAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("applicationSettings") @Nonnull ApplicationSettings applicationSettings) implements Action, ChangeRequest { public static final String CHANNEL = "webprotege.application.SetApplicationSettings"; diff --git a/src/main/java/edu/stanford/protege/webprotege/change/RevertRevisionAction.java b/src/main/java/edu/stanford/protege/webprotege/change/RevertRevisionAction.java index 88a7daf5..db625c0f 100644 --- a/src/main/java/edu/stanford/protege/webprotege/change/RevertRevisionAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/change/RevertRevisionAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.change; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequestId; import edu.stanford.protege.webprotege.common.ContentChangeRequest; @@ -13,7 +14,9 @@ * 19/03/15 */ @JsonTypeName("webprotege.history.RevertRevision") -public record RevertRevisionAction(ChangeRequestId changeRequestId, ProjectId projectId, RevisionNumber revisionNumber) implements ProjectAction, ContentChangeRequest { +public record RevertRevisionAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("revisionNumber") RevisionNumber revisionNumber) implements ProjectAction, ContentChangeRequest { public static final String CHANNEL = "webprotege.history.RevertRevision"; diff --git a/src/main/java/edu/stanford/protege/webprotege/crud/SetEntityCrudKitSettingsAction.java b/src/main/java/edu/stanford/protege/webprotege/crud/SetEntityCrudKitSettingsAction.java index 634c3c1e..a362bfba 100644 --- a/src/main/java/edu/stanford/protege/webprotege/crud/SetEntityCrudKitSettingsAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/crud/SetEntityCrudKitSettingsAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.crud; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequest; import edu.stanford.protege.webprotege.common.ChangeRequestId; @@ -13,8 +14,11 @@ * Date: 8/19/13 */ @JsonTypeName("webprotege.projects.SetEntityCrudKitSettings") -public record SetEntityCrudKitSettingsAction(ChangeRequestId changeRequestId, - ProjectId projectId, EntityCrudKitSettings fromSettings, EntityCrudKitSettings toSettings, IRIPrefixUpdateStrategy prefixUpdateStrategy) implements ProjectAction, ChangeRequest { +public record SetEntityCrudKitSettingsAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("fromSettings") EntityCrudKitSettings fromSettings, + @JsonProperty("toSettings") EntityCrudKitSettings toSettings, + @JsonProperty("prefixUpdateStrategy") IRIPrefixUpdateStrategy prefixUpdateStrategy) implements ProjectAction, ChangeRequest { public static final String CHANNEL = "webprotege.projects.SetEntityCrudKitSettings"; diff --git a/src/main/java/edu/stanford/protege/webprotege/entity/MergeEntitiesAction.java b/src/main/java/edu/stanford/protege/webprotege/entity/MergeEntitiesAction.java index cf473266..318b2261 100644 --- a/src/main/java/edu/stanford/protege/webprotege/entity/MergeEntitiesAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/entity/MergeEntitiesAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.entity; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import com.google.common.collect.ImmutableSet; import edu.stanford.protege.webprotege.common.ChangeRequestId; @@ -26,12 +27,12 @@ * @param treatment The treatment for the merged term that specifies whether the merged term */ @JsonTypeName("webprotege.entities.MergeEntities") -public record MergeEntitiesAction(@Nonnull ChangeRequestId changeRequestId, - @Nonnull ProjectId projectId, - @Nonnull ImmutableSet sourceEntities, - @Nonnull OWLEntity targetEntity, - @Nonnull MergedEntityTreatment treatment, - @Nonnull String commitMessage) implements ProjectAction, ContentChangeRequest { +public record MergeEntitiesAction(@JsonProperty("changeRequestId") @Nonnull ChangeRequestId changeRequestId, + @JsonProperty("projectId") @Nonnull ProjectId projectId, + @JsonProperty("sourceEntities") @Nonnull ImmutableSet sourceEntities, + @JsonProperty("targetEntity") @Nonnull OWLEntity targetEntity, + @JsonProperty("treatment") @Nonnull MergedEntityTreatment treatment, + @JsonProperty("commitMessage") @Nonnull String commitMessage) implements ProjectAction, ContentChangeRequest { public static final String CHANNEL = "webprotege.entities.MergeEntities"; diff --git a/src/main/java/edu/stanford/protege/webprotege/individuals/GetIndividualsAction.java b/src/main/java/edu/stanford/protege/webprotege/individuals/GetIndividualsAction.java index 7129eedf..996d5426 100644 --- a/src/main/java/edu/stanford/protege/webprotege/individuals/GetIndividualsAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/individuals/GetIndividualsAction.java @@ -1,6 +1,7 @@ package edu.stanford.protege.webprotege.individuals; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.PageRequest; import edu.stanford.protege.webprotege.common.ProjectId; @@ -14,11 +15,11 @@ * Date: 12/09/2013 */ @JsonTypeName("webprotege.entities.GetIndividuals") -public record GetIndividualsAction(ProjectId projectId, - OWLClass type, - PageRequest pageRequest, - String searchString, - InstanceRetrievalMode instanceRetrievalMode) implements ProjectAction { +public record GetIndividualsAction(@JsonProperty("projectId") ProjectId projectId, + @JsonProperty("type") OWLClass type, + @JsonProperty("pageRequest") PageRequest pageRequest, + @JsonProperty("searchString") String searchString, + @JsonProperty("instanceRetrievalMode") InstanceRetrievalMode instanceRetrievalMode) implements ProjectAction { public static final String CHANNEL = "webprotege.entities.GetIndividuals"; diff --git a/src/main/java/edu/stanford/protege/webprotege/issues/AddCommentAction.java b/src/main/java/edu/stanford/protege/webprotege/issues/AddCommentAction.java index 57d65dd1..d039cb57 100644 --- a/src/main/java/edu/stanford/protege/webprotege/issues/AddCommentAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/issues/AddCommentAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.issues; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequestId; import edu.stanford.protege.webprotege.common.ContentChangeRequest; @@ -13,10 +14,10 @@ * 7 Oct 2016 */ @JsonTypeName("webprotege.discussions.AddComment") -public record AddCommentAction(ChangeRequestId changeRequestId, - ProjectId projectId, - ThreadId threadId, - String comment) implements ProjectAction, HasProjectId, ContentChangeRequest { +public record AddCommentAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("threadId") ThreadId threadId, + @JsonProperty("comment") String comment) implements ProjectAction, HasProjectId, ContentChangeRequest { public static final String CHANNEL = "webprotege.discussions.AddComment"; diff --git a/src/main/java/edu/stanford/protege/webprotege/issues/CreateEntityDiscussionThreadAction.java b/src/main/java/edu/stanford/protege/webprotege/issues/CreateEntityDiscussionThreadAction.java index c65804b9..5ecd3a11 100644 --- a/src/main/java/edu/stanford/protege/webprotege/issues/CreateEntityDiscussionThreadAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/issues/CreateEntityDiscussionThreadAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.issues; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequestId; import edu.stanford.protege.webprotege.common.ContentChangeRequest; @@ -13,10 +14,10 @@ * 6 Oct 2016 */ @JsonTypeName("webprotege.discussions.CreateEntityDiscussionThread") -public record CreateEntityDiscussionThreadAction(ChangeRequestId changeRequestId, - ProjectId projectId, - OWLEntity entity, - String comment) implements ProjectAction, ContentChangeRequest { +public record CreateEntityDiscussionThreadAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("entity") OWLEntity entity, + @JsonProperty("comment") String comment) implements ProjectAction, ContentChangeRequest { public static final String CHANNEL = "webprotege.discussions.CreateEntityDiscussionThread"; diff --git a/src/main/java/edu/stanford/protege/webprotege/issues/DeleteCommentAction.java b/src/main/java/edu/stanford/protege/webprotege/issues/DeleteCommentAction.java index 8b02a34d..43a1efc4 100644 --- a/src/main/java/edu/stanford/protege/webprotege/issues/DeleteCommentAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/issues/DeleteCommentAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.issues; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequestId; import edu.stanford.protege.webprotege.common.ContentChangeRequest; @@ -12,9 +13,9 @@ * 9 Oct 2016 */ @JsonTypeName("webprotege.discussions.DeleteComment") -public record DeleteCommentAction(ChangeRequestId changeRequestId, - ProjectId projectId, - CommentId commentId) implements ProjectAction, ContentChangeRequest { +public record DeleteCommentAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("commentId") CommentId commentId) implements ProjectAction, ContentChangeRequest { public static final String CHANNEL = "webprotege.discussions.DeleteComment"; diff --git a/src/main/java/edu/stanford/protege/webprotege/issues/SetDiscussionThreadStatusAction.java b/src/main/java/edu/stanford/protege/webprotege/issues/SetDiscussionThreadStatusAction.java index ec49822d..9e1a17da 100644 --- a/src/main/java/edu/stanford/protege/webprotege/issues/SetDiscussionThreadStatusAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/issues/SetDiscussionThreadStatusAction.java @@ -1,6 +1,7 @@ package edu.stanford.protege.webprotege.issues; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequestId; import edu.stanford.protege.webprotege.common.ContentChangeRequest; @@ -15,10 +16,10 @@ * 12 Oct 2016 */ @JsonTypeName("webprotege.discussions.SetDiscussionThreadStatus") -public record SetDiscussionThreadStatusAction(ChangeRequestId changeRequestId, - @Nonnull ProjectId projectId, - @Nonnull ThreadId threadId, - @Nonnull Status status) implements ProjectAction, ContentChangeRequest { +public record SetDiscussionThreadStatusAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("projectId") @Nonnull ProjectId projectId, + @JsonProperty("threadId") @Nonnull ThreadId threadId, + @JsonProperty("status") @Nonnull Status status) implements ProjectAction, ContentChangeRequest { public static final String CHANNEL = "webprotege.discussions.SetDiscussionThreadStatus"; diff --git a/src/main/java/edu/stanford/protege/webprotege/perspective/ResetPerspectivesAction.java b/src/main/java/edu/stanford/protege/webprotege/perspective/ResetPerspectivesAction.java index 39df9ca8..426d44c3 100644 --- a/src/main/java/edu/stanford/protege/webprotege/perspective/ResetPerspectivesAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/perspective/ResetPerspectivesAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.perspective; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequest; import edu.stanford.protege.webprotege.common.ChangeRequestId; @@ -14,8 +15,8 @@ @JsonTypeName("webprotege.perspectives.ResetPerspectives") -public record ResetPerspectivesAction(ChangeRequestId changeRequestId, - ProjectId projectId) implements ProjectAction, ChangeRequest { +public record ResetPerspectivesAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("projectId") ProjectId projectId) implements ProjectAction, ChangeRequest { public static final String CHANNEL = "webprotege.perspectives.ResetPerspectives"; diff --git a/src/main/java/edu/stanford/protege/webprotege/project/SetProjectPrefixDeclarationsAction.java b/src/main/java/edu/stanford/protege/webprotege/project/SetProjectPrefixDeclarationsAction.java index bad36834..3ac2f3f8 100644 --- a/src/main/java/edu/stanford/protege/webprotege/project/SetProjectPrefixDeclarationsAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/project/SetProjectPrefixDeclarationsAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.project; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequest; import edu.stanford.protege.webprotege.common.ChangeRequestId; @@ -17,9 +18,9 @@ * 1 Mar 2018 */ @JsonTypeName("webprotege.projects.SetProjectPrefixDeclarations") -public record SetProjectPrefixDeclarationsAction(@Nonnull ChangeRequestId changeRequestId, - @Nonnull ProjectId projectId, - @Nonnull List prefixDeclarations) implements ProjectAction, ChangeRequest { +public record SetProjectPrefixDeclarationsAction(@JsonProperty("changeRequestId") @Nonnull ChangeRequestId changeRequestId, + @JsonProperty("projectId") @Nonnull ProjectId projectId, + @JsonProperty("prefixDeclarations") @Nonnull List prefixDeclarations) implements ProjectAction, ChangeRequest { public static final String CHANNEL = "webprotege.projects.SetProjectPrefixDeclarations"; diff --git a/src/main/java/edu/stanford/protege/webprotege/tag/UpdateEntityTagsAction.java b/src/main/java/edu/stanford/protege/webprotege/tag/UpdateEntityTagsAction.java index 5b043529..72677a4b 100644 --- a/src/main/java/edu/stanford/protege/webprotege/tag/UpdateEntityTagsAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/tag/UpdateEntityTagsAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.tag; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequest; import edu.stanford.protege.webprotege.common.ChangeRequestId; @@ -18,11 +19,11 @@ * 21 Mar 2018 */ @JsonTypeName("webprotege.tags.UpdateEntityTags") -public record UpdateEntityTagsAction(@Nonnull ChangeRequestId changeRequestId, - @Nonnull ProjectId projectId, - @Nonnull OWLEntity entity, - @Nonnull Set fromTagIds, - @Nonnull Set toTagIds) implements ProjectAction, ChangeRequest { +public record UpdateEntityTagsAction(@JsonProperty("changeRequestId") @Nonnull ChangeRequestId changeRequestId, + @JsonProperty("projectId") @Nonnull ProjectId projectId, + @JsonProperty("entity") @Nonnull OWLEntity entity, + @JsonProperty("fromTagIds") @Nonnull Set fromTagIds, + @JsonProperty("toTagIds") @Nonnull Set toTagIds) implements ProjectAction, ChangeRequest { public static final String CHANNEL = "webprotege.tags.UpdateEntityTags"; From e538e6fef0e570a40b645e0f58c381db3f796ae9 Mon Sep 17 00:00:00 2001 From: Josef Hardi Date: Mon, 18 May 2026 16:43:13 -0700 Subject: [PATCH 3/7] refactor(wire-dto): pin @JsonProperty on MISMATCH event record components #52 pinned @JsonProperty on the FRAGILE bucket but skipped events whose audit pair was already classified as MISMATCH. These 9 ProjectEvent records still have naked components, so a Java rename of `eventId`/`projectId` would silently break the wire contract once the gwt-ui client side of #53 lands. Pinning uses the existing component name as the JSON name (no behavior change today); it just locks the wire field name against future renames and makes the contract greppable alongside the rest of the events from the FRAGILE pin. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../event/EntityDeprecationStatusChangedEvent.java | 9 +++++---- .../webprotege/event/LargeNumberOfChangesEvent.java | 5 +++-- .../protege/webprotege/event/ProjectChangedEvent.java | 7 +++++-- .../protege/webprotege/issues/CommentUpdatedEvent.java | 9 +++++---- .../webprotege/permissions/PermissionsChangedEvent.java | 5 +++-- .../protege/webprotege/tag/EntityTagsChangedEvent.java | 9 +++++---- .../protege/webprotege/tag/ProjectTagsChangedEvent.java | 7 ++++--- .../protege/webprotege/watches/WatchAddedEvent.java | 7 ++++--- .../protege/webprotege/watches/WatchRemovedEvent.java | 7 ++++--- 9 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/main/java/edu/stanford/protege/webprotege/event/EntityDeprecationStatusChangedEvent.java b/src/main/java/edu/stanford/protege/webprotege/event/EntityDeprecationStatusChangedEvent.java index 495ed81d..0c3abd10 100644 --- a/src/main/java/edu/stanford/protege/webprotege/event/EntityDeprecationStatusChangedEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/event/EntityDeprecationStatusChangedEvent.java @@ -1,6 +1,7 @@ package edu.stanford.protege.webprotege.event; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.EventId; import edu.stanford.protege.webprotege.common.ProjectEvent; @@ -14,10 +15,10 @@ * Date: 21/03/2013 */ @JsonTypeName("webprotege.events.entities.EntityDeprecationStatusChanged") -public record EntityDeprecationStatusChangedEvent(EventId eventId, - ProjectId projectId, - OWLEntity entity, - boolean deprecated) implements ProjectEvent { +public record EntityDeprecationStatusChangedEvent(@JsonProperty("eventId") EventId eventId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("entity") OWLEntity entity, + @JsonProperty("deprecated") boolean deprecated) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.entities.EntityDeprecationStatusChanged"; diff --git a/src/main/java/edu/stanford/protege/webprotege/event/LargeNumberOfChangesEvent.java b/src/main/java/edu/stanford/protege/webprotege/event/LargeNumberOfChangesEvent.java index c02b4099..c1633764 100644 --- a/src/main/java/edu/stanford/protege/webprotege/event/LargeNumberOfChangesEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/event/LargeNumberOfChangesEvent.java @@ -1,6 +1,7 @@ package edu.stanford.protege.webprotege.event; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.EventId; import edu.stanford.protege.webprotege.common.ProjectEvent; @@ -12,8 +13,8 @@ * 2020-11-04 */ @JsonTypeName("webprotege.events.projects.LargeNumberOfChanges") -public record LargeNumberOfChangesEvent(EventId eventId, - ProjectId projectId) implements ProjectEvent { +public record LargeNumberOfChangesEvent(@JsonProperty("eventId") EventId eventId, + @JsonProperty("projectId") ProjectId projectId) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.projects.LargeNumberOfChanges"; diff --git a/src/main/java/edu/stanford/protege/webprotege/event/ProjectChangedEvent.java b/src/main/java/edu/stanford/protege/webprotege/event/ProjectChangedEvent.java index 06cd1dbb..6a947ca8 100644 --- a/src/main/java/edu/stanford/protege/webprotege/event/ProjectChangedEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/event/ProjectChangedEvent.java @@ -1,6 +1,7 @@ package edu.stanford.protege.webprotege.event; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.EventId; import edu.stanford.protege.webprotege.common.ProjectEvent; @@ -23,8 +24,10 @@ * @throws NullPointerException if any parameters are {@code null}. */ @JsonTypeName("webprotege.events.project.ProjectChanged") -public record ProjectChangedEvent(EventId eventId, - ProjectId projectId, RevisionSummary revisionSummary, Set subjects) implements ProjectEvent { +public record ProjectChangedEvent(@JsonProperty("eventId") EventId eventId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("revisionSummary") RevisionSummary revisionSummary, + @JsonProperty("subjects") Set subjects) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.project.ProjectChanged"; diff --git a/src/main/java/edu/stanford/protege/webprotege/issues/CommentUpdatedEvent.java b/src/main/java/edu/stanford/protege/webprotege/issues/CommentUpdatedEvent.java index e77f1419..e0ffcf95 100644 --- a/src/main/java/edu/stanford/protege/webprotege/issues/CommentUpdatedEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/issues/CommentUpdatedEvent.java @@ -1,6 +1,7 @@ package edu.stanford.protege.webprotege.issues; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.EventId; import edu.stanford.protege.webprotege.common.ProjectEvent; @@ -14,10 +15,10 @@ * 11 Oct 2016 */ @JsonTypeName("webprotege.events.discussions.CommentUpdated") -public record CommentUpdatedEvent(@Nonnull EventId eventId, - @Nonnull ProjectId projectId, - @Nonnull ThreadId threadId, - @Nonnull Comment comment) implements ProjectEvent { +public record CommentUpdatedEvent(@JsonProperty("eventId") @Nonnull EventId eventId, + @JsonProperty("projectId") @Nonnull ProjectId projectId, + @JsonProperty("threadId") @Nonnull ThreadId threadId, + @JsonProperty("comment") @Nonnull Comment comment) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.discussions.CommentUpdated"; diff --git a/src/main/java/edu/stanford/protege/webprotege/permissions/PermissionsChangedEvent.java b/src/main/java/edu/stanford/protege/webprotege/permissions/PermissionsChangedEvent.java index 76645bac..b455851e 100644 --- a/src/main/java/edu/stanford/protege/webprotege/permissions/PermissionsChangedEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/permissions/PermissionsChangedEvent.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.permissions; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.EventId; import edu.stanford.protege.webprotege.common.ProjectEvent; @@ -16,8 +17,8 @@ * An event that is fired when the permissions for a project change. */ @JsonTypeName("webprotege.events.projects.PermissionsChanged") -public record PermissionsChangedEvent(EventId eventId, - ProjectId projectId) implements ProjectEvent { +public record PermissionsChangedEvent(@JsonProperty("eventId") EventId eventId, + @JsonProperty("projectId") ProjectId projectId) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.projects.PermissionsChanged"; diff --git a/src/main/java/edu/stanford/protege/webprotege/tag/EntityTagsChangedEvent.java b/src/main/java/edu/stanford/protege/webprotege/tag/EntityTagsChangedEvent.java index 5a764ef5..353537b6 100644 --- a/src/main/java/edu/stanford/protege/webprotege/tag/EntityTagsChangedEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/tag/EntityTagsChangedEvent.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.tag; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.EventId; import edu.stanford.protege.webprotege.common.ProjectEvent; @@ -18,10 +19,10 @@ * 22 Mar 2018 */ @JsonTypeName("webprotege.events.tags.EntityTagsChanged") -public record EntityTagsChangedEvent(@Nonnull EventId eventId, - @Nonnull ProjectId projectId, - @Nonnull OWLEntity entity, - @Nonnull Collection tags) implements ProjectEvent { +public record EntityTagsChangedEvent(@JsonProperty("eventId") @Nonnull EventId eventId, + @JsonProperty("projectId") @Nonnull ProjectId projectId, + @JsonProperty("entity") @Nonnull OWLEntity entity, + @JsonProperty("tags") @Nonnull Collection tags) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.tags.EntityTagsChanged"; diff --git a/src/main/java/edu/stanford/protege/webprotege/tag/ProjectTagsChangedEvent.java b/src/main/java/edu/stanford/protege/webprotege/tag/ProjectTagsChangedEvent.java index 05d5a22a..1d5b72c0 100644 --- a/src/main/java/edu/stanford/protege/webprotege/tag/ProjectTagsChangedEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/tag/ProjectTagsChangedEvent.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.tag; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.EventId; import edu.stanford.protege.webprotege.common.ProjectEvent; @@ -14,9 +15,9 @@ * 26 Mar 2018 */ @JsonTypeName("webprotege.events.tags.ProjectTagsChanged") -public record ProjectTagsChangedEvent(@Nonnull EventId eventId, - @Nonnull ProjectId projectId, - @Nonnull Collection projectTags) implements ProjectEvent { +public record ProjectTagsChangedEvent(@JsonProperty("eventId") @Nonnull EventId eventId, + @JsonProperty("projectId") @Nonnull ProjectId projectId, + @JsonProperty("projectTags") @Nonnull Collection projectTags) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.tags.ProjectTagsChanged"; diff --git a/src/main/java/edu/stanford/protege/webprotege/watches/WatchAddedEvent.java b/src/main/java/edu/stanford/protege/webprotege/watches/WatchAddedEvent.java index cb7ca169..35e283d7 100644 --- a/src/main/java/edu/stanford/protege/webprotege/watches/WatchAddedEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/watches/WatchAddedEvent.java @@ -1,6 +1,7 @@ package edu.stanford.protege.webprotege.watches; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.EventId; import edu.stanford.protege.webprotege.common.ProjectEvent; @@ -13,9 +14,9 @@ * Date: 21/03/2013 */ @JsonTypeName("webprotege.events.watches.WatchAdded") -public record WatchAddedEvent(EventId eventId, - ProjectId projectId, - Watch watch) implements ProjectEvent { +public record WatchAddedEvent(@JsonProperty("eventId") EventId eventId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("watch") Watch watch) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.watches.WatchAdded"; diff --git a/src/main/java/edu/stanford/protege/webprotege/watches/WatchRemovedEvent.java b/src/main/java/edu/stanford/protege/webprotege/watches/WatchRemovedEvent.java index ab0e65c4..43bef2a3 100644 --- a/src/main/java/edu/stanford/protege/webprotege/watches/WatchRemovedEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/watches/WatchRemovedEvent.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.watches; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.EventId; import edu.stanford.protege.webprotege.common.ProjectEvent; @@ -12,9 +13,9 @@ * Date: 21/03/2013 */ @JsonTypeName("webprotege.events.watches.WatchRemoved") -public record WatchRemovedEvent(EventId eventId, - ProjectId projectId, - Watch watch) implements ProjectEvent { +public record WatchRemovedEvent(@JsonProperty("eventId") EventId eventId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("watch") Watch watch) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.watches.WatchRemoved"; From f9d9d7bb514a6f32a771af1090d0bb603b62cd2d Mon Sep 17 00:00:00 2001 From: Josef Hardi Date: Mon, 18 May 2026 16:45:08 -0700 Subject: [PATCH 4/7] refactor(wire-dto): pin @JsonProperty on MISMATCH structural records Sub-pattern 3 of #53: per-class structural mismatches. Pinning the JSON name of the backend record components so the wire contract is locked once the gwt-ui client side of #53 renames/restructures to match. The chosen JSON names follow the backend canonical (per the issue body, "pick the canonical name (usually backend)"): - GetEntityUsageAction: subject, projectId, usageFilter, pageRequest - GetProjectEntityGraphDefaultEdgeCriteriaResult: edgeCriteria - GetHierarchySiblingsResult: siblingsPage - GetHeadRevisionNumberResult: projectId, revisionNumber - GetRevisionSummariesAction: projectId, pageRequest - GetRootOntologyIdResult: projectId, rootOntologyId - CreateNewProjectAction: newProjectId, newProjectSettings - GetProjectSharingSettingsResult: settings - SetProjectSettingsAction: changeRequestId, projectId, settings - SetProjectSettingsResult: settings No JSON name changes today; the client PR coordinates the structural fix. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../webprotege/hierarchy/GetHierarchySiblingsResult.java | 3 ++- .../webprotege/ontology/GetRootOntologyIdResult.java | 5 +++-- .../protege/webprotege/project/CreateNewProjectAction.java | 4 ++-- .../projectsettings/SetProjectSettingsAction.java | 7 ++++--- .../projectsettings/SetProjectSettingsResult.java | 3 ++- .../webprotege/revision/GetHeadRevisionNumberResult.java | 5 +++-- .../webprotege/revision/GetRevisionSummariesAction.java | 4 ++-- .../sharing/GetProjectSharingSettingsResult.java | 3 ++- .../protege/webprotege/usage/GetEntityUsageAction.java | 7 ++++++- .../GetProjectEntityGraphDefaultEdgeCriteriaResult.java | 3 ++- 10 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/main/java/edu/stanford/protege/webprotege/hierarchy/GetHierarchySiblingsResult.java b/src/main/java/edu/stanford/protege/webprotege/hierarchy/GetHierarchySiblingsResult.java index 371eb461..1acba218 100644 --- a/src/main/java/edu/stanford/protege/webprotege/hierarchy/GetHierarchySiblingsResult.java +++ b/src/main/java/edu/stanford/protege/webprotege/hierarchy/GetHierarchySiblingsResult.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.hierarchy; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.Page; import edu.stanford.protege.webprotege.dispatch.Result; @@ -13,6 +14,6 @@ @JsonTypeName("webprotege.hierarchies.GetHierarchySiblings") -public record GetHierarchySiblingsResult(Page> siblingsPage) implements Result { +public record GetHierarchySiblingsResult(@JsonProperty("siblingsPage") Page> siblingsPage) implements Result { } diff --git a/src/main/java/edu/stanford/protege/webprotege/ontology/GetRootOntologyIdResult.java b/src/main/java/edu/stanford/protege/webprotege/ontology/GetRootOntologyIdResult.java index 08648ddc..0a869bb2 100644 --- a/src/main/java/edu/stanford/protege/webprotege/ontology/GetRootOntologyIdResult.java +++ b/src/main/java/edu/stanford/protege/webprotege/ontology/GetRootOntologyIdResult.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.ontology; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ProjectId; import edu.stanford.protege.webprotege.dispatch.Result; @@ -14,7 +15,7 @@ @JsonTypeName("webprotege.ontologies.GetRootOntologyId") -public record GetRootOntologyIdResult(ProjectId projectId, - OWLOntologyID rootOntologyId) implements Result { +public record GetRootOntologyIdResult(@JsonProperty("projectId") ProjectId projectId, + @JsonProperty("rootOntologyId") OWLOntologyID rootOntologyId) implements Result { } diff --git a/src/main/java/edu/stanford/protege/webprotege/project/CreateNewProjectAction.java b/src/main/java/edu/stanford/protege/webprotege/project/CreateNewProjectAction.java index 61acef7e..78f01847 100644 --- a/src/main/java/edu/stanford/protege/webprotege/project/CreateNewProjectAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/project/CreateNewProjectAction.java @@ -15,8 +15,8 @@ * 21/02/15 */ @JsonTypeName("webprotege.projects.CreateNewProject") -public record CreateNewProjectAction(ProjectId newProjectId, - NewProjectSettings newProjectSettings) implements Action, Request { +public record CreateNewProjectAction(@JsonProperty("newProjectId") ProjectId newProjectId, + @JsonProperty("newProjectSettings") NewProjectSettings newProjectSettings) implements Action, Request { public static final String CHANNEL = "webprotege.projects.CreateNewProject"; diff --git a/src/main/java/edu/stanford/protege/webprotege/projectsettings/SetProjectSettingsAction.java b/src/main/java/edu/stanford/protege/webprotege/projectsettings/SetProjectSettingsAction.java index 9a858f3b..6845c42d 100644 --- a/src/main/java/edu/stanford/protege/webprotege/projectsettings/SetProjectSettingsAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/projectsettings/SetProjectSettingsAction.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.projectsettings; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ChangeRequest; import edu.stanford.protege.webprotege.common.ChangeRequestId; @@ -14,9 +15,9 @@ * 25/11/14 */ @JsonTypeName("webprotege.projects.SetProjectSettings") -public record SetProjectSettingsAction(ChangeRequestId changeRequestId, - ProjectId projectId, - ProjectSettings settings) implements ProjectAction, ChangeRequest { +public record SetProjectSettingsAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("settings") ProjectSettings settings) implements ProjectAction, ChangeRequest { public static final String CHANNEL = "webprotege.projects.SetProjectSettings"; diff --git a/src/main/java/edu/stanford/protege/webprotege/projectsettings/SetProjectSettingsResult.java b/src/main/java/edu/stanford/protege/webprotege/projectsettings/SetProjectSettingsResult.java index 6c6af030..b7154d39 100644 --- a/src/main/java/edu/stanford/protege/webprotege/projectsettings/SetProjectSettingsResult.java +++ b/src/main/java/edu/stanford/protege/webprotege/projectsettings/SetProjectSettingsResult.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.projectsettings; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.dispatch.Result; @@ -11,7 +12,7 @@ * 25/11/14 */ @JsonTypeName("webprotege.projects.SetProjectSettings") -public record SetProjectSettingsResult(ProjectSettings settings) implements Result { +public record SetProjectSettingsResult(@JsonProperty("settings") ProjectSettings settings) implements Result { public SetProjectSettingsResult(ProjectSettings settings) { this.settings = checkNotNull(settings); diff --git a/src/main/java/edu/stanford/protege/webprotege/revision/GetHeadRevisionNumberResult.java b/src/main/java/edu/stanford/protege/webprotege/revision/GetHeadRevisionNumberResult.java index 66092f76..4bd68cc1 100644 --- a/src/main/java/edu/stanford/protege/webprotege/revision/GetHeadRevisionNumberResult.java +++ b/src/main/java/edu/stanford/protege/webprotege/revision/GetHeadRevisionNumberResult.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.revision; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.ProjectId; import edu.stanford.protege.webprotege.dispatch.Result; @@ -12,8 +13,8 @@ * 21/02/15 */ @JsonTypeName("webprotege.history.GetHeadRevisionNumber") -public record GetHeadRevisionNumberResult(ProjectId projectId, - RevisionNumber revisionNumber) implements Result { +public record GetHeadRevisionNumberResult(@JsonProperty("projectId") ProjectId projectId, + @JsonProperty("revisionNumber") RevisionNumber revisionNumber) implements Result { public GetHeadRevisionNumberResult(ProjectId projectId, RevisionNumber revisionNumber) { this.projectId = checkNotNull(projectId); diff --git a/src/main/java/edu/stanford/protege/webprotege/revision/GetRevisionSummariesAction.java b/src/main/java/edu/stanford/protege/webprotege/revision/GetRevisionSummariesAction.java index 5d21b9da..d1dcf2dc 100644 --- a/src/main/java/edu/stanford/protege/webprotege/revision/GetRevisionSummariesAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/revision/GetRevisionSummariesAction.java @@ -16,8 +16,8 @@ * 21/02/15 */ @JsonTypeName("webprotege.history.GetRevisionSummaries") -public record GetRevisionSummariesAction(@JsonProperty(required = true) ProjectId projectId, - PageRequest pageRequest) implements ProjectAction { +public record GetRevisionSummariesAction(@JsonProperty(value = "projectId", required = true) ProjectId projectId, + @JsonProperty("pageRequest") PageRequest pageRequest) implements ProjectAction { public static final String CHANNEL = "webprotege.history.GetRevisionSummaries"; diff --git a/src/main/java/edu/stanford/protege/webprotege/sharing/GetProjectSharingSettingsResult.java b/src/main/java/edu/stanford/protege/webprotege/sharing/GetProjectSharingSettingsResult.java index 59efc7ce..c5108b56 100644 --- a/src/main/java/edu/stanford/protege/webprotege/sharing/GetProjectSharingSettingsResult.java +++ b/src/main/java/edu/stanford/protege/webprotege/sharing/GetProjectSharingSettingsResult.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.sharing; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.dispatch.Result; @@ -11,7 +12,7 @@ * 07/02/15 */ @JsonTypeName("webprotege.projects.GetProjectSharingSettings") -public record GetProjectSharingSettingsResult(ProjectSharingSettings settings) implements Result { +public record GetProjectSharingSettingsResult(@JsonProperty("settings") ProjectSharingSettings settings) implements Result { public GetProjectSharingSettingsResult(ProjectSharingSettings settings) { this.settings = checkNotNull(settings); diff --git a/src/main/java/edu/stanford/protege/webprotege/usage/GetEntityUsageAction.java b/src/main/java/edu/stanford/protege/webprotege/usage/GetEntityUsageAction.java index 9ee05608..03d2eee0 100644 --- a/src/main/java/edu/stanford/protege/webprotege/usage/GetEntityUsageAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/usage/GetEntityUsageAction.java @@ -1,6 +1,7 @@ package edu.stanford.protege.webprotege.usage; import com.fasterxml.jackson.annotation.JsonClassDescription; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyDescription; import com.fasterxml.jackson.annotation.JsonTypeName; import edu.stanford.protege.webprotege.common.PageRequest; @@ -22,12 +23,16 @@ @JsonTypeName("webprotege.entities.GetEntityUsage") @JsonClassDescription("Requests the entity usage for the specified entity. The usage is the set of OWL axioms that mention the entity in their signature.") -public record GetEntityUsageAction(@JsonPropertyDescription("The entity whose usage will be returned") +public record GetEntityUsageAction(@JsonProperty("subject") + @JsonPropertyDescription("The entity whose usage will be returned") OWLEntity subject, + @JsonProperty("projectId") @JsonPropertyDescription("The project id in which the entity is used") ProjectId projectId, + @JsonProperty("usageFilter") @JsonPropertyDescription("The usage filter that specifies they types of axioms to be retrieved etc.") @Nullable UsageFilter usageFilter, + @JsonProperty("pageRequest") @Nonnull PageRequest pageRequest) implements ProjectAction { diff --git a/src/main/java/edu/stanford/protege/webprotege/viz/GetProjectEntityGraphDefaultEdgeCriteriaResult.java b/src/main/java/edu/stanford/protege/webprotege/viz/GetProjectEntityGraphDefaultEdgeCriteriaResult.java index d18fb893..703c021b 100644 --- a/src/main/java/edu/stanford/protege/webprotege/viz/GetProjectEntityGraphDefaultEdgeCriteriaResult.java +++ b/src/main/java/edu/stanford/protege/webprotege/viz/GetProjectEntityGraphDefaultEdgeCriteriaResult.java @@ -1,5 +1,6 @@ package edu.stanford.protege.webprotege.viz; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import com.google.common.collect.ImmutableList; import edu.stanford.protege.webprotege.dispatch.Result; @@ -10,6 +11,6 @@ * 2019-12-07 */ @JsonTypeName("webprotege.graphs.GetProjectEntityGraphDefaultEdgeCriteria") -public record GetProjectEntityGraphDefaultEdgeCriteriaResult(ImmutableList edgeCriteria) implements Result { +public record GetProjectEntityGraphDefaultEdgeCriteriaResult(@JsonProperty("edgeCriteria") ImmutableList edgeCriteria) implements Result { } From f9b4b1df3d5ff752e4cea766bbd33bbca1fa3ff6 Mon Sep 17 00:00:00 2001 From: Josef Hardi Date: Mon, 18 May 2026 17:02:27 -0700 Subject: [PATCH 5/7] refactor(wire-dto): pin @JsonProperty on remaining FRAGILE record components Two backend records (SetAnnotationValueAction, AddProjectTagAction) had at least one naked record component the FRAGILE pin in #52 missed, surfaced by the conformance re-audit run as part of #53. Pinning each record component with @JsonProperty using the existing JSON field name (no behavior change). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../webprotege/bulkop/SetAnnotationValueAction.java | 2 +- .../protege/webprotege/tag/AddProjectTagAction.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/edu/stanford/protege/webprotege/bulkop/SetAnnotationValueAction.java b/src/main/java/edu/stanford/protege/webprotege/bulkop/SetAnnotationValueAction.java index 4c277049..66d34fda 100644 --- a/src/main/java/edu/stanford/protege/webprotege/bulkop/SetAnnotationValueAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/bulkop/SetAnnotationValueAction.java @@ -21,7 +21,7 @@ @JsonTypeName("webprotege.bulkop.SetAnnotationValue") -public record SetAnnotationValueAction(ChangeRequestId changeRequestId, +public record SetAnnotationValueAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, @JsonProperty("projectId") @Nonnull ProjectId projectId, @JsonProperty("entities") @Nonnull ImmutableSet entities, @JsonProperty("property") @Nonnull OWLAnnotationProperty property, diff --git a/src/main/java/edu/stanford/protege/webprotege/tag/AddProjectTagAction.java b/src/main/java/edu/stanford/protege/webprotege/tag/AddProjectTagAction.java index 906b877e..49a38216 100644 --- a/src/main/java/edu/stanford/protege/webprotege/tag/AddProjectTagAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/tag/AddProjectTagAction.java @@ -19,12 +19,12 @@ * 18 Mar 2018 */ @JsonTypeName("webprotege.tags.AddProjectTag") -public record AddProjectTagAction(ChangeRequestId changeRequestId, - ProjectId projectId, - String label, - String description, - Color color, - Color backgroundColor) implements ProjectAction, ChangeRequest { +public record AddProjectTagAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("label") String label, + @JsonProperty("description") String description, + @JsonProperty("color") Color color, + @JsonProperty("backgroundColor") Color backgroundColor) implements ProjectAction, ChangeRequest { public static final String CHANNEL = "webprotege.tags.AddProjectTag"; From 99b2439e68b5033b9075cdeb298df1af060fcf55 Mon Sep 17 00:00:00 2001 From: Josef Hardi Date: Mon, 18 May 2026 17:16:37 -0700 Subject: [PATCH 6/7] refactor(wire-dto): pin @JsonProperty on DisplayNameSettingsChangedEvent The record components were naked (only the static factory had @JsonProperty); the conformance audit re-run during #53 flagged it as FRAGILE. Pinning the record components matches the rest of the events that #52 already covered. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../webprotege/lang/DisplayNameSettingsChangedEvent.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/stanford/protege/webprotege/lang/DisplayNameSettingsChangedEvent.java b/src/main/java/edu/stanford/protege/webprotege/lang/DisplayNameSettingsChangedEvent.java index b8dd6264..555f5dff 100644 --- a/src/main/java/edu/stanford/protege/webprotege/lang/DisplayNameSettingsChangedEvent.java +++ b/src/main/java/edu/stanford/protege/webprotege/lang/DisplayNameSettingsChangedEvent.java @@ -15,9 +15,9 @@ * 29 Jul 2018 */ @JsonTypeName("webprotege.events.projects.DisplayNameSettingsChanged") -public record DisplayNameSettingsChangedEvent(EventId eventId, - ProjectId projectId, - DisplayNameSettings displayNameSettings) implements ProjectEvent { +public record DisplayNameSettingsChangedEvent(@JsonProperty("eventId") EventId eventId, + @JsonProperty("projectId") ProjectId projectId, + @JsonProperty("displayNameSettings") DisplayNameSettings displayNameSettings) implements ProjectEvent { public static final String CHANNEL = "webprotege.events.projects.DisplayNameSettingsChanged"; From ca5783b406db39dac8457b4e02cbdd198dbdd262 Mon Sep 17 00:00:00 2001 From: Josef Hardi Date: Fri, 26 Jun 2026 15:40:42 -0700 Subject: [PATCH 7/7] fix(wire-dto): give ExistingOntologyMergeAdd its own @JsonTypeName MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ExistingOntologyMergeAddAction/Result shared @JsonTypeName (and CHANNEL) "webprotege.ontologies.MergeOntologies" with MergeOntologiesAction — an ambiguous polymorphic-subtype collision. Retag the existing-merge pair to "webprotege.ontologies.ExistingOntologyMergeAdd" so each merge operation has a distinct wire identity; MergeOntologiesAction keeps "webprotege.ontologies.MergeOntologies". Co-Authored-By: Claude Opus 4.8 (1M context) --- .../webprotege/merge_add/ExistingOntologyMergeAddAction.java | 4 ++-- .../webprotege/merge_add/ExistingOntologyMergeAddResult.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/stanford/protege/webprotege/merge_add/ExistingOntologyMergeAddAction.java b/src/main/java/edu/stanford/protege/webprotege/merge_add/ExistingOntologyMergeAddAction.java index d9c6e705..9621f7ab 100644 --- a/src/main/java/edu/stanford/protege/webprotege/merge_add/ExistingOntologyMergeAddAction.java +++ b/src/main/java/edu/stanford/protege/webprotege/merge_add/ExistingOntologyMergeAddAction.java @@ -13,14 +13,14 @@ -@JsonTypeName("webprotege.ontologies.MergeOntologies") +@JsonTypeName("webprotege.ontologies.ExistingOntologyMergeAdd") public record ExistingOntologyMergeAddAction(@JsonProperty("changeRequestId") ChangeRequestId changeRequestId, @JsonProperty("projectId") ProjectId projectId, @JsonProperty("documentId") DocumentId documentId, @JsonProperty("selectedOntologies") List selectedOntologies, @JsonProperty("targetOntology") OWLOntologyID targetOntology) implements ProjectAction, ContentChangeRequest { - public static final String CHANNEL = "webprotege.ontologies.MergeOntologies"; + public static final String CHANNEL = "webprotege.ontologies.ExistingOntologyMergeAdd"; @Override public String getChannel() { diff --git a/src/main/java/edu/stanford/protege/webprotege/merge_add/ExistingOntologyMergeAddResult.java b/src/main/java/edu/stanford/protege/webprotege/merge_add/ExistingOntologyMergeAddResult.java index c59a0da3..a5a93fde 100644 --- a/src/main/java/edu/stanford/protege/webprotege/merge_add/ExistingOntologyMergeAddResult.java +++ b/src/main/java/edu/stanford/protege/webprotege/merge_add/ExistingOntologyMergeAddResult.java @@ -5,7 +5,7 @@ -@JsonTypeName("webprotege.ontologies.MergeOntologies") +@JsonTypeName("webprotege.ontologies.ExistingOntologyMergeAdd") public record ExistingOntologyMergeAddResult() implements Result { }