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

drops json filter definition in favor of text

parent 3afe21a4
No related branches found
No related tags found
No related merge requests found
...@@ -78,38 +78,22 @@ const filter_aware_encoder1 = CifWriter.createEncoder({ ...@@ -78,38 +78,22 @@ const filter_aware_encoder1 = CifWriter.createEncoder({
binary: true, binary: true,
binaryAutoClassifyEncoding: true binaryAutoClassifyEncoding: true
}); });
filter_aware_encoder1.setFilter(C.Category.filterOf([ filter_aware_encoder1.setFilter(C.Category.filterOf('atom_site\n' +
{ // allow only category atom_site '\n' +
categoryName: 'atom_site', 'atom_site.Cartn_x\n' +
behavior: 'whitelist' 'atom_site.Cartn_y\n'));
}, { // 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.filterOf([ filter_aware_encoder2.setFilter(C.Category.filterOf('!atom_site\n' +
{ // ignore atom_site category '\n' +
categoryName: 'atom_site', '!other_fields.field2\n'));
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);
console.log(decoded1.blocks[0]);
const atom_site1 = decoded1.blocks[0].categories['atom_site']; const atom_site1 = decoded1.blocks[0].categories['atom_site'];
const cartn_x1 = atom_site1.getField('Cartn_x'); const cartn_x1 = atom_site1.getField('Cartn_x');
const cartn_y1 = atom_site1.getField('Cartn_y'); const cartn_y1 = atom_site1.getField('Cartn_y');
......
...@@ -140,22 +140,27 @@ export namespace Category { ...@@ -140,22 +140,27 @@ export namespace Category {
export type FilteringBehavior = 'whitelist' | 'blacklist'; export type FilteringBehavior = 'whitelist' | 'blacklist';
export function filterOf(directives: FilteringDirective[]): Filter { export function filterOf(directives: string): Filter {
const cat_whitelist: string[] = []; const cat_whitelist: string[] = [];
const cat_blacklist: string[] = []; const cat_blacklist: string[] = [];
const field_whitelist: string[] = []; const field_whitelist: string[] = [];
const field_blacklist: string[] = []; const field_blacklist: string[] = [];
for (const d of directives) { for (let d of directives.split(/[\r\n]+/)) {
const field = d.columnName; // allow for empty lines in config
const name = field ? d.categoryName + '.' + d.columnName : d.categoryName; if (d.length === 0) continue;
const list = d.behavior === 'whitelist' ? (field ? field_whitelist : cat_whitelist) : (field ? field_blacklist : cat_blacklist); // let ! denote blacklisted entries
const blacklist = /^!/.test(d);
if (blacklist) d = d.substr(1);
const split = d.split(/\./);
const field = split[1];
const list = blacklist ? (field ? field_blacklist : cat_blacklist) : (field ? field_whitelist : cat_whitelist);
list[list.length] = name; list[list.length] = d;
// ensure categories are aware about whitelisted columns // ensure categories are aware about whitelisted columns
if (field && !cat_whitelist.includes(d.categoryName)) { if (field && !cat_whitelist.includes(split[0])) {
cat_whitelist[cat_whitelist.length] = d.categoryName; cat_whitelist[cat_whitelist.length] = split[0];
} }
} }
......
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