@Override public ServiceResponse<NavigationElementTree> perform(ServiceRequest<NamedValues> request) throws Exception { String lookup = (String) request.getData().get("lookup"); boolean lazyLoadResource = (Boolean) request.getData().get("lazyLoadResource"); List<NavigationElementTree> navigationElementTrees = new ArrayList<NavigationElementTree>(); if (ConfigContainer.isAppInstalled() && StringUtils.isNotBlank(lookup)) { String packageLookup = StringUtils.getPackageLookup(lookup); if (packageLookup == null) { logger.warn(MSG_WRONG_LOOKUP); } else { OPFContext context = OPFContext.getContext(); INavElementContainer navElementContainer = context.getNavElementContainer(); List<NavigationElement> navElementListByPackage = navElementContainer.getNavElementListByPackage(packageLookup); if (navElementListByPackage == null || navElementListByPackage.isEmpty()) { logger.warn(MSG_APPROPRIATE_NAVIGATION_ELEMENTS_WERE_FOUND); } else { NavigationElementTree navigationElementTree = null; NavigationElement parent = null; for (NavigationElement vo : navElementListByPackage) { if (vo.getLookup().equalsIgnoreCase(lookup)) { parent = vo; navigationElementTree = convert(parent); break; } } if (parent == null) { logger.warn(MSG_NO_SUCH_PARENT_NAVIGATION_WAS_FOUND); } else { buildTree(navigationElementTree, parent, navElementListByPackage, lazyLoadResource); navigationElementTrees = navigationElementTree.getChildren(); } } } } return new ServiceResponse<NavigationElementTree>( navigationElementTrees, "Return tree navigation elements.", true); }