Skip to content

Commit

Permalink
Revise naming for caching code (#720)
Browse files Browse the repository at this point in the history
  • Loading branch information
seadowg authored Jul 5, 2023
1 parent 34f4cbd commit 56ab10c
Show file tree
Hide file tree
Showing 9 changed files with 41 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.javarosa.core.model;

import org.javarosa.core.model.condition.EvaluationContext;
import org.javarosa.core.model.condition.PredicateFilter;
import org.javarosa.core.model.condition.FilterStrategy;
import org.javarosa.core.model.instance.DataInstance;
import org.javarosa.core.model.instance.TreeReference;
import org.javarosa.xpath.expr.XPathCmpExpr;
Expand All @@ -15,10 +15,10 @@
import java.util.function.Supplier;

/**
* Caches down stream evaluations (in the {@link PredicateFilter} chain) for supported expressions - currently just
* Caches down stream evaluations (in the {@link FilterStrategy} chain) for supported expressions - currently just
* {@link XPathCmpExpr} and {@link XPathEqExpr}. Repeated evaluations are fetched in O(1) time.
*/
public class CompareChildToAbsoluteExpressionFilter implements PredicateFilter {
public class ComparisonExpressionCacheFilterStrategy implements FilterStrategy {

private final Map<String, List<TreeReference>> cachedEvaluations = new HashMap<>();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.javarosa.core.model;

import org.javarosa.core.model.condition.EvaluationContext;
import org.javarosa.core.model.condition.PredicateFilter;
import org.javarosa.core.model.condition.FilterStrategy;
import org.javarosa.core.model.instance.DataInstance;
import org.javarosa.core.model.instance.TreeReference;
import org.javarosa.measure.Measure;
Expand All @@ -22,7 +22,7 @@
* {@link XPathEqExpr} where one side is relative to the instance child being filtered. Evaluations are fetched in
* O(1) time with O(n) expression evaluations only being required the first time a relative side is evaluated.
*/
public class IndexPredicateFilter implements PredicateFilter {
public class EqualityExpressionIndexFilterStrategy implements FilterStrategy {

private final InMemTreeReferenceIndex index = new InMemTreeReferenceIndex();

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/org/javarosa/core/model/FormDef.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import org.javarosa.core.model.condition.EvaluationContext;
import org.javarosa.core.model.condition.IConditionExpr;
import org.javarosa.core.model.condition.IFunctionHandler;
import org.javarosa.core.model.condition.PredicateFilter;
import org.javarosa.core.model.condition.FilterStrategy;
import org.javarosa.core.model.condition.Triggerable;
import org.javarosa.core.model.data.IAnswerData;
import org.javarosa.core.model.data.MultipleItemsData;
Expand Down Expand Up @@ -1709,7 +1709,7 @@ public void disablePredicateCaching() {
dagImpl.disablePredicateCaching();
}

public void addPredicateFilter(PredicateFilter predicateFilter) {
dagImpl.addPredicateFilter(predicateFilter);
public void addFilterStrategy(FilterStrategy filterStrategy) {
dagImpl.addFilterStrategy(filterStrategy);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.javarosa.core.model;

import org.javarosa.core.model.condition.EvaluationContext;
import org.javarosa.core.model.condition.PredicateFilter;
import org.javarosa.core.model.condition.FilterStrategy;
import org.javarosa.core.model.instance.DataInstance;
import org.javarosa.core.model.instance.TreeReference;
import org.javarosa.xpath.expr.XPathExpression;
Expand All @@ -13,11 +13,11 @@
import java.util.function.Supplier;

/**
* Caches down stream evaluations (in the {@link PredicateFilter} chain) for "idempotent" (with respect to current form
* Caches down stream evaluations (in the {@link FilterStrategy} chain) for "idempotent" (with respect to current form
* state) predicates. Can only be used for static instances or in cases where form state won't change - will cause
* clashes otherwise. Repeated evaluations are fetched in O(1) time.
*/
public class IdempotentPredicateCache implements PredicateFilter {
public class IdempotentExpressionCacheFilterStrategy implements FilterStrategy {

private final Map<String, List<TreeReference>> cachedEvaluations = new HashMap<>();

Expand Down
18 changes: 9 additions & 9 deletions src/main/java/org/javarosa/core/model/TriggerableDag.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import org.javarosa.core.model.condition.Condition;
import org.javarosa.core.model.condition.EvaluationContext;
import org.javarosa.core.model.condition.PredicateFilter;
import org.javarosa.core.model.condition.FilterStrategy;
import org.javarosa.core.model.condition.Recalculate;
import org.javarosa.core.model.condition.Triggerable;
import org.javarosa.core.model.instance.AbstractTreeElement;
Expand Down Expand Up @@ -101,9 +101,9 @@ public interface EventNotifierAccessor {
private Map<TreeReference, QuickTriggerable> relevancePerRepeat = new HashMap<>();

private boolean predicateCaching = true;
private final PredicateFilter cachingPredicateFilter = new CompareChildToAbsoluteExpressionFilter();
private final PredicateFilter indexPredicateFilter = new IndexPredicateFilter();
private final Queue<PredicateFilter> customPredicateFilters = new LinkedList<>();
private final FilterStrategy comparisonExpressionCacheFilterStrategy = new ComparisonExpressionCacheFilterStrategy();
private final FilterStrategy equalityExpressionIndexFilterStrategy = new EqualityExpressionIndexFilterStrategy();
private final Queue<FilterStrategy> customFilterStrategies = new LinkedList<>();

TriggerableDag(EventNotifierAccessor accessor) {
this.accessor = accessor;
Expand Down Expand Up @@ -526,9 +526,9 @@ private Set<QuickTriggerable> doEvaluateTriggerables(FormInstance mainInstance,

EvaluationContext context;
if (predicateCaching) {
List<PredicateFilter> filters = Stream.concat(
customPredicateFilters.stream(),
Stream.of(indexPredicateFilter, cachingPredicateFilter, new IdempotentPredicateCache())
List<FilterStrategy> filters = Stream.concat(
customFilterStrategies.stream(),
Stream.of(equalityExpressionIndexFilterStrategy, comparisonExpressionCacheFilterStrategy, new IdempotentExpressionCacheFilterStrategy())
).collect(Collectors.toList());

context = new EvaluationContext(evalContext, filters);
Expand Down Expand Up @@ -751,7 +751,7 @@ public void disablePredicateCaching() {
this.predicateCaching = false;
}

public void addPredicateFilter(PredicateFilter predicateFilter) {
customPredicateFilters.add(predicateFilter);
public void addFilterStrategy(FilterStrategy filterStrategy) {
customFilterStrategies.add(filterStrategy);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ public class EvaluationContext {
private DataInstance instance;
private int[] predicateEvaluationProgress;

private static final List<PredicateFilter> DEFAULT_PREDICATE_FILTER_CHAIN = singletonList(new XPathEvalPredicateFilter());
private List<PredicateFilter> predicateFilterChain = DEFAULT_PREDICATE_FILTER_CHAIN;
private static final List<FilterStrategy> DEFAULT_FILTER_CHAIN = singletonList(new RawFilterStrategy());
private List<FilterStrategy> filterStrategyChain = DEFAULT_FILTER_CHAIN;

/**
* Copy Constructor
Expand All @@ -95,14 +95,14 @@ private EvaluationContext(EvaluationContext base) {
//invalidate this
currentContextPosition = base.currentContextPosition;

predicateFilterChain = base.predicateFilterChain;
filterStrategyChain = base.filterStrategyChain;
}

public EvaluationContext(EvaluationContext base, List<PredicateFilter> aroundPredicateFilterChain) {
public EvaluationContext(EvaluationContext base, List<FilterStrategy> beforeFilterStrategyChain) {
this(base);
this.predicateFilterChain = Stream.concat(
aroundPredicateFilterChain.stream(),
predicateFilterChain.stream()
this.filterStrategyChain = Stream.concat(
beforeFilterStrategyChain.stream(),
filterStrategyChain.stream()
).collect(Collectors.toList());
}

Expand Down Expand Up @@ -333,11 +333,11 @@ private void expandReferenceAccumulator(TreeReference sourceRef, DataInstance so
nodeSetRef.add(name, -1);

for (int i = 0; i < predicates.size(); i++) {
List<PredicateFilter> filterChain;
if (i == 0 && !isNested(nodeSetRef)) {
filterChain = predicateFilterChain;
List<FilterStrategy> filterChain;
if (i == 0 && hasNoPredicates(nodeSetRef)) {
filterChain = filterStrategyChain;
} else {
filterChain = DEFAULT_PREDICATE_FILTER_CHAIN;
filterChain = DEFAULT_FILTER_CHAIN;
}

List<TreeReference> passed = filterWithPredicate(
Expand All @@ -362,23 +362,23 @@ private void expandReferenceAccumulator(TreeReference sourceRef, DataInstance so
}
}

private static boolean isNested(TreeReference nodeSet) {
private static boolean hasNoPredicates(TreeReference nodeSet) {
for (int i = 1; i < nodeSet.size(); i++) {
if (nodeSet.getMultiplicity(i) > -1) {
return true;
return false;
}
}

return false;
return true;
}

@NotNull
private List<TreeReference> filterWithPredicate(DataInstance sourceInstance, TreeReference treeReference, XPathExpression predicate, List<TreeReference> children, List<PredicateFilter> filterChain) {
private List<TreeReference> filterWithPredicate(DataInstance sourceInstance, TreeReference treeReference, XPathExpression predicate, List<TreeReference> children, List<FilterStrategy> filterChain) {
return filterWithPredicate(sourceInstance, treeReference, predicate, children, 0, filterChain);
}

@NotNull
private List<TreeReference> filterWithPredicate(DataInstance sourceInstance, TreeReference treeReference, XPathExpression predicate, List<TreeReference> children, int i, List<PredicateFilter> filterChain) {
private List<TreeReference> filterWithPredicate(DataInstance sourceInstance, TreeReference treeReference, XPathExpression predicate, List<TreeReference> children, int i, List<FilterStrategy> filterChain) {
return filterChain.get(i).filter(sourceInstance, treeReference, predicate, children, this, () -> {
return filterWithPredicate(sourceInstance, treeReference, predicate, children, i + 1, filterChain);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import java.util.List;
import java.util.function.Supplier;

public interface PredicateFilter {
public interface FilterStrategy {

@NotNull
List<TreeReference> filter(@NotNull DataInstance sourceInstance,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import java.util.List;
import java.util.function.Supplier;

class XPathEvalPredicateFilter implements PredicateFilter {
class RawFilterStrategy implements FilterStrategy {

@NotNull
@Override
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/org/javarosa/form/api/FormEntryController.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import org.javarosa.core.model.GroupDef;
import org.javarosa.core.model.IFormElement;
import org.javarosa.core.model.QuestionDef;
import org.javarosa.core.model.condition.PredicateFilter;
import org.javarosa.core.model.condition.FilterStrategy;
import org.javarosa.core.model.data.IAnswerData;
import org.javarosa.core.model.instance.InvalidReferenceException;
import org.javarosa.core.model.instance.TreeElement;
Expand Down Expand Up @@ -351,7 +351,7 @@ public void disablePredicateCaching() {
model.getForm().disablePredicateCaching();
}

public void addPredicateFilter(PredicateFilter predicateFilter) {
model.getForm().addPredicateFilter(predicateFilter);
public void addFilterStrategy(FilterStrategy filterStrategy) {
model.getForm().addFilterStrategy(filterStrategy);
}
}

0 comments on commit 56ab10c

Please sign in to comment.