private Slot<TableFilter> computeFilter(FilterLevel filterLevel, ResourceId formId) { final Slot<TableFilter> parentFilter = computeParentFilter(filterLevel, formId); if(filterLevel == FilterLevel.BASE) { // Only apply parent visibility filter for subforms return parentFilter; } else { final Slot<TableFilter> permissionFilter = computePermissionFilter(formId); return new MemoizedSlot2<>(parentFilter, permissionFilter, new BiFunction<TableFilter, TableFilter, TableFilter>() { @Override public TableFilter apply(TableFilter parentFilter, TableFilter permissionFilter) { return parentFilter.intersection(permissionFilter); } }); } }
private Slot<ForeignKey> addForeignKey(FilterLevel filterLevel, JoinNode node) { Slot<ForeignKey> foreignKey = getTable(node.getLeftFormId()).addForeignKey(node.getReferenceField(), node.getRightFormId()); Slot<TableFilter> filter = getFilter(filterLevel, node.getLeftFormId()); return new MemoizedSlot2<>(foreignKey, filter, new BiFunction<ForeignKey, TableFilter, ForeignKey>() { @Override public ForeignKey apply(ForeignKey foreignKey, TableFilter filter) { return filter.apply(foreignKey); } }); }
private Slot<ColumnView> expandCalculatedField(NodeMatch node) { try { Slot<ColumnView> calculation = evaluateExpression(node.getCalculation()); FormulaNode relevanceFormula = tryParseRelevance(node); if(relevanceFormula == null) { return calculation; } else { return new MemoizedSlot2<>(calculation, evaluateExpression(relevanceFormula), new BiFunction<ColumnView, ColumnView, ColumnView>() { @Override public ColumnView apply(ColumnView calculation, ColumnView relevance) { return new RelevanceViewMask(calculation, relevance); } }); } } catch (FormulaException e) { LOGGER.log(Level.WARNING, "Exception in calculated field " + node.getFormClass().getId() + "." + node.getFieldComponent() + " = " + node.getCalculation() + ": " + e.getMessage(), e); return batch.addEmptyColumn(filterLevel, node.getFormClass()); } }