Skip to content

Commit 45e059e

Browse files
authored
Merge pull request #164 from entando/ENG-4886_As-a-user-that-only-visualizes-a-Virtual-Tree-that-can-only-manage-pages-of-group-free-I-MUST-be-able-to-change-around-the-order
ENG-4886 As a user that only visualizes a Virtual Tree, that can only manage pages of group `free`, I MUST be able to change around the order of pages even if there are siblings that are hidden to me.
2 parents ad9263f + c1675a5 commit 45e059e

2 files changed

Lines changed: 25 additions & 0 deletions

File tree

engine/src/main/java/org/entando/entando/aps/system/services/TreeNodeHelper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.entando.entando.aps.system.services;
22

33
import com.agiletec.aps.system.common.tree.ITreeNode;
4+
import lombok.extern.slf4j.Slf4j;
5+
46
import java.util.ArrayList;
57
import java.util.List;
68

9+
@Slf4j
710
public abstract class TreeNodeHelper<T extends ITreeNode> {
811

912
public List<T> getNodes(String parentNodeCode) {
@@ -15,11 +18,15 @@ public List<T> getNodes(String parentNodeCode) {
1518
}
1619

1720
private List<T> buildNodesList(T parentNode, List<T> nodes, boolean root) {
21+
log.debug("build node list for parentNode:'{}'", parentNode.getCode());
1822
if (root || !this.isNodeAllowed(parentNode)) {
1923
for (String childNodeCode : parentNode.getChildrenCodes()) {
2024
T childNode = this.getTreeNode(childNodeCode);
25+
2126
if (this.isNodeAllowed(childNode)) {
2227
nodes.add(childNode);
28+
log.debug("added child:'{}' for parentNode:'{}' absolutePosition:'{}'",
29+
childNodeCode, parentNode.getCode(), childNode.getPosition());
2330
}
2431
buildNodesList(childNode, nodes, false);
2532
}

engine/src/main/java/org/entando/entando/aps/system/services/page/PageService.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.agiletec.aps.system.common.FieldSearchFilter;
1717
import com.agiletec.aps.system.common.IManager;
1818
import com.agiletec.aps.system.common.model.dao.SearcherDaoPaginatedResult;
19+
import com.agiletec.aps.system.common.tree.ITreeNode;
1920
import com.agiletec.aps.system.services.group.Group;
2021
import com.agiletec.aps.system.services.group.GroupUtilizer;
2122
import com.agiletec.aps.system.services.group.IGroupManager;
@@ -437,10 +438,27 @@ public PageDto updatePageStatus(String pageCode, String status) {
437438

438439
@Override
439440
public PageDto movePage(String pageCode, PagePositionRequest pageRequest, UserDetails user) {
441+
int absolutePosition = getAbsolutePosition(pageRequest.getParentCode(), pageRequest.getPosition(), user);
442+
logger.debug("before move page:'{}' replace position:'{}' with absolutePosition:'{}' under parent:'{}'",
443+
pageCode, pageRequest.getPosition(), absolutePosition, pageRequest.getParentCode());
444+
pageRequest.setPosition(absolutePosition);
440445
PageDto pageDto = this.movePage(pageCode, pageRequest);
441446
return this.loadVirtualChildren(pageDto, user);
442447
}
443448

449+
private int getAbsolutePosition(String parentCode, int position, UserDetails user){
450+
PageTreeNodeHelper helper = new PageTreeNodeHelper(this.getPageManager(), this.pageAuthorizationService, user);
451+
List<IPage> pages = helper.getNodes(parentCode);
452+
int absolutePosition = position;
453+
for(int i=0; i < pages.size(); i++) {
454+
if(i == position-1){
455+
absolutePosition = pages.get(i).getPosition();
456+
break;
457+
}
458+
}
459+
return absolutePosition;
460+
}
461+
444462
@Override
445463
public PageDto movePage(String pageCode, PagePositionRequest pageRequest) {
446464
BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(pageCode, "page");

0 commit comments

Comments
 (0)