@Override public Optional<ImmutableQueryModifiers> applyToQueryModifiers(ImmutableQueryModifiers immutableQueryModifiers) { ImmutableList.Builder<OrderCondition> orderConditionBuilder = ImmutableList.builder(); for (OrderCondition orderCondition : immutableQueryModifiers.getSortConditions()) { Variable newVariable = applyToVariable((Variable) orderCondition.getVariable()); orderConditionBuilder.add(orderCondition.newVariable(newVariable)); } return immutableQueryModifiers.newSortConditions(orderConditionBuilder.build()); }
/** * TODO: explain */ private static Optional<ImmutableQueryModifiers> updateOptionalModifiers( Optional<ImmutableQueryModifiers> optionalModifiers, ImmutableSubstitution<? extends ImmutableTerm> substitution1, ImmutableSubstitution<? extends ImmutableTerm> substitution2) { if (!optionalModifiers.isPresent()) { return Optional.empty(); } ImmutableQueryModifiers previousModifiers = optionalModifiers.get(); ImmutableList.Builder<OrderCondition> conditionBuilder = ImmutableList.builder(); for (OrderCondition condition : previousModifiers.getSortConditions()) { ImmutableTerm newTerm = substitution2.apply(substitution1.apply(condition.getVariable())); /** * If after applying the substitution the term is still a variable, * "updates" the OrderCondition. * * Otherwise, forgets it. */ if (newTerm instanceof Variable) { conditionBuilder.add(condition.newVariable((Variable) newTerm)); } } return previousModifiers.newSortConditions(conditionBuilder.build()); }