Conversation
modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/NodeStoreVersion.java
Outdated
Show resolved
Hide resolved
modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/NodeStoreVersion.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Pull request overview
Adds a new getVersions API (with cursor-based pagination) for nodes and content, and refactors internal version representations to separate stored node data from version metadata.
Changes:
- Introduces cursor-based pagination for node versions (
GetNodeVersionsCommand,VersionCursorHelper,GetNodeVersionsResult/Params). - Adds Content API
getVersions(TypeScript + Java handler/mapper + example/test) built on node version retrieval. - Replaces
NodeVersionMetadata/NodeVersionMetadatasusages withNodeVersion/NodeVersionsand introducesNodeStoreVersionfor storage-layer node blobs.
Reviewed changes
Copilot reviewed 98 out of 99 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/GetActiveVersionHandlerTest.java | Updates tests to new NodeVersion type |
| modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/FindVersionsHandlerTest.java | Aligns lib-node test to getVersions/cursor |
| modules/lib/lib-node/src/main/resources/lib/xp/node.ts | Updates findVersions params to cursor paging |
| modules/lib/lib-node/src/main/resources/lib/xp/examples/node/findVersions.js | Updates example to new paging params |
| modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/NodeVersionsQueryResultMapper.java | Maps GetNodeVersionsResult + cursor |
| modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/NodeVersionMapper.java | Mapper now consumes NodeVersion |
| modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/NodeHandler.java | Switches handler to cursor-based params |
| modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/GetActiveVersionHandler.java | Uses NodeVersion for active versions |
| modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/FindVersionsHandlerParams.java | Replaces start paging with cursor |
| modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/FindVersionsHandler.java | Uses nodeService.getVersions + cursor |
| modules/lib/lib-content/src/test/java/com/enonic/xp/lib/content/GetVersionsHandlerTest.java | Adds lib-content script-based test for getVersions |
| modules/lib/lib-content/src/main/resources/lib/xp/examples/content/getVersions.js | Adds content.getVersions example |
| modules/lib/lib-content/src/main/resources/lib/xp/content.ts | Adds getVersions TS API + types |
| modules/lib/lib-content/src/main/java/com/enonic/xp/lib/content/mapper/ContentVersionsMapper.java | Maps GetContentVersionsResult to JS object |
| modules/lib/lib-content/src/main/java/com/enonic/xp/lib/content/QueryContentHandler.java | Adjusts query paging parameter application |
| modules/lib/lib-content/src/main/java/com/enonic/xp/lib/content/GetVersionsHandler.java | Adds server-side handler for content.getVersions |
| modules/lib/lib-content/src/main/java/com/enonic/xp/lib/content/GetChildContentHandler.java | Refactors paging/sort param handling |
| modules/lib/lib-content/src/main/java/com/enonic/xp/lib/content/BaseContextHandler.java | Removes valueOrDefault helper |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/repo/vacuum/versiontable/VersionTableVacuumTaskTest.java | Updates itest to getVersions API and types |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/node/NodeServiceImplTest.java | Updates itest to new versions API/types |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/node/MoveNodeCommandTest.java | Updates assertions to NodeVersions |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/node/GetNodeVersionsCommandTest.java | Adds integration tests for cursor paging |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/node/GetActiveNodeVersionsCommandTest.java | Migrates to NodeVersion + improves assertion |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/node/FindNodeVersionsCommandTest.java | Updates to NodeVersions naming/type |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/node/ApplyNodePermissionsCommandTest.java | Adjusts version iteration type |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/dump/DumpServiceImplTest.java | Updates dump tests to getVersions + NodeStoreVersion |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/content/ContentServiceImplTest_versions.java | Updates content versions tests to new params/result |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/content/ContentServiceImplTest_versionAttributes.java | Updates content versions retrieval calls |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/content/ContentServiceImplTest_publish.java | Updates content versions retrieval calls |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/content/ContentServiceImplTest_archive.java | Updates content versions retrieval calls |
| modules/itest/itest-core/src/test/java/com/enonic/xp/core/content/AbstractContentServiceTest.java | Updates helper to new params/result |
| modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/vacuum/segment/SegmentVacuumTaskTest.java | Updates mocks for NodeVersions |
| modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/vacuum/blob/AbstractBlobVacuumTaskTest.java | Updates query result construction to NodeVersions |
| modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/storage/NodeStorageServiceImplTest.java | Updates to NodeVersion metadata + NodeStoreVersion |
| modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/repository/RepositoryServiceActivatorTest.java | Updates stored metadata type |
| modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonDumpSerializerTest.java | Updates serialization tests to NodeStoreVersion |
| modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/dao/NodeVersionServiceImplTest.java | Updates DAO tests to NodeStoreVersion |
| modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/htmlarea/HtmlAreaNodeDataUpgraderTest.java | Updates upgrader tests to NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/version/search/NodeVersionQueryResultFactory.java | Collects search hits into NodeVersions |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/version/VersionStorageDocFactory.java | Stores NodeVersion metadata instead of old type |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/version/VersionServiceImpl.java | Updates VersionService signatures/types |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/version/VersionService.java | Updates interface to NodeVersion metadata |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/version/NodeVersionFactory.java | Produces NodeVersion metadata |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/vacuum/versiontable/VersionTableVacuumCommand.java | Migrates version iteration to NodeVersions |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/vacuum/segment/SegmentVacuumCommand.java | Adjusts query ordering for recent versions check |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/storage/StoreNodeVersionParams.java | Switches stored version payload to NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/storage/NodeVersionData.java | Record now contains NodeVersion metadata |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/storage/NodeStorageServiceImpl.java | Separates store blob (NodeStoreVersion) from metadata (NodeVersion) |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/storage/NodeStorageService.java | Updates service return types |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonSerializer.java | Serializes/deserializes NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/NodeVersionDataJson.java | JSON model converts to/from NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/AccessControlJson.java | Access control JSON now uses NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/dao/NodeVersionServiceImpl.java | DAO interface updated to NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/dao/NodeVersionService.java | DAO interface updated to NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/VersionCursorHelper.java | Adds cursor encode/decode utility |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/PushNodesCommand.java | Uses NodeStoreVersion + NodeFactory for Node building |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/NodeServiceImpl.java | Adds getVersions(GetNodeVersionsParams) implementation |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/LoadNodeVersionCommand.java | Imports versions via Node instead of loose fields |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/GetNodeVersionsCommand.java | New cursor-based node versions retrieval command |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/CompareStatusResolver.java | Updates version metadata retrieval type |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/index/ReindexExecutor.java | Uses NodeStoreVersion from storage layer |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/obsoletemodel/pre4/Pre4NodeVersionJson.java | Uses NodeStoreVersion for old dump model |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/htmlarea/HtmlAreaNodeDataUpgrader.java | Uses NodeStoreVersion in upgrader |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/htmlarea/HtmlAreaDumpUpgrader.java | Uses NodeStoreVersion in dump upgrader |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/flattenedpage/FlattenedPageDumpUpgrader.java | Uses NodeStoreVersion in upgrader |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/RepositoryIdDumpUpgrader.java | Uses NodeStoreVersion for rewritten blobs |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/IndexConfigUpgrader.java | Uses NodeStoreVersion when inspecting node data |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/reader/VersionEntryProcessor.java | Imports versions by constructing a Node |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/reader/DumpReader.java | Reader now returns NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/reader/BranchEntryProcessor.java | Updates to NodeStoreVersion retrieval |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/reader/AbstractEntryProcessor.java | Updates binary import helper param type |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/reader/AbstractDumpReader.java | Reader now returns NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/VersionMetaFactory.java | Uses NodeVersion metadata |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/RepoDumper.java | Dumps version metadata with new types |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/branch/storage/NodeFactory.java | Centralizes building Node from NodeStoreVersion |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/NodeStoreVersion.java | New storage-layer node version representation |
| modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/NodeBranchEntry.java | Uses NodeVersion metadata in builder |
| modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/GetContentVersionsCommand.java | New content versions retrieval command |
| modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/FindContentVersionsCommand.java | Removed old offset-based command |
| modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/ContentServiceImpl.java | Switches to GetContentVersions* API |
| modules/core/core-api/src/test/java/com/enonic/xp/content/GetContentVersionsResultTest.java | Updates test to new result type |
| modules/core/core-api/src/test/java/com/enonic/xp/content/GetContentVersionsParamsTest.java | Adds tests for cursor params |
| modules/core/core-api/src/test/java/com/enonic/xp/content/FindContentVersionsParamsTest.java | Removes obsolete params test |
| modules/core/core-api/src/main/java/com/enonic/xp/node/NodeVersions.java | New immutable list type for node versions |
| modules/core/core-api/src/main/java/com/enonic/xp/node/NodeVersionQueryResult.java | Switches payload to NodeVersions |
| modules/core/core-api/src/main/java/com/enonic/xp/node/NodeVersionMetadatas.java | Removed obsolete list type |
| modules/core/core-api/src/main/java/com/enonic/xp/node/NodeVersionMetadata.java | Removed obsolete metadata type |
| modules/core/core-api/src/main/java/com/enonic/xp/node/NodeVersion.java | Redefined as version metadata |
| modules/core/core-api/src/main/java/com/enonic/xp/node/NodeService.java | Adds getVersions and adjusts nullability |
| modules/core/core-api/src/main/java/com/enonic/xp/node/Node.java | Removes builder-from-NodeVersion helper |
| modules/core/core-api/src/main/java/com/enonic/xp/node/ImportNodeVersionParams.java | Imports now done via Node aggregate |
| modules/core/core-api/src/main/java/com/enonic/xp/node/GetNodeVersionsResult.java | New result type with cursor |
| modules/core/core-api/src/main/java/com/enonic/xp/node/GetNodeVersionsParams.java | Adds cursor param; removes offset paging |
| modules/core/core-api/src/main/java/com/enonic/xp/node/GetActiveNodeVersionsResult.java | Updates map value to NodeVersion |
| modules/core/core-api/src/main/java/com/enonic/xp/content/GetContentVersionsResult.java | Renames result type and adds cursor |
| modules/core/core-api/src/main/java/com/enonic/xp/content/GetContentVersionsParams.java | New params type with cursor |
| modules/core/core-api/src/main/java/com/enonic/xp/content/FindContentVersionsParams.java | Removed obsolete offset-based params |
| modules/core/core-api/src/main/java/com/enonic/xp/content/ContentService.java | Switches to GetContentVersions* API |
Files not reviewed (1)
- modules/lib/package-lock.json: Language not supported
modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/GetNodeVersionsCommand.java
Show resolved
Hide resolved
modules/core/core-api/src/main/java/com/enonic/xp/node/NodeVersions.java
Outdated
Show resolved
Hide resolved
modules/core/core-api/src/main/java/com/enonic/xp/node/NodeVersions.java
Show resolved
Hide resolved
modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/NodeStoreVersion.java
Outdated
Show resolved
Hide resolved
| catch ( IOException e ) | ||
| { | ||
| throw new UncheckedIOException( "Failed to decode cursor", e ); |
There was a problem hiding this comment.
Base64.getDecoder().decode(cursor) can throw IllegalArgumentException, and missing/invalid JSON fields can cause NullPointerException/DateTimeParseException. These currently bypass the intended "Failed to decode cursor" message. Consider catching RuntimeException cases here and rethrowing an IllegalArgumentException with a clear message (and the original cause) so callers get a consistent, actionable error.
| catch ( IOException e ) | |
| { | |
| throw new UncheckedIOException( "Failed to decode cursor", e ); | |
| catch ( IOException | RuntimeException e ) | |
| { | |
| throw new IllegalArgumentException( "Failed to decode cursor", e ); |
| } | ||
|
|
||
| /** | ||
| * Retrieves the collection node versions. |
There was a problem hiding this comment.
Fix grammar in JavaDoc: "Retrieves the collection node versions." → "Retrieves the collection of node versions."
| * Retrieves the collection node versions. | |
| * Retrieves the collection of node versions. |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #11733 +/- ##
============================================
+ Coverage 86.71% 86.73% +0.02%
- Complexity 19704 19714 +10
============================================
Files 2540 2545 +5
Lines 66737 66771 +34
Branches 5343 5337 -6
============================================
+ Hits 57874 57917 +43
+ Misses 6273 6269 -4
+ Partials 2590 2585 -5 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
No description provided.