package com.mossle.auth.support; import java.io.IOException; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.annotation.Resource; import com.mossle.auth.persistence.domain.Menu; import com.mossle.auth.persistence.manager.MenuManager; import com.mossle.auth.persistence.manager.PermManager; import com.mossle.core.mapper.JsonMapper; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MenuDeployer { private static Logger logger = LoggerFactory.getLogger(MenuDeployer.class); private MenuManager menuManager; private PermManager permManager; private boolean enable; private JsonMapper jsonMapper = new JsonMapper(); @PostConstruct public void init() { if (!enable) { logger.info("skip"); return; } try { String json = IOUtils.toString( MenuDeployer.class.getResourceAsStream("/data/menu.json"), "UTF-8"); List<Map<String, Object>> list = jsonMapper.fromJson(json, List.class); this.processMenus(list, null); } catch (IOException ex) { logger.error(ex.getMessage(), ex); } } public void processMenus(List<Map<String, Object>> list, String parentCode) { for (Map<String, Object> map : list) { this.processMenu(map, parentCode); } } public void processMenu(Map<String, Object> map, String parentCode) { String code = (String) map.get("code"); Menu menu = this.menuManager.findUniqueBy("code", code); if (menu == null) { menu = new Menu(); menu.setCode(code); menu.setTitle((String) map.get("name")); menu.setUrl((String) map.get("url")); menu.setType((String) map.get("type")); menu.setDisplay((String) map.get("display")); menu.setPriority((Integer) map.get("priority")); menu.setPerm(this.permManager.findUniqueBy("code", (String) map.get("perm"))); menu.setMenu(this.menuManager.findUniqueBy("code", parentCode)); this.menuManager.save(menu); logger.info("menu : {}", code); } List<Map<String, Object>> children = (List<Map<String, Object>>) map .get("children"); if (children != null) { this.processMenus(children, code); } } @Resource public void setMenuManager(MenuManager menuManager) { this.menuManager = menuManager; } @Resource public void setPermManager(PermManager permManager) { this.permManager = permManager; } public void setEnable(boolean enable) { this.enable = enable; } }