From f8a7f1da9198b1f299e4f749152bf95c010a05cd Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Sun, 5 Nov 2017 17:10:09 +0100 Subject: [PATCH] domain server tweaks --- src/apps/domain-annotation-server/mapping.ts | 22 +++++++++++++++++--- src/apps/domain-annotation-server/schemas.ts | 7 +++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/apps/domain-annotation-server/mapping.ts b/src/apps/domain-annotation-server/mapping.ts index 4489cb959..42098a4ff 100644 --- a/src/apps/domain-annotation-server/mapping.ts +++ b/src/apps/domain-annotation-server/mapping.ts @@ -11,12 +11,17 @@ import { getCategoryInstanceProvider } from './utils' export default function create(allData: any) { const mols = Object.keys(allData); - if (!mols.length) return '#'; + const enc = createEncoder(); + enc.startDataBlock(mols[0]); + + if (!mols.length) return enc.getData(); const data = allData[mols[0]]; - const enc = createEncoder(); - enc.startDataBlock(mols[0]); + const sources = getSources(data); + if (!sources._rowCount) return enc.getData(); + + enc.writeCategory(getCategoryInstanceProvider(`pdbx_domain_annotation_sources`, sources)); for (const cat of Object.keys(S.categories)) { writeDomain(enc, getDomain(cat, (S.categories as any)[cat], data)); @@ -37,6 +42,17 @@ function writeDomain(enc: CIFEncoder<any>, domain: DomainAnnotation | undefined) enc.writeCategory(getCategoryInstanceProvider(`pdbx_${domain.name}_domain_mapping`, domain.mappings)); } +function getSources(data: any): Table<S.Sources> { + const rows: Table.Row<S.Sources>[] = []; + let id = 1; + for (const name of Object.keys(S.categories)) { + if (!data[name]) continue; + const row: Table.Row<S.Sources> = { id: id++, name, count: Object.keys(data[name]).length }; + if (row.count > 0) rows.push(row); + } + return Table.ofRows(S.Sources, rows); +} + function getMappings(startId: number, group_id: number, mappings: any): MappingRow[] { const rows: MappingRow[] = []; diff --git a/src/apps/domain-annotation-server/schemas.ts b/src/apps/domain-annotation-server/schemas.ts index 370bf1786..7b76600f0 100644 --- a/src/apps/domain-annotation-server/schemas.ts +++ b/src/apps/domain-annotation-server/schemas.ts @@ -8,6 +8,13 @@ import { Column } from 'mol-base/collections/database' import Type = Column.Type +export const Sources = { + id: Type.int, + name: Type.str, + count: Type.int +} +export type Sources = typeof Sources + export const Base = { id: Type.str, identifier: Type.str, -- GitLab