Skip to content
Snippets Groups Projects
Commit fe7e04f6 authored by Sebastian Bittrich's avatar Sebastian Bittrich
Browse files

lowercase string parameters, filtering directive object

parent 1a14720e
No related branches found
No related tags found
No related merge requests found
......@@ -78,18 +78,34 @@ const filter_aware_encoder1 = CifWriter.createEncoder({
binary: true,
binaryAutoClassifyEncoding: true
});
filter_aware_encoder1.setFilter(C.Category.whitelistBlacklistFilter(['atom_site'], // allow only category atom_site
[], // blacklist no categories
['atom_site.Cartn_x', 'atom_site.Cartn_y'], // for atom_site: allow only Cartn_x and Cartn_y
[])); // blacklist no fields
filter_aware_encoder1.setFilter(C.Category.filterOf([
{ // allow only category atom_site
categoryName: 'atom_site',
behavior: 'whitelist'
}, { // for atom_site: allow only Cartn_x and Cartn_y
categoryName: 'atom_site',
columnName: 'Cartn_x',
behavior: 'whitelist'
}, {
categoryName: 'atom_site',
columnName: 'Cartn_y',
behavior: 'whitelist'
}
]));
const filter_aware_encoder2 = CifWriter.createEncoder({
binary: true
});
filter_aware_encoder2.setFilter(C.Category.whitelistBlacklistFilter([],
['atom_site'], // ignore atom_site category
[],
['other_fields.field2'])); // exclude field2
filter_aware_encoder2.setFilter(C.Category.filterOf([
{ // ignore atom_site category
categoryName: 'atom_site',
behavior: 'blacklist'
}, { // exclude field2
categoryName: 'other_fields',
columnName: 'field2',
behavior: 'blacklist'
}
]));
describe('filtering-config', () => {
const decoded1 = process(filter_aware_encoder1);
......
......@@ -132,7 +132,28 @@ export namespace Category {
includeField(categoryName: string, fieldName: string): boolean,
}
export function whitelistBlacklistFilter(cat_whitelist: String[], cat_blacklist: String[], field_whitelist: String[], field_blacklist: String[]): Filter {
export interface FilteringDirective {
categoryName: string,
columnName?: string,
behavior: FilteringBehavior
}
export type FilteringBehavior = 'whitelist' | 'blacklist';
export function filterOf(directives: FilteringDirective[]): Filter {
const cat_whitelist: string[] = [];
const cat_blacklist: string[] = [];
const field_whitelist: string[] = [];
const field_blacklist: string[] = [];
for (const d of directives) {
const field = d.columnName;
const name = field ? d.categoryName + '.' + d.columnName : d.categoryName;
const list = d.behavior === 'whitelist' ? (field ? field_whitelist : cat_whitelist) : (field ? field_blacklist : cat_blacklist);
list[list.length] = name;
}
const wlcatcol = field_whitelist.map(it => it.split('.')[0]);
// blacklist has higher priority
return {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment