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