package com.xzx.gc.role.util;
|
|
|
|
import com.xzx.gc.entity.CoreMenu;
|
import com.xzx.gc.role.rbac.tree.MenuItem;
|
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.List;
|
|
public class MenuBuildUtil {
|
private MenuBuildUtil() {
|
|
}
|
|
public static MenuItem buildMenuTree(List<CoreMenu> list) {
|
CoreMenu root = new CoreMenu();
|
root.setId(0L);
|
root.setType("");
|
root.setName("主菜单");
|
MenuItem rootMenu = new MenuItem(root);
|
buildTreeNode(rootMenu, list);
|
return rootMenu;
|
}
|
|
private static void buildTreeNode(MenuItem parent, List<CoreMenu> list) {
|
|
if (parent.getData().getType().equals(CoreMenu.TYPE_MENUITEM)) {
|
return;
|
}
|
|
|
Long id = parent.getId();
|
List<CoreMenu> dels = new ArrayList<>();
|
for (CoreMenu sysMenu : list) {
|
if (id.equals(sysMenu.getParentMenuId() )) {
|
MenuItem item = new MenuItem(sysMenu);
|
item.setParent(parent);
|
dels.add(sysMenu);
|
}
|
}
|
list.removeAll(dels);
|
|
if (list.isEmpty()) {
|
return;
|
}
|
|
sortMenu(parent.getChildren());
|
|
for (MenuItem child : parent.getChildren()) {
|
buildTreeNode(child, list);
|
}
|
|
}
|
|
private static void sortMenu(List<MenuItem> children) {
|
Collections.sort(children, new Comparator<MenuItem>() {
|
|
@Override
|
public int compare(MenuItem o1, MenuItem o2) {
|
return o1.getSeq().compareTo(o2.getSeq());
|
}
|
|
});
|
|
}
|
|
}
|