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({ ...@@ -78,18 +78,34 @@ const filter_aware_encoder1 = CifWriter.createEncoder({
binary: true, binary: true,
binaryAutoClassifyEncoding: true binaryAutoClassifyEncoding: true
}); });
filter_aware_encoder1.setFilter(C.Category.whitelistBlacklistFilter(['atom_site'], // allow only category atom_site filter_aware_encoder1.setFilter(C.Category.filterOf([
[], // blacklist no categories { // allow only category atom_site
['atom_site.Cartn_x', 'atom_site.Cartn_y'], // for atom_site: allow only Cartn_x and Cartn_y categoryName: 'atom_site',
[])); // blacklist no fields 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({ const filter_aware_encoder2 = CifWriter.createEncoder({
binary: true binary: true
}); });
filter_aware_encoder2.setFilter(C.Category.whitelistBlacklistFilter([], filter_aware_encoder2.setFilter(C.Category.filterOf([
['atom_site'], // ignore atom_site category { // ignore atom_site category
[], categoryName: 'atom_site',
['other_fields.field2'])); // exclude field2 behavior: 'blacklist'
}, { // exclude field2
categoryName: 'other_fields',
columnName: 'field2',
behavior: 'blacklist'
}
]));
describe('filtering-config', () => { describe('filtering-config', () => {
const decoded1 = process(filter_aware_encoder1); const decoded1 = process(filter_aware_encoder1);
......
...@@ -132,7 +132,28 @@ export namespace Category { ...@@ -132,7 +132,28 @@ export namespace Category {
includeField(categoryName: string, fieldName: string): boolean, 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]); const wlcatcol = field_whitelist.map(it => it.split('.')[0]);
// blacklist has higher priority // blacklist has higher priority
return { return {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment