diff --git a/uk/ac/sanger/artemis/components/variant/IOUtils.java b/uk/ac/sanger/artemis/components/variant/IOUtils.java index 9b337790d467e647d9b48c4ebbe77512a398b033..06843480cb11da3989f822e52ebdba91f37bf84e 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 72e425edd20f22d490c3bfd1fe8764d0b48f35a7..a418497c554c1e3528ba7f94153d4b3dc2d4c307 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 19cd88e48ab4702a417349fcd97c6579de594af6..4e42585211dc99d9258e464ef3993eac2d0559be 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;