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.IOException;
8 import java.io.OutputStream;
9 import java.io.OutputStreamWriter;
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 = new String[extensions.length];
45 System.arraycopy(extensions, 0, this.extensions, 0, extensions.length);
48 public void setDescrpition(String description){
49 this.description = description;
53 public void actionPerformed(ActionEvent e){
54 if(extensions == null || description == null){
55 extensions = stigmata.getMessages().getArray("store.extensions");
56 description = stigmata.getMessages().get("store.description");
58 File file = stigmata.getSaveFile(extensions, description);
60 String name = file.getName();
61 String format = name.substring(name.lastIndexOf('.') + 1, name.length());
63 OutputStream out = null;
64 PrintWriter writer = null;
66 if(asciiWritable != null){
67 writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
68 asciiWritable.writeAsciiData(writer, format);
71 out = new BufferedOutputStream(new FileOutputStream(file));
72 binaryWritable.writeBinaryData(out, format);
74 }catch(IOException ee){
75 JOptionPane.showMessageDialog(
76 stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
77 JOptionPane.ERROR_MESSAGE
79 }catch(UnsupportedFormatException ee){
80 JOptionPane.showMessageDialog(
81 stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
82 JOptionPane.ERROR_MESSAGE
88 } catch(IOException ee){
89 throw new InternalError(ee.getMessage());