package foundation.capacity.role; import foundation.dao.preload.Bucket; import foundation.dao.preload.Tree; import foundation.data.entity.Entity; import foundation.json.IJSONProvider; import foundation.json.IJSONWriter; import foundation.menu.Menu; import foundation.page.Page; public class Role implements IJSONProvider { protected String id; protected String code; protected String name; private Bucket rolePageBucket; private Tree roleMenuTree; public Role() { rolePageBucket = new Bucket(); roleMenuTree = new Tree(); } public void load(Entity entity) { id = entity.getString("id"); code = entity.getString("code"); name = entity.getString("name"); } public void loadOnePage(String menuId, Page page) { if (page == null) { return; } String menuPageKey = RolePage.createKey(menuId, page.getId()); RolePage rolePage = new RolePage(page); rolePageBucket.loadOne(menuPageKey, rolePage); } public void loadOneTab(String menuId, String pageId, String tabId) { String menuPageKey = RolePage.createKey(menuId, pageId); RolePage rolePage = rolePageBucket.getCachedOne(menuPageKey); if (rolePage == null) { return; } rolePage.loadOneTab(tabId); } public void loadOneButton(String menuId, String pageId, String buttonId, Entity entity) { String menuPageKey = RolePage.createKey(menuId, pageId); RolePage rolePage = rolePageBucket.getCachedOne(menuPageKey); if (rolePage == null) { return; } rolePage.loadOneButton(entity); } public void loadOneMenu(Menu menu) { if (menu == null) { return; } //1. add parent Menu parent = menu.getParent(); while (parent != null && !roleMenuTree.contains(parent.getId())) { RoleMenu roleMenu = new RoleMenu(parent); roleMenuTree.loadOne(roleMenu.getId(), roleMenu); parent = parent.getParent(); } //2. add menu RoleMenu roleMenu = new RoleMenu(menu); roleMenuTree.loadOne(roleMenu.getId(), roleMenu); } public void resetMenuTree(Tree newTree) { this.roleMenuTree = newTree; } public Bucket getPages() { return rolePageBucket; } public RolePage getPageById(String pageKey) { return rolePageBucket.get(pageKey); } public Tree getMenuTree() { return roleMenuTree; } public void onAfterLoadMenuTree() { roleMenuTree.onAfterLoad(true); } public String getId() { return id; } public String getCode() { return code; } @Override public void writeJSON(IJSONWriter writer) { writer.beginObject("role"); writeJSONBody(writer); writer.endObject(); } public void writeJSONBody(IJSONWriter writer) { writer.write("id", id); writer.write("code", code); writer.write("name", name); } }