public static void buildMenuItems(HttpServletRequest request, String s, String s1, String s2) { int menuOrder = 50; if (CarbonUIUtil.isUserAuthorized(request, "/permission/admin/manage/resources/ws-api")) { HttpSession session = request.getSession(); String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); try { WSRegistryServiceClient registry = new WSRegistryServiceClient(s2, cookie); List<GovernanceArtifactConfiguration> configurations = GovernanceUtils.findGovernanceArtifactConfigurations(registry); Map<String, String> customAddUIMap = new LinkedHashMap<String, String>(); Map<String, String> customViewUIMap = new LinkedHashMap<String, String>(); List<Menu> userCustomMenuItemsList = new LinkedList<Menu>(); for (GovernanceArtifactConfiguration configuration : configurations) { Component component = new Component(); OMElement uiConfigurations = configuration.getUIConfigurations(); String key = configuration.getKey(); String configurationPath = RegistryConstants.CONFIG_REGISTRY_BASE_PATH + RegistryConstants.GOVERNANCE_COMPONENT_PATH + "/configuration/"; String layoutStoragePath = configurationPath + key; RealmService realmService = registry.getRegistryContext().getRealmService(); if (realmService .getTenantUserRealm(realmService.getTenantManager().getTenantId(s1)) .getAuthorizationManager() .isUserAuthorized(s, configurationPath, ActionConstants.PUT) || registry.resourceExists(layoutStoragePath)) { List<Menu> menuList = component.getMenusList(); if (uiConfigurations != null) { ComponentBuilder.processMenus("artifactType", uiConfigurations, component); ComponentBuilder.processCustomUIs(uiConfigurations, component); } if (menuList.size() == 0) { // if no menu definitions were present, define the default ones. menuOrder = buildMenuList(request, configuration, menuList, key, menuOrder); } userCustomMenuItemsList.addAll(menuList); customAddUIMap.putAll(component.getCustomAddUIMap()); Map<String, String> viewUIMap = component.getCustomViewUIMap(); if (viewUIMap.isEmpty()) { // if no custom UI definitions were present, define the default. buildViewUI(configuration, viewUIMap, key); } customViewUIMap.putAll(viewUIMap); OMElement layout = configuration.getContentDefinition(); if (layout != null && !registry.resourceExists(layoutStoragePath)) { Resource resource = registry.newResource(); resource.setContent(RegistryUtils.encodeString(layout.toString())); resource.setMediaType("application/xml"); registry.put(layoutStoragePath, resource); } } } session.setAttribute( MenuAdminClient.USER_CUSTOM_MENU_ITEMS, userCustomMenuItemsList.toArray(new Menu[userCustomMenuItemsList.size()])); session.setAttribute("customAddUI", customAddUIMap); session.setAttribute("customViewUI", customViewUIMap); } catch (RegistryException e) { log.error("unable to create connection to registry"); } catch (org.wso2.carbon.user.api.UserStoreException e) { log.error("unable to realm service"); } } }
/* * This method is used to capture the lifecycle attribute from the configuration. * * expected configuration elements are * * <field type="options"> <name label="Lifecycle Name" >Lifecycle Name</name> <values class="org.wso2.carbon.governance.generic.ui.utils.LifecycleListPopulator"/> </field> * * or * * <field type="options"> <name label="Lifecycle Name" >Lifecycle Name</name> <values class="com.foo.bar.LifecycleListPopulator" isLifecycle="true"/> </field> * */ private static String BuilLifecycleAttribute( GovernanceArtifactConfiguration configuration, String defaultLifecycleGeneratorClass, String lifecycleAttribute) { try { // This part checks whether the user has given a lifecycle populates. // If not, then we check whether there is an attribute called, "isLifecycle" // This attribute will identify the lifecycle attribute from the configuration. OMElement configurationElement = configuration.getContentDefinition(); String xpathExpression = "//@class"; AXIOMXPath xpath = new AXIOMXPath(xpathExpression); List resultNodes = xpath.selectNodes(configurationElement); if (resultNodes != null && resultNodes.size() > 0) { String lifecycleParentName = null; String lifecycleName = null; for (Object resultNode : resultNodes) { OMElement parentElement = ((OMAttribute) resultNode).getOwner(); if (parentElement .getAttributeValue(new QName("class")) .equals(defaultLifecycleGeneratorClass)) { Iterator childrenIterator = parentElement.getParent().getChildrenWithLocalName("name"); while (childrenIterator.hasNext()) { OMElement next = (OMElement) childrenIterator.next(); lifecycleName = next.getAttributeValue(new QName("label")); } OMElement rootElement = (OMElement) ((OMElement) parentElement.getParent()).getParent(); lifecycleParentName = rootElement.getAttributeValue(new QName("name")); break; } else if (parentElement.getAttributeValue(new QName("isLifecycle")) != null && parentElement.getAttributeValue(new QName("isLifecycle")).equals("true")) { Iterator childrenIterator = parentElement.getParent().getChildrenWithLocalName("name"); while (childrenIterator.hasNext()) { OMElement next = (OMElement) childrenIterator.next(); lifecycleName = next.getAttributeValue(new QName("label")); } OMElement rootElement = (OMElement) ((OMElement) parentElement.getParent()).getParent(); lifecycleParentName = rootElement.getAttributeValue(new QName("name")); break; } } if (lifecycleParentName != null && lifecycleName != null) { return convertName(lifecycleParentName.split(" ")) + "_" + convertName(lifecycleName.split(" ")); } } } catch (OMException e) { log.error( "Governance artifact configuration of configuration key:" + configuration.getKey() + " is invalid", e); } catch (JaxenException e) { log.error("Error in getting the lifecycle attribute", e); } return null; }