package com.rbac.common;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
import org.json.me.JSONArray;
import org.json.me.JSONException;
import org.json.me.JSONObject;
import com.rbac.entity.SysMenu;
import com.rbac.entity.SysMenuVo;
public class MenuTree {
/**
* 菜单转json字符串
* @param menuList
* @param check 是否有复选框
* @return
*/
public static String getMenuJsonString(List<SysMenu> menuList, Boolean check) {
List<SysMenuVo> levelOneMenuList = new ArrayList<SysMenuVo>();
List<SysMenuVo> todoMenuList = new ArrayList<SysMenuVo>();
for (SysMenu menu : menuList) {
SysMenuVo menuVo = new SysMenuVo();
menuVo.setId(menu.getId());
menuVo.setOrderSeq(menu.getOrderSeq());
menuVo.setText(menu.getName());
menuVo.setUrl(menu.getUrl());
menuVo.setParentId(menu.getParentId());
if(check){
menuVo.setChecked(menu.getChecked());
}
if (menu.getParentId() == null
|| menu.getParentId().longValue() == 0L) {
levelOneMenuList.add(menuVo);
} else {
todoMenuList.add(menuVo);
}
}
Collections.sort(levelOneMenuList);
for (SysMenuVo menuVo : levelOneMenuList) {
setMenuChilren(menuVo, todoMenuList);
}
// 菜单json模板
// {id:"0",text:"菜单",expanded: true ,children:[{id:"2",text:"子菜单1",leaf: true}]}
// checked:true 可选,是否有复选框
JSONArray array = new JSONArray();
for (SysMenuVo menuVo : levelOneMenuList) {
array.put(objToJson(menuVo, check));
}
return array.toString();
}
/**
* 菜单转json字符串,递归处理子菜单
* @param menu
* @param todoMenuList
*/
private static void setMenuChilren(SysMenuVo menu, List<SysMenuVo> todoMenuList) {
ListIterator<SysMenuVo> it = todoMenuList.listIterator();
while (it.hasNext()) {
SysMenuVo todoMenu = it.next();
if (todoMenu.getParentId() != null
&& todoMenu.getParentId().equals(menu.getId())) {
menu.getChildren().add(todoMenu);
it.remove();
setMenuChilren(todoMenu, todoMenuList);
}
}
Collections.sort(menu.getChildren());
}
/**
* 菜单实体转json对象
* @param menuVo
* @param check 是否有复选框
* @return
*/
private static JSONObject objToJson(SysMenuVo menuVo, Boolean check) {
JSONObject obj = new JSONObject();
try {
obj.put("id", menuVo.getId());
obj.put("leaf", menuVo.getLeaf());
obj.put("text", menuVo.getText());
obj.put("url", menuVo.getUrl());
if(check){
obj.put("checked", menuVo.getChecked());
}
if (menuVo.getChildren().size() > 0) {
JSONArray childArray = new JSONArray();
for (SysMenuVo child : menuVo.getChildren()) {
childArray.put(objToJson(child, check));
}
obj.put("children", childArray);
}
} catch (JSONException e) {
e.printStackTrace();
}
return obj;
}
}