package org.seqcode.projects.seqview.components;
import java.io.File;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import org.seqcode.data.io.FASTAWriter;
import org.seqcode.genome.location.Region;
import org.seqcode.genome.location.StrandedRegion;
import java.awt.event.*;
public class SaveRegionsAsFasta implements Runnable {
private Collection<Region> regions;
private JTextField both, up, down;
public SaveRegionsAsFasta (Collection<Region> regions) {
this.regions = regions;
init();
}
public SaveRegionsAsFasta (Region r) {
regions = new ArrayList<Region>();
regions.add(r);
init();
}
public SaveRegionsAsFasta(Iterator<Region> r) {
regions = new ArrayList<Region>();
while (r.hasNext()) {
regions.add(r.next());
}
init();
}
public void init() {
final JPanel panel = new JPanel();
panel.setLayout(new GridLayout(6,2));
panel.add(new JLabel("Unstranded (eg Binding Events)"));
panel.add(new JPanel());
panel.add(new JLabel("bp to expand"));
panel.add(both = new JTextField());
panel.add(new JLabel("Stranded (eg Genes)"));
panel.add(new JPanel());
panel.add(new JLabel("bp to expand upstream"));
panel.add(up = new JTextField());
panel.add(new JLabel("bp to expand downstream"));
panel.add(down = new JTextField());
JButton ok, cancel;
panel.add(ok = new JButton("OK"));
panel.add(cancel = new JButton("Cancel"));
final JFrame frame = new JFrame();
final SaveRegionsAsFasta saver = this;
both.setText("0");
up.setText("0");
down.setText("0");
frame.getContentPane().add(panel);
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Thread t = new Thread(saver);
t.start();
frame.dispose();
}
});
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
frame.dispose();
}
});
frame.pack();
frame.setVisible(true);
}
public void run () {
JFileChooser chooser;
chooser = new JFileChooser(new File(System.getProperty("user.dir")));
int v = chooser.showSaveDialog(null);
if(v == JFileChooser.APPROVE_OPTION) {
File f = chooser.getSelectedFile();
int b = 0, u = 0, d = 0;
try {
b = Integer.parseInt(both.getText());
} catch (NumberFormatException ex) {}
try {
u = Integer.parseInt(up.getText());
} catch (NumberFormatException ex) {}
try {
d = Integer.parseInt(down.getText());
} catch (NumberFormatException ex) {}
try {
FASTAWriter fasta = new FASTAWriter(f.getAbsolutePath());
for (Region r : regions) {
if (r instanceof StrandedRegion) {
StrandedRegion sr = (StrandedRegion) r;
fasta.consume(sr.expand(u,d));
} else {
fasta.consume(r.expand(b,b));
}
}
fasta.finish();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}