From d88cced53e3206ab929cbc05ea0df67e8571883c Mon Sep 17 00:00:00 2001 From: Evgeny Andreev Date: Fri, 11 Apr 2025 14:44:22 +0200 Subject: [PATCH 1/3] clean-up, fix --- app/admin/fiori-service.cds | 4 ++-- db/books.cds | 17 ++++++++--------- {srv => db}/hierarchy.cds | 4 ++-- srv/admin-service.cds | 8 ++------ .../bookshop/handlers/AdminServiceHandler.java | 3 +-- .../handlers/HierarchySiblingActionHandler.java | 2 +- 6 files changed, 16 insertions(+), 22 deletions(-) rename {srv => db}/hierarchy.cds (84%) diff --git a/app/admin/fiori-service.cds b/app/admin/fiori-service.cds index fbb1d930..2f1ec712 100644 --- a/app/admin/fiori-service.cds +++ b/app/admin/fiori-service.cds @@ -97,11 +97,11 @@ annotate AdminService.GenreHierarchy with { ID @UI.Hidden; }; -@Hierarchy.RecursiveHierarchyActions #GenreHierarchy: { +annotate AdminService.GenreHierarchy with @Hierarchy.RecursiveHierarchyActions #GenreHierarchy: { $Type : 'Hierarchy.RecursiveHierarchyActionsType', // any name can be the action name with namespace/no bound action name ChangeNextSiblingAction: 'AdminService.moveSibling', -} +}; annotate AdminService.GenreHierarchy with @UI: { PresentationVariant #VH: { diff --git a/db/books.cds b/db/books.cds index 1d94da29..665587af 100644 --- a/db/books.cds +++ b/db/books.cds @@ -1,13 +1,9 @@ namespace my.bookshop; -using { - Currency, - sap, - managed, - cuid -} from '@sap/cds/common'; +using {Currency, sap, managed, cuid} from '@sap/cds/common'; using my.bookshop.Reviews from './reviews'; using my.bookshop.TechnicalBooleanFlag from './common'; +using {my.common.Hierarchy as Hierarchy} from './hierarchy'; @fiori.draft.enabled entity Books : cuid, managed { @@ -50,17 +46,20 @@ annotate Authors with /** * Hierarchically organized Code List for Genres */ -entity Genres : sap.common.CodeList { +entity Genres : sap.common.CodeList, Hierarchy { key ID : UUID; - siblingRank : Integer; + // move siblings + siblingRank : Integer; parent : Association to Genres; + // for cascade delete children : Composition of many Genres on children.parent = $self; } + /** * Hierarchically organized entity for Contents */ -entity Contents { +entity Contents: Hierarchy { key ID : UUID; name : String; page : Integer; diff --git a/srv/hierarchy.cds b/db/hierarchy.cds similarity index 84% rename from srv/hierarchy.cds rename to db/hierarchy.cds index f6619d98..0e7a57d9 100644 --- a/srv/hierarchy.cds +++ b/db/hierarchy.cds @@ -4,8 +4,8 @@ aspect Hierarchy { virtual LimitedDescendantCount : Integer64; virtual DistanceFromRoot : Integer64; virtual DrillState : String; - virtual Matched : Boolean; - virtual MatchedDescendantCount : Integer64; + virtual Matched : Boolean; // not used + virtual MatchedDescendantCount : Integer64; // not used virtual LimitedRank : Integer64; } diff --git a/srv/admin-service.cds b/srv/admin-service.cds index 62676766..5430998a 100644 --- a/srv/admin-service.cds +++ b/srv/admin-service.cds @@ -1,11 +1,9 @@ using {sap.common.Languages as CommonLanguages, cuid} from '@sap/cds/common'; using {my.bookshop as my} from '../db/index'; using {sap.changelog as changelog} from 'com.sap.cds/change-tracking'; -using {my.common.Hierarchy as Hierarchy} from './hierarchy'; using {sap.attachments.Attachments} from 'com.sap.cds/cds-feature-attachments'; extend my.Orders with changelog.changeTracked; -extend my.Genres with Hierarchy; @path: 'admin' @odata.apply.transformations @@ -26,12 +24,10 @@ service AdminService @(requires: 'admin') { entity GenreHierarchy as projection on my.Genres excluding {children} order by siblingRank actions { - // Experimental UI feature, see: - // https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#template_changenextsiblingaction-experimental - action moveSibling(NextSibling : NextSibling); + // HierarchySiblingActionHandler.java + action moveSibling(NextSibling : NextSibling); // to be implemented in custom handler }; - extend my.Contents with Hierarchy; entity ContentsHierarchy as projection on my.Contents; @cds.persistence.skip diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java index 739e02d4..b9dd526c 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java @@ -29,7 +29,6 @@ import com.sap.cds.services.ErrorStatuses; import com.sap.cds.services.EventContext; import com.sap.cds.services.ServiceException; -import com.sap.cds.services.cds.CdsReadEventContext; import com.sap.cds.services.cds.CdsUpdateEventContext; import com.sap.cds.services.cds.CqnService; import com.sap.cds.services.draft.DraftCancelEventContext; @@ -307,7 +306,7 @@ public void restoreCoversUpId(CqnStructuredTypeRef ref, BooksCovers cover) { @On(event = CqnService.EVENT_READ, entity = Info_.CDS_NAME) public Info readInfo() { Info info = Info.create(); - info.setHideTreeTable(!env.matchesProfiles("cloud")); + info.setHideTreeTable(!env.matchesProfiles("hybrid")); return info; } diff --git a/srv/src/main/java/my/bookshop/handlers/HierarchySiblingActionHandler.java b/srv/src/main/java/my/bookshop/handlers/HierarchySiblingActionHandler.java index 31f08b6c..babb6668 100644 --- a/srv/src/main/java/my/bookshop/handlers/HierarchySiblingActionHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/HierarchySiblingActionHandler.java @@ -26,7 +26,7 @@ /** * Example of a custom handler for nextSiblingAction */ -@Profile("cloud") +@Profile("hybrid") public class HierarchySiblingActionHandler implements EventHandler { private final PersistenceService db; From a75756160aa375bc7e108fd2253b4c0811ca9d92 Mon Sep 17 00:00:00 2001 From: Evgeny Andreev Date: Fri, 11 Apr 2025 14:47:06 +0200 Subject: [PATCH 2/3] cloud profile --- srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java | 2 +- .../my/bookshop/handlers/HierarchySiblingActionHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java index b9dd526c..9785db72 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceHandler.java @@ -306,7 +306,7 @@ public void restoreCoversUpId(CqnStructuredTypeRef ref, BooksCovers cover) { @On(event = CqnService.EVENT_READ, entity = Info_.CDS_NAME) public Info readInfo() { Info info = Info.create(); - info.setHideTreeTable(!env.matchesProfiles("hybrid")); + info.setHideTreeTable(!env.matchesProfiles("cloud")); return info; } diff --git a/srv/src/main/java/my/bookshop/handlers/HierarchySiblingActionHandler.java b/srv/src/main/java/my/bookshop/handlers/HierarchySiblingActionHandler.java index babb6668..31f08b6c 100644 --- a/srv/src/main/java/my/bookshop/handlers/HierarchySiblingActionHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/HierarchySiblingActionHandler.java @@ -26,7 +26,7 @@ /** * Example of a custom handler for nextSiblingAction */ -@Profile("hybrid") +@Profile("cloud") public class HierarchySiblingActionHandler implements EventHandler { private final PersistenceService db; From abd927ab4fb1948bebe5a210130ec06efb155d76 Mon Sep 17 00:00:00 2001 From: Evgeny Andreev Date: Fri, 11 Apr 2025 14:55:05 +0200 Subject: [PATCH 3/3] clean up cds --- app/admin/fiori-service.cds | 2 -- app/browse-genres/fiori-service.cds | 2 -- app/genres/fiori-service.cds | 2 -- db/hierarchy.cds | 6 ------ srv/admin-service.cds | 6 ++++-- 5 files changed, 4 insertions(+), 14 deletions(-) diff --git a/app/admin/fiori-service.cds b/app/admin/fiori-service.cds index 2f1ec712..75ed712e 100644 --- a/app/admin/fiori-service.cds +++ b/app/admin/fiori-service.cds @@ -210,8 +210,6 @@ annotate AdminService.ContentsHierarchy with @Hierarchy.RecursiveHierarchy#Conte LimitedDescendantCount: LimitedDescendantCount, DistanceFromRoot: DistanceFromRoot, DrillState: DrillState, - Matched: Matched, - MatchedDescendantCount: MatchedDescendantCount, LimitedRank: LimitedRank }; diff --git a/app/browse-genres/fiori-service.cds b/app/browse-genres/fiori-service.cds index 0fe951c0..809df04f 100644 --- a/app/browse-genres/fiori-service.cds +++ b/app/browse-genres/fiori-service.cds @@ -16,7 +16,5 @@ annotate CatalogService.GenreHierarchy with @Hierarchy.RecursiveHierarchy#GenreH LimitedDescendantCount: LimitedDescendantCount, DistanceFromRoot: DistanceFromRoot, DrillState: DrillState, - Matched: Matched, - MatchedDescendantCount: MatchedDescendantCount, LimitedRank: LimitedRank }; diff --git a/app/genres/fiori-service.cds b/app/genres/fiori-service.cds index 6c91516c..63862035 100644 --- a/app/genres/fiori-service.cds +++ b/app/genres/fiori-service.cds @@ -17,7 +17,5 @@ annotate AdminService.GenreHierarchy with @Aggregation.RecursiveHierarchy#GenreH LimitedDescendantCount: LimitedDescendantCount, DistanceFromRoot: DistanceFromRoot, DrillState: DrillState, - Matched: Matched, - MatchedDescendantCount: MatchedDescendantCount, LimitedRank: LimitedRank }; diff --git a/db/hierarchy.cds b/db/hierarchy.cds index 0e7a57d9..f8ec83cb 100644 --- a/db/hierarchy.cds +++ b/db/hierarchy.cds @@ -4,8 +4,6 @@ aspect Hierarchy { virtual LimitedDescendantCount : Integer64; virtual DistanceFromRoot : Integer64; virtual DrillState : String; - virtual Matched : Boolean; // not used - virtual MatchedDescendantCount : Integer64; // not used virtual LimitedRank : Integer64; } @@ -14,8 +12,6 @@ annotate Hierarchy with @Capabilities.FilterRestrictions.NonFilterableProperties 'LimitedDescendantCount', 'DistanceFromRoot', 'DrillState', - 'Matched', - 'MatchedDescendantCount', 'LimitedRank' ]; @@ -23,7 +19,5 @@ annotate Hierarchy with @Capabilities.SortRestrictions.NonSortableProperties: [ 'LimitedDescendantCount', 'DistanceFromRoot', 'DrillState', - 'Matched', - 'MatchedDescendantCount', 'LimitedRank' ]; diff --git a/srv/admin-service.cds b/srv/admin-service.cds index 5430998a..83bb0a52 100644 --- a/srv/admin-service.cds +++ b/srv/admin-service.cds @@ -24,8 +24,10 @@ service AdminService @(requires: 'admin') { entity GenreHierarchy as projection on my.Genres excluding {children} order by siblingRank actions { - // HierarchySiblingActionHandler.java - action moveSibling(NextSibling : NextSibling); // to be implemented in custom handler + // Custom Handler -> HierarchySiblingActionHandler.java + // Experimental UI feature, see: + // https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#template_changenextsiblingaction-experimental + action moveSibling(NextSibling : NextSibling); }; entity ContentsHierarchy as projection on my.Contents;