Explorar el Código

lowercase string parameters, filtering directive object

Sebastian Bittrich hace 5 años
padre
commit
fe7e04f61b
Se han modificado 2 ficheros con 46 adiciones y 9 borrados
  1. 24 8
      src/mol-io/writer/_spec/cif.spec.ts
  2. 22 1
      src/mol-io/writer/cif/encoder.ts

+ 24 - 8
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);

+ 22 - 1
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 {