From b1245134cc83a39aa16068f72e4a368e145e47ef Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Tue, 30 Nov 2010 11:07:17 +0000
Subject: [PATCH] add test for BCF file format

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@15131 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../artemis/components/variant/IOUtils.java   | 57 ++++++++++---------
 1 file changed, 30 insertions(+), 27 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/variant/IOUtils.java b/uk/ac/sanger/artemis/components/variant/IOUtils.java
index faaec10eb..7a00004fe 100644
--- a/uk/ac/sanger/artemis/components/variant/IOUtils.java
+++ b/uk/ac/sanger/artemis/components/variant/IOUtils.java
@@ -42,32 +42,7 @@ import uk.ac.sanger.artemis.io.Key;
 import net.sf.samtools.util.BlockCompressedInputStream;
 
 class IOUtils
-{
-
-  private static void writeHeader(final String fileName, final Writer writer)
-  {
-    try
-    {
-      FileInputStream fileStream = new FileInputStream(fileName);
-      BlockCompressedInputStream is = new BlockCompressedInputStream(fileStream);
-
-      int c;
-      int lc = -1;
-      
-      while((c = is.read()) >= 0)
-      {
-        if(lc == '\n' && c != '#')
-          break;
-        writer.write(c);
-      }
-      is.close();
-    }
-    catch (IOException e)
-    {
-      e.printStackTrace();
-    }
-  }
-  
+{ 
   /**
    * Write filtered uncompressed VCF. Uses the filter in VCFview to
    * determine if variants are written.
@@ -81,7 +56,6 @@ class IOUtils
                                  final VCFview vcfView,
                                  final FeatureVector features)
   {
-    writeHeader(vcfFileName, writer);
     try
     {
       TabixReader tr = new TabixReader(vcfFileName);
@@ -89,7 +63,10 @@ class IOUtils
       while ((line = tr.readLine()) != null)
       {
         if(line.startsWith("#"))
+        {
+          writer.write(line+'\n');
           continue;
+        }
         String parts[] = VCFview.tabPattern.split(line, 0);
         int basePosition = Integer.parseInt(parts[1]) + vcfView.getSequenceOffset(parts[0]);
         if( !vcfView.showVariant(parts[3], parts[4], features, basePosition, parts[5]) )
@@ -104,6 +81,12 @@ class IOUtils
     }
   }
   
+  /**
+   * Export as a VCF based on the filtering applied in the VCFview.
+   * @param entryGroup
+   * @param vcfFiles
+   * @param vcfView
+   */
   protected static void export(final EntryGroup entryGroup, 
                                final List<String> vcfFiles,
                                final VCFview vcfView)
@@ -141,5 +124,25 @@ class IOUtils
           "Error", JOptionPane.ERROR_MESSAGE);
     }
   }
+
+  /**
+   * Test if this is a BCF file.
+   * @param fileName
+   * @return
+   * @throws IOException
+   */
+  protected static boolean isBCF(String fileName) throws IOException
+  {
+    FileInputStream fis = new FileInputStream(fileName);
+    BlockCompressedInputStream is = new BlockCompressedInputStream(fis);
+    byte[] magic = new byte[4];
+    is.read(magic);
+    fis.close();
+    is.close();
+    String line = new String(magic);
+    if(line.equals("BCF\4"))
+      return true;
+    return false;
+  }
   
 }
\ No newline at end of file
-- 
GitLab