public void testService() throws ApsSystemException { RequestContext reqCtx = this.getRequestContext(); ((MockHttpServletRequest) reqCtx.getRequest()).setServletPath("/it/homepage.wp"); int status = this._requestValidator.service(reqCtx, ControllerManager.CONTINUE); assertEquals(ControllerManager.CONTINUE, status); Lang lang = (Lang) reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_LANG); IPage page = (IPage) reqCtx.getExtraParam(SystemConstants.EXTRAPAR_CURRENT_PAGE); assertNotNull(page); assertNotNull(lang); assertEquals("it", lang.getCode()); assertEquals("homepage", page.getCode()); }
private List<NavigatorTarget> parseSubSpec( NavigatorExpression navExpression, IPage page, List<NavigatorTarget> targets, UserDetails user) { int specId = navExpression.getSpecId(); IPage basePage = null; if (specId == NavigatorExpression.SPEC_CURRENT_PAGE_ID) { basePage = page; } else if (specId == NavigatorExpression.SPEC_PARENT_PAGE_ID) { int limit = 0; do { basePage = page.getParent(); limit++; } while ((!basePage.isShowable() || !this.isUserAllowed(user, basePage)) && limit < 20); } else if (specId == NavigatorExpression.SPEC_SUPER_ID) { if (navExpression.getSpecSuperLevel() < 0) { throw new RuntimeException("Level 'SUPER' not specified : Page " + page.getCode()); } basePage = page; for (int i = 1; i <= navExpression.getSpecSuperLevel(); i++) { basePage = basePage.getParent(); } int limit = 0; while ((!basePage.isShowable() || !this.isUserAllowed(user, basePage)) && limit < 20) { basePage = basePage.getParent(); limit++; } } else if (specId == NavigatorExpression.SPEC_ABS_ID) { basePage = page; if (navExpression.getSpecAbsLevel() < 0) { throw new RuntimeException("Level 'ABS' not specified : Page " + page.getCode()); } int absLevel = navExpression.getSpecAbsLevel(); List<IPage> candidates = new ArrayList<IPage>(); int limit = 0; if (basePage.isShowable() && isUserAllowed(user, basePage)) { candidates.add(0, basePage); } while (basePage != basePage.getParent() && limit < 20) { basePage = basePage.getParent(); if (basePage.isShowable() && isUserAllowed(user, basePage)) { candidates.add(0, basePage); } limit++; } if (absLevel >= candidates.size()) { absLevel = candidates.size() - 1; } basePage = (IPage) candidates.get(absLevel); } else if (specId == NavigatorExpression.SPEC_PAGE_ID) { if (null == navExpression.getSpecCode()) { throw new RuntimeException("Page Code not specified : Page " + page.getCode()); } String code = navExpression.getSpecCode(); IPage basePageTemp = this.getPageManager().getPage(code); if (null == basePageTemp) { ApsSystemUtils.getLogger() .severe( "Invalid Page Specification (null): Code " + code + " - Pagina " + page.getCode()); return targets; } if (basePageTemp.isShowable() && this.isUserAllowed(user, basePageTemp)) { basePage = basePageTemp; } } if (null == basePage) { return targets; } targets = this.processBasePage(navExpression, basePage, targets, user); return targets; }