1 package jp.sourceforge.stigmata.ui.swing.actions;
3 import java.awt.event.ActionEvent;
4 import java.io.BufferedOutputStream;
6 import java.io.FileOutputStream;
7 import java.io.FileWriter;
8 import java.io.IOException;
9 import java.io.OutputStream;
10 import java.io.PrintWriter;
12 import javax.swing.AbstractAction;
13 import javax.swing.JOptionPane;
15 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
16 import jp.sourceforge.stigmata.ui.swing.UnsupportedFormatException;
17 import jp.sourceforge.stigmata.utils.AsciiDataWritable;
18 import jp.sourceforge.stigmata.utils.BinaryDataWritable;
22 * @author Haruaki TAMADA
24 public class SaveAction extends AbstractAction{
25 private static final long serialVersionUID = 1427912047636729211L;
27 private AsciiDataWritable asciiWritable;
28 private BinaryDataWritable binaryWritable;
29 private StigmataFrame stigmata;
30 private String[] extensions;
31 private String description;
33 public SaveAction(StigmataFrame stigmata, AsciiDataWritable writable){
34 this.stigmata = stigmata;
35 this.asciiWritable = writable;
38 public SaveAction(StigmataFrame stigmata, BinaryDataWritable writable){
39 this.stigmata = stigmata;
40 this.binaryWritable = writable;
43 public void setExtensions(String[] extensions){
44 this.extensions = extensions;
47 public void setDescrpition(String description){
48 this.description = description;
52 public void actionPerformed(ActionEvent e){
53 if(extensions == null || description == null){
54 extensions = stigmata.getMessages().getArray("store.extensions");
55 description = stigmata.getMessages().get("store.description");
57 File file = stigmata.getSaveFile(extensions, description);
59 String name = file.getName();
60 String format = name.substring(name.lastIndexOf('.') + 1, name.length());
62 OutputStream out = null;
63 PrintWriter writer = null;
65 if(asciiWritable != null){
66 writer = new PrintWriter(new FileWriter(file));
67 asciiWritable.writeAsciiData(writer, format);
70 out = new BufferedOutputStream(new FileOutputStream(file));
71 binaryWritable.writeBinaryData(out, format);
73 }catch(IOException ee){
74 JOptionPane.showMessageDialog(
75 stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
76 JOptionPane.ERROR_MESSAGE
78 }catch(UnsupportedFormatException ee){
79 JOptionPane.showMessageDialog(
80 stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
81 JOptionPane.ERROR_MESSAGE
87 } catch(IOException ee){
88 throw new InternalError(ee.getMessage());