From 9cc478de5574f3dc2d6183f13f9a74278aa22beb Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Sat, 4 Dec 2010 10:08:22 +0000
Subject: [PATCH] assign contents of VCFRecord in getParts()

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@15162 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../artemis/components/variant/BCFReader.java | 54 ++++++++++---------
 1 file changed, 28 insertions(+), 26 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/variant/BCFReader.java b/uk/ac/sanger/artemis/components/variant/BCFReader.java
index e8ebc4bb1..6998a27c8 100644
--- a/uk/ac/sanger/artemis/components/variant/BCFReader.java
+++ b/uk/ac/sanger/artemis/components/variant/BCFReader.java
@@ -178,18 +178,10 @@ class BCFReader
     byte[] str = new byte[slen];
     is.read(str);
 
-    String parts[] = getParts(str);
+    getParts(str, bcfRecord);
     
-    bcfRecord.ID  = parts[0];
-    bcfRecord.ref = parts[1];
-    bcfRecord.alt = parts[2];
-    String fmt = parts[parts.length-1];
-
-    if(formatPattern.matcher(fmt).matches())
-    {
-      bcfRecord.info = parts[parts.length-2];
-      bcfRecord.format = parts[parts.length-1];
-      
+    if(formatPattern.matcher(bcfRecord.format).matches())
+    {     
       int nc  = 3;
       if(bcfRecord.alt.equals("."))
         nc = 1;
@@ -214,40 +206,50 @@ class BCFReader
       }
       
     }
-    else
-      bcfRecord.info = parts[parts.length-1];
     
     return bcfRecord;
   }
   
   /**
-   * Make a string from the byte array. Expanding NULL padding.
+   * Make a string from the byte array (expanding NULL padding) to
+   * determine the parts:- ID+REF+ALT+FILTER+INFO+FORMAT.
    * @param b
    * @return
    */
-  private String[] getParts(byte[] b)
+  private void getParts(byte[] b, VCFRecord bcfRecord)
   {
     StringBuffer buff = new StringBuffer();
+
     for(int i=0; i<b.length; i++)
     {
-      if(i == 0 && b[i] == 0)
-      {
-        buff.append(". ");
-        continue;
-      }
-
       if(b[i] == 0)
       {
-        if(i > 0 && b[i-1] == 0 && b[i+1] == 0)
-          buff.append(".");
+        if(i == 0)
+        {
+          buff.append(". ");
+          continue;
+        }
+        
+        if(b[i-1] == 0 || (i < b.length-1 && b[i+1] == 0))
+        {
+          i++;
+          buff.append(" . ");
+        }
         else
           buff.append(" ");
+        continue;
       }
-      else
-        buff.append((char)b[i]);
+      buff.append((char)b[i]);
     }
     
-    return buff.toString().split(" ");
+    String parts[] = buff.toString().replace("  ", " ").split(" ");
+
+    bcfRecord.ID   = parts[0];
+    bcfRecord.ref  = parts[1];
+    bcfRecord.alt  = parts[2];
+    bcfRecord.filter = parts[3];
+    bcfRecord.info   = parts[4];
+    bcfRecord.format = parts[5];
   }
   
   /**
-- 
GitLab