diff --git a/uk/ac/sanger/artemis/components/variant/IOUtils.java b/uk/ac/sanger/artemis/components/variant/IOUtils.java index dace8e28bdbd2be77471e10c96245223f1892b12..aba86072966c2d5117a00c264cee6a95fb884d56 100644 --- a/uk/ac/sanger/artemis/components/variant/IOUtils.java +++ b/uk/ac/sanger/artemis/components/variant/IOUtils.java @@ -213,24 +213,14 @@ class IOUtils else buffSeq = new StringBuffer(); + String basesStr = entryGroup.getBases().getSubSequence(marker.getRange(), direction); + writeOrView(null, name, sbeg, send, marker, writer, basesStr, buffSeq); for (int i = 0; i < vcfReaders.length; i++) { - String basesStr = entryGroup.getBases().getSubSequence(marker.getRange(), direction); + basesStr = entryGroup.getBases().getSubSequence(marker.getRange(), direction); basesStr = getAllBasesInRegion(vcfReaders[i], sbeg, send, basesStr, features, vcfView, marker.isForwardMarker()); - - StringBuffer header = new StringBuffer(name+" "); - header.append(sbeg+":"+send+ (marker.isForwardMarker() ? "" : " reverse")); - header.append(" (").append(vcfReaders[i].getName()).append(")"); - - if(view) // sequence viewer - { - buffSeq.append(">").append(header.toString()).append("\n"); - wrapString(basesStr, buffSeq); - buffSeq.append("\n"); - } - else // write to file - writeSequence(writer, header.toString(), basesStr); + writeOrView(vcfReaders[i], name, sbeg, send, marker, writer, basesStr, buffSeq); } if(writer != null) @@ -260,7 +250,8 @@ class IOUtils */ protected static void exportFasta(final VCFview vcfView, final FeatureVector features, - final boolean view) + final boolean view, + final EntryGroup entryGroup) { if(features.size () < 1) { @@ -285,17 +276,20 @@ class IOUtils AbstractVCFReader vcfReaders[] = vcfView.getVcfReaders(); JCheckBox single = new JCheckBox("Single FASTA", true); - JCheckBox combine = new JCheckBox("Combine feature sequences", true); + JCheckBox combineFeats = new JCheckBox("Combine feature sequences", true); Box yBox = Box.createVerticalBox(); if(!view && vcfReaders.length > 1) yBox.add(single); - yBox.add(combine); - + yBox.add(combineFeats); + String name = entryGroup.getActiveEntries().elementAt(0).getName(); try { if(!view) { - File f = getFile(vcfReaders[0].getFileName(), 1, suffix, yBox); + File newfile = new File( + getBaseDirectoryFromEntry(entryGroup.getActiveEntries().elementAt(0)), + name); + File f = getFile(newfile.getAbsolutePath(), 1, suffix, yBox); if(f == null) return; writer = new FileWriter(f); @@ -304,16 +298,34 @@ class IOUtils else JOptionPane.showMessageDialog(null, yBox, "View Option(s)", JOptionPane.INFORMATION_MESSAGE); + // reference sequence + StringBuffer buff = new StringBuffer(); + for (int j = 0; j < features.size() && (!view || j < MAXIMUM_SELECTED_FEATURES); j++) + { + Feature f = features.elementAt(j); + buff.append( f.getBases() ); + if(!combineFeats.isSelected()) + { + writeOrView(null, f, writer, buff, ""); + buff = new StringBuffer(); + } + } + if(combineFeats.isSelected()) + writeOrView(null, null, writer, buff, name); + if(writer != null && !single.isSelected()) + writer.close(); + + // for (int i = 0; i < vcfReaders.length; i++) { - if(!view && i > 0 && !single.isSelected()) + if(!view && !single.isSelected()) { File f = getFile(vcfReaders[i].getFileName(), vcfReaders.length, suffix, null); writer = new FileWriter(f); fastaFiles += f.getAbsolutePath()+"\n"; } - - StringBuffer buff = new StringBuffer(); + buff = new StringBuffer(); + for (int j = 0; j < features.size() && (!view || j < MAXIMUM_SELECTED_FEATURES); j++) { Feature f = features.elementAt(j); @@ -328,15 +340,15 @@ class IOUtils features, vcfView, f.isForwardFeature()) ); } - if(!combine.isSelected()) + if(!combineFeats.isSelected()) { - writeOrView(vcfReaders[i], f, writer, buff); + writeOrView(vcfReaders[i], f, writer, buff, ""); buff = new StringBuffer(); } } - if(combine.isSelected()) - writeOrView(vcfReaders[i], null, writer, buff); + if(combineFeats.isSelected()) + writeOrView(vcfReaders[i], null, writer, buff, ""); if(writer != null && !single.isSelected()) writer.close(); @@ -354,6 +366,26 @@ class IOUtils new MessageDialog (null, "Saved Files", fastaFiles, false); } + private static void writeOrView(AbstractVCFReader reader, + String seqName, int sbeg, int send, MarkerRange marker, + FileWriter writer, String basesStr, StringBuffer buff) throws IOException + { + StringBuffer header = new StringBuffer(); + if(reader != null) + header.append(reader.getName()); + header.append(" ").append(seqName).append(" "); + header.append(sbeg).append(":").append(send); + header.append((marker.isForwardMarker() ? "" : " reverse")); + + if(writer == null) // sequence viewer + { + buff.append(">").append(header.toString()).append("\n"); + wrapString(basesStr, buff); + } + else // write to file + writeSequence(writer, header.toString(), basesStr); + } + /** * Construct a header and write or view the sequence. * @param reader @@ -363,11 +395,12 @@ class IOUtils * @throws IOException */ private static void writeOrView(AbstractVCFReader reader, Feature f, - FileWriter writer, StringBuffer buff) + FileWriter writer, StringBuffer buff, String hdr) throws IOException { - StringBuffer header = new StringBuffer(); - header.append(reader.getName()).append(" "); + StringBuffer header = new StringBuffer(hdr); + if(reader != null) + header.append(reader.getName()).append(" "); if(f != null) { header.append(f.getSystematicName()).append(" "); @@ -381,7 +414,7 @@ class IOUtils { SequenceViewer viewer = new SequenceViewer ("Feature base viewer for feature(s)", false); - viewer.setSequence(header.toString(), buff.toString()); + viewer.setSequence(">"+header.toString(), buff.toString()); } else // write to file writeSequence(writer, header.toString(), buff.toString()); diff --git a/uk/ac/sanger/artemis/components/variant/VCFview.java b/uk/ac/sanger/artemis/components/variant/VCFview.java index 8c1c03d94c10e3a7aebb4e8be0657096c675064c..ea811ab7b49157fb0b05b74d2a7c27de87e02270 100644 --- a/uk/ac/sanger/artemis/components/variant/VCFview.java +++ b/uk/ac/sanger/artemis/components/variant/VCFview.java @@ -537,7 +537,7 @@ public class VCFview extends JPanel public void actionPerformed(ActionEvent e) { VCFview.this.setCursor(new Cursor(Cursor.WAIT_CURSOR)); - IOUtils.exportFasta(VCFview.this, selection.getAllFeatures(), false); + IOUtils.exportFasta(VCFview.this, selection.getAllFeatures(), false, entryGroup); VCFview.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } }); @@ -561,7 +561,7 @@ public class VCFview extends JPanel public void actionPerformed(ActionEvent e) { VCFview.this.setCursor(new Cursor(Cursor.WAIT_CURSOR)); - IOUtils.exportFasta(VCFview.this, selection.getAllFeatures(), true); + IOUtils.exportFasta(VCFview.this, selection.getAllFeatures(), true, entryGroup); VCFview.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } });