public Slot<ForeignKey> addForeignKey(FormulaNode referenceField, ResourceId rightFormId) { if(referenceField instanceof SymbolNode) { return addForeignKey(((SymbolNode) referenceField).getName(), rightFormId); } else { throw new UnsupportedOperationException("TODO: " + referenceField); } }
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); } }); }