>-----Original Message----- >From: Paul Sharples [mailto:[email protected]] >Sent: Monday, May 21, 2012 7:37 AM >To: [email protected] >Subject: Re: [DISCUSS] Shared Spaces bug with sub-page ordering > >On 17/05/2012 21:43, Carlucci, Tony wrote: >> Hello Rave devs, I came across a bug related to the shared spaces code that >I'm not quite sure how to best solve. It involves the render order of the sub- >pages (for example on the Person Profile page). On occasion I've noticed that >the sub page tabs were not rendering in their proper order, even though I >verified that the PageUser#renderSequence values were correct in the >database. The issue is that the Page#subPages list no longer has an OrderBy >annotation, which leaves the ordering of the data up to the database (hence >the occasional inconsistency). >> >> So, in theory, we need to put an OrderBy annotation back on the >Page#subPages list - something along the lines of >@OrderBy("members.renderSequence"). However, there is a limitation in >JPA where you can't order a list based on properties of entities in a sublist >(in >this case trying to order on renderSequence of List<PageUser> members). >> >> What do you think the best approach would be to ensure the subPages are >returned in their proper order? One solution would be to manually sort the >subPages List in the Page#getSubPages() getter method, but that would not >be the most efficient. Any better ideas? > >I've been re-reading the JPA documentation and trying to to figure out >another way of doing this, but unfortunately I haven't been able to come >up with another way using the current page & pageUser design. One >alternative I thought about could be that we update references to >ParentPage and subpages in 'Page.class' and make them of type PageUser, >rather than Page. > >i.e. in Page.class > > @OneToOne(cascade=CascadeType.ALL) > @JoinColumn(name="parent_page_id") > private PageUser parentPageUser; > > @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL, >mappedBy="parentPageUser") > @OrderBy("renderSequence") > private List<PageUser> subPageUsers; > >That way we should be able to get the subpages using the renderSequence >found in the PageUser entity. The effect of this would be that anywhere >else in the code where ParentPage & subpages are referenced, we would >have to update the calls so they navigate through the pageUser object >first. > >For example... > >// as is now >PageType parentPageType = page.getParentPage().getPageType() > >// updated method >PageType parentPageType = >page.getParentPageUser().getPage().getPageType() > >However, I am unsure if this solution would be any better than just >doing a sort in the Page#getSubPages() getter method as you originally >suggested. > >Paul
After reviewing your suggestion, as well as the current data model, I've come to the conclusion that the way I initially implemented the Page->SubPage relationship probably wasn't the best model for supporting Shared Spaces :) I know there will be some significant data model changes with the pages that will come along with the JCR work Ate and crew are doing, so for now I've committed a manual sort in Page#getSubPages that will ensure the sub-pages get ordered properly. Feel free to look it over and let me know what you think... Tony > >> >> Thanks, Tony >> >>
