From 96144fb10f4f30332d98a5b52b3e25cbce20440d Mon Sep 17 00:00:00 2001 From: Sebastian Bittrich <bittrich@hs-mittweida.de> Date: Fri, 14 Jun 2019 17:03:34 -0700 Subject: [PATCH] drops json filter definition in favor of text --- src/mol-io/writer/_spec/cif.spec.ts | 32 ++++++++--------------------- src/mol-io/writer/cif/encoder.ts | 21 +++++++++++-------- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/src/mol-io/writer/_spec/cif.spec.ts b/src/mol-io/writer/_spec/cif.spec.ts index 0b5a8de6c..11517de86 100644 --- a/src/mol-io/writer/_spec/cif.spec.ts +++ b/src/mol-io/writer/_spec/cif.spec.ts @@ -78,38 +78,22 @@ const filter_aware_encoder1 = CifWriter.createEncoder({ binary: true, binaryAutoClassifyEncoding: true }); -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' - } -])); +filter_aware_encoder1.setFilter(C.Category.filterOf('atom_site\n' + +'\n' + +'atom_site.Cartn_x\n' + +'atom_site.Cartn_y\n')); const filter_aware_encoder2 = CifWriter.createEncoder({ binary: true }); -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' - } -])); +filter_aware_encoder2.setFilter(C.Category.filterOf('!atom_site\n' + +'\n' + +'!other_fields.field2\n')); describe('filtering-config', () => { const decoded1 = process(filter_aware_encoder1); + console.log(decoded1.blocks[0]); const atom_site1 = decoded1.blocks[0].categories['atom_site']; const cartn_x1 = atom_site1.getField('Cartn_x'); const cartn_y1 = atom_site1.getField('Cartn_y'); diff --git a/src/mol-io/writer/cif/encoder.ts b/src/mol-io/writer/cif/encoder.ts index c8fa5f8ee..49c155632 100644 --- a/src/mol-io/writer/cif/encoder.ts +++ b/src/mol-io/writer/cif/encoder.ts @@ -140,22 +140,27 @@ export namespace Category { export type FilteringBehavior = 'whitelist' | 'blacklist'; - export function filterOf(directives: FilteringDirective[]): Filter { + export function filterOf(directives: string): 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); + for (let d of directives.split(/[\r\n]+/)) { + // allow for empty lines in config + if (d.length === 0) continue; + // 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 - if (field && !cat_whitelist.includes(d.categoryName)) { - cat_whitelist[cat_whitelist.length] = d.categoryName; + if (field && !cat_whitelist.includes(split[0])) { + cat_whitelist[cat_whitelist.length] = split[0]; } } -- GitLab