コード例 #1
0
 private List<NavigatorTarget> processBasePage(
     NavigatorExpression navExpression,
     IPage basePage,
     List<NavigatorTarget> targets,
     UserDetails user) {
   int operatorId = navExpression.getOperatorId();
   if (operatorId < 0) {
     targets.add(new NavigatorTarget(basePage, 0));
   } else {
     if (operatorId == NavigatorExpression.OPERATOR_CHILDREN_ID) {
       IPage children[] = basePage.getChildren();
       for (int i = 0; i < children.length; i++) {
         if (children[i].isShowable() && isUserAllowed(user, children[i])) {
           targets.add(new NavigatorTarget(children[i], 0));
         }
       }
     } else if (operatorId == NavigatorExpression.OPERATOR_PATH_ID) {
       IPage page = basePage;
       int index = targets.size();
       int limit = 0;
       if (page.isShowable() && this.isUserAllowed(user, page)) {
         targets.add(index, new NavigatorTarget(page, 0));
       }
       while (!page.isRoot() && limit < 20) {
         page = page.getParent();
         if (page.isShowable() && this.isUserAllowed(user, page)) {
           targets.add(index, new NavigatorTarget(page, 0));
         }
         limit++;
       }
     } else if (operatorId == NavigatorExpression.OPERATOR_SUBTREE_ID) {
       int depth = navExpression.getOperatorSubtreeLevel();
       if (depth < 0) {
         throw new RuntimeException("Operator level 'SUBTREE' not specified");
       }
       targets = this.putSubTree(basePage, 0, depth, targets, user);
     } else {
       targets = null;
     }
   }
   return targets;
 }