private void compileSpecific() { Node<BasicPermissionTarget> root = new Node<>( new BasicPermissionTarget("category:specific", getMessage("permissionConfig.specificRoot"), null)); specific = new Tree<>(root); final String configName = AppContext.getProperty(PERMISSION_CONFIG_XML_PROP); StringTokenizer tokenizer = new StringTokenizer(configName); for (String location : tokenizer.getTokenArray()) { Resource resource = resources.getResource(location); if (resource.exists()) { InputStream stream = null; try { stream = resource.getInputStream(); String xml = IOUtils.toString(stream, StandardCharsets.UTF_8); compileSpecific(xml, root); } catch (IOException e) { throw new RuntimeException("Unable to read permission config", e); } finally { IOUtils.closeQuietly(stream); } } else { log.warn("Resource {} not found, ignore it", location); } } }
private void walkSpecific(Element element, Node<BasicPermissionTarget> node) { for (Element elem : (List<Element>) element.elements()) { String id = elem.attributeValue("id"); String caption = getMessage("permission-config." + id); if ("category".equals(elem.getName())) { Node<BasicPermissionTarget> existingCategory = null; String categoryPermissionId = "category:" + id; for (Node<BasicPermissionTarget> subNode : node.getChildren()) { if (categoryPermissionId.equals(subNode.getData().getId())) { existingCategory = subNode; break; } } Node<BasicPermissionTarget> categoryNode; if (existingCategory == null) { categoryNode = new Node<>(new BasicPermissionTarget(categoryPermissionId, caption, null)); node.addChild(categoryNode); } else { categoryNode = existingCategory; } walkSpecific(elem, categoryNode); } else if ("permission".equals(elem.getName())) { Node<BasicPermissionTarget> n = new Node<>( new BasicPermissionTarget("permission:" + id, caption, id)); node.addChild(n); } } } }
private void compileScreens() { Node<BasicPermissionTarget> menuRoot = new Node<>( new BasicPermissionTarget("root:menu", getMessage("permissionConfig.mainMenu"), null) ); walkMenu(menuRoot); Node<BasicPermissionTarget> othersRoot = new Node<>( new BasicPermissionTarget("root:others", getMessage("permissionConfig.otherScreens"), null) ); walkOtherScreens(othersRoot, menuRoot); screens = new Tree<>(Arrays.asList(menuRoot, othersRoot)); }