From fe7e04f61b5245f856dae5612f53d2eac2112859 Mon Sep 17 00:00:00 2001 From: Sebastian Bittrich <bittrich@hs-mittweida.de> Date: Fri, 7 Jun 2019 16:56:04 -0700 Subject: [PATCH] lowercase string parameters, filtering directive object --- src/mol-io/writer/_spec/cif.spec.ts | 32 +++++++++++++++++++++-------- src/mol-io/writer/cif/encoder.ts | 23 ++++++++++++++++++++- 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/mol-io/writer/_spec/cif.spec.ts b/src/mol-io/writer/_spec/cif.spec.ts index b0c3bfc61..0b5a8de6c 100644 --- a/src/mol-io/writer/_spec/cif.spec.ts +++ b/src/mol-io/writer/_spec/cif.spec.ts @@ -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); diff --git a/src/mol-io/writer/cif/encoder.ts b/src/mol-io/writer/cif/encoder.ts index 331e4184f..7a2daef68 100644 --- a/src/mol-io/writer/cif/encoder.ts +++ b/src/mol-io/writer/cif/encoder.ts @@ -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 { -- GitLab