From c3fd9c03ee4e09e1b30f9c15ec5cbbf628075611 Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Thu, 10 Feb 2011 15:39:01 +0000
Subject: [PATCH] add option to show non-variants and provide file selection
 when exporting

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@15486 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../artemis/components/variant/IOUtils.java   | 33 ++++++++++++++++---
 .../artemis/components/variant/VCFFilter.java | 11 +++++++
 .../artemis/components/variant/VCFview.java   | 22 +++++++++++--
 3 files changed, 59 insertions(+), 7 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/variant/IOUtils.java b/uk/ac/sanger/artemis/components/variant/IOUtils.java
index 9b337790d..06843480c 100644
--- a/uk/ac/sanger/artemis/components/variant/IOUtils.java
+++ b/uk/ac/sanger/artemis/components/variant/IOUtils.java
@@ -23,6 +23,7 @@
  */
 package uk.ac.sanger.artemis.components.variant;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileWriter;
 import java.io.IOException;
@@ -30,12 +31,15 @@ import java.io.InputStream;
 import java.net.URL;
 import java.util.List;
 
+import javax.swing.JFileChooser;
+
 import uk.ac.sanger.artemis.EntryGroup;
 import uk.ac.sanger.artemis.Feature;
 import uk.ac.sanger.artemis.FeatureEnumeration;
 import uk.ac.sanger.artemis.FeatureKeyQualifierPredicate;
 import uk.ac.sanger.artemis.FeatureVector;
 import uk.ac.sanger.artemis.components.MessageDialog;
+import uk.ac.sanger.artemis.components.StickyFileChooser;
 import uk.ac.sanger.artemis.io.Key;
 
 import net.sf.samtools.util.BlockCompressedInputStream;
@@ -49,17 +53,18 @@ class IOUtils
    * @param vcfView
    * @param features
    */
-  protected static void writeVCF(final String vcfFileName, 
+  protected static File writeVCF(final String vcfFileName, 
                                  final VCFview vcfView,
                                  final FeatureVector features)
   {
     try
     {
-      FileWriter writer = new FileWriter(vcfFileName+".filter");
+      File filterFile = getFile(vcfFileName);
+      FileWriter writer = new FileWriter(filterFile);
       if(IOUtils.isBCF(vcfFileName))
       {
         BCFReader.writeVCF(writer, vcfFileName);
-        return;
+        return filterFile;
       }
       
       TabixReader tr = new TabixReader(vcfFileName);
@@ -79,13 +84,31 @@ class IOUtils
         writer.write(line+'\n');
       }
       writer.close();
+      return filterFile;
     }
     catch (IOException e)
     {
       e.printStackTrace();
+      return null;
     }
   }
   
+  private static File getFile(final String vcfFileName) throws IOException
+  {
+    final StickyFileChooser file_dialog = new StickyFileChooser();
+
+    file_dialog.setSelectedFile(new File(vcfFileName+".filter"));
+    file_dialog.setDialogTitle("Choose save file ...");
+    file_dialog.setDialogType(JFileChooser.SAVE_DIALOG);
+    final int status = file_dialog.showSaveDialog(null);
+
+    if(status != JFileChooser.APPROVE_OPTION ||
+       file_dialog.getSelectedFile() == null) 
+      return null;
+    
+    return file_dialog.getSelectedFile();
+  }
+  
   /**
    * Export as a VCF based on the filtering applied in the VCFview.
    * @param entryGroup
@@ -113,8 +136,8 @@ class IOUtils
     String filterFiles = "";
     for(int i=0; i<vcfFiles.size(); i++)
     {
-      IOUtils.writeVCF(vcfFiles.get(i), vcfView, features);
-      filterFiles += vcfFiles.get(i)+".filter\n";
+      File filterFile = IOUtils.writeVCF(vcfFiles.get(i), vcfView, features);
+      filterFiles += filterFile.getAbsolutePath()+"\n";
     }
 
     new MessageDialog (null, "Saved Files", filterFiles, false);
diff --git a/uk/ac/sanger/artemis/components/variant/VCFFilter.java b/uk/ac/sanger/artemis/components/variant/VCFFilter.java
index 72e425edd..a418497c5 100644
--- a/uk/ac/sanger/artemis/components/variant/VCFFilter.java
+++ b/uk/ac/sanger/artemis/components/variant/VCFFilter.java
@@ -112,6 +112,17 @@ public class VCFFilter extends JFrame
       }
     });
     
+    c.gridy = c.gridy + 1;
+    final JCheckBox showNonVariantMenu = new JCheckBox("Non-Varaints", vcfView.showNonVariants);
+    panel.add(showNonVariantMenu, c);
+    showNonVariantMenu.addActionListener(new ActionListener(){
+      public void actionPerformed(ActionEvent e)
+      {
+        vcfView.showNonVariants = showNonVariantMenu.isSelected();
+        vcfView.repaint();
+      }
+    });
+    
     if(vcfView.getEntryGroup() == null || vcfView.getEntryGroup().getAllFeaturesCount() == 0)
     {
       showSyn.setEnabled(false);
diff --git a/uk/ac/sanger/artemis/components/variant/VCFview.java b/uk/ac/sanger/artemis/components/variant/VCFview.java
index 19cd88e48..4e4258521 100644
--- a/uk/ac/sanger/artemis/components/variant/VCFview.java
+++ b/uk/ac/sanger/artemis/components/variant/VCFview.java
@@ -144,6 +144,7 @@ public class VCFview extends JPanel
   protected boolean showMultiAlleles = true;
   // show variants that do not overlap CDS
   protected boolean showNonOverlappings = true;
+  protected boolean showNonVariants = false;
   
   private boolean markAsNewStop = false;
   private JCheckBoxMenuItem markNewStops =
@@ -498,6 +499,9 @@ public class VCFview extends JPanel
     
     popup.addSeparator();
     
+    final JMenu export = new JMenu("Export");
+    popup.add(export);
+    
     final JMenuItem exportVCF = new JMenuItem("Export filtered VCF");
     exportVCF.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e)
@@ -507,7 +511,18 @@ public class VCFview extends JPanel
         VCFview.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
       }
     });
-    popup.add(exportVCF);
+    export.add(exportVCF);
+    
+    final JMenuItem exportFasta = new JMenuItem("Export FASTA");
+    exportFasta.addActionListener(new ActionListener(){
+      public void actionPerformed(ActionEvent e)
+      {
+        VCFview.this.setCursor(new Cursor(Cursor.WAIT_CURSOR));
+        //IOUtils.export(entryGroup, vcfFiles, VCFview.this);
+        VCFview.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+      }
+    });
+    
   }
 
   private static EntryGroup getReference(String reference)
@@ -954,7 +969,10 @@ public class VCFview extends JPanel
       return false;
     
     if(!showNonOverlappings && !isOverlappingFeature(features, basePosition))
-        return false;
+      return false;
+    
+    if(!showNonVariants && record.getAlt().equals("."))
+      return false;
     
     short isSyn = -1;
     markAsNewStop = false;
-- 
GitLab