package net.bootsfaces.expressions; import java.util.ArrayList; import java.util.List; import javax.faces.FacesException; import javax.faces.component.UIComponent; public class NextExpressionResolver implements AbstractExpressionResolver { public List<UIComponent> resolve(UIComponent component, List<UIComponent> parentComponents, String currentId, String originalExpression, String[] parameters) { List<UIComponent> result = new ArrayList<UIComponent>(); for (UIComponent parent : parentComponents) { UIComponent grandparent = component.getParent(); for (int i = 0; i < grandparent.getChildCount(); i++) { if (grandparent.getChildren().get(i) == parent) { i++; if (i < grandparent.getChildCount()) { result.add(grandparent.getChildren().get(i)); break; } } } } if (result.size() > 0) { return result; } String componentList = " component(s): "; for (UIComponent parent : parentComponents) { componentList += parent.getClass().getSimpleName() + " id= " + parent.getId() + ", "; } if (componentList.endsWith(", ")) { throw new FacesException("Invalid search expression - there's no successor to the" + componentList.substring(0, componentList.length() - 2) + ". Complete search expression: " + originalExpression); } throw new FacesException( "Invalid search expression - there's no successor to the component. Complete search expression: " + originalExpression); } }