public TableFilter intersection(TableFilter other) { if(isAllSelected()) { return other; } else if(other.isAllSelected()) { return this; } else { BitSet intersection = (BitSet)this.bitSet.clone(); intersection.and(other.bitSet); return new TableFilter(intersection); } }
@Override public ForeignKey apply(ForeignKey foreignKey, TableFilter filter) { return filter.apply(foreignKey); } });
public ForeignKey apply(ForeignKey foreignKey) { if(isAllSelected()) { return foreignKey; } else { return foreignKey.filter(getSelectedRows()); } }
@Test public void filtering() { // Build the unfiltered foreign key map // That maps row indexes to foreign keys ResourceId formId = ResourceId.valueOf("a00001"); JvmForeignKeyBuilder builder = new JvmForeignKeyBuilder(formId, new PendingSlot<ForeignKey>()); builder.onNext(new ReferenceValue(new RecordRef(formId, ResourceId.valueOf("s0272548382")))); builder.onNext(new ReferenceValue(new RecordRef(formId, ResourceId.valueOf("s0272548382")))); builder.onNext(new ReferenceValue(new RecordRef(formId, ResourceId.valueOf("s0362622291")))); builder.onNext(new ReferenceValue(new RecordRef(formId, ResourceId.valueOf("s0362622291")))); builder.onNext(new ReferenceValue(new RecordRef(formId, ResourceId.valueOf("s0890848243")))); builder.onNext(new ReferenceValue(new RecordRef(formId, ResourceId.valueOf("s0890848243")))); ForeignKey fkMap = builder.build(); // Now define a filter that includes only the 4th and 5th rows BitSet bitSet = new BitSet(); bitSet.set(4); bitSet.set(5); TableFilter filter = new TableFilter(bitSet); // Apply the filter to the ForeignKey map and verify the results ForeignKey filteredKey = filter.apply(fkMap); assertThat(filteredKey.getKey(0), equalTo("s0890848243")); assertThat(filteredKey.getKey(1), equalTo("s0890848243")); }
@Override public TableFilter apply(ColumnView columnView) { return new TableFilter(columnView); } });
@Override public Integer get() { if(value == null) { TableFilter filter = filterSlot.get(); if(filter.isAllSelected()) { value = countSlot.get(); } else { value = filter.getBitSet().cardinality(); } } return value; } }
@Override public TableFilter apply(TableFilter parentFilter, TableFilter permissionFilter) { return parentFilter.intersection(permissionFilter); } });
@Override public String toString() { if(isAllSelected()) { return "TableFilter{ALL}"; } else if(bitSet.isEmpty()) { return "TableFilter{NONE}"; } else { return "TableFilter{" + bitSet.cardinality() + "}"; } } }
@Override public TableFilter apply(ColumnView columnView) { return new TableFilter(columnView); } });
@Override public TableFilter get() { if(result == null) { BitSet bitSet = new BitSet(); PrimaryKeyMap parentKeyMap = parentKeySlot.get(); ColumnView parentView = parentIdSlot.get(); for (int i = 0; i < parentView.numRows(); i++) { String parentId = parentView.getString(i); bitSet.set(i, parentKeyMap.contains(parentId)); } result = new TableFilter(bitSet); } return result; } }
public ColumnView apply(ColumnView columnView) { if(isAllSelected()) { return columnView; } else if(bitSet.isEmpty()) { return new EmptyColumnView(columnView.getType(), 0); } else { return columnView.select(getSelectedRows()); } }
@Override public ColumnView get() { if(filtered == null) { filtered = filterSlot.get().apply(columnViewSlot.get()); } return filtered; } }