OSDN Git Service

2753a4f2651d4ee19e896b09d64ea721756aea5f
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / actions / SaveAction.java
1 package jp.sourceforge.stigmata.ui.swing.actions;
2
3 import java.awt.event.ActionEvent;
4 import java.io.BufferedOutputStream;
5 import java.io.File;
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;
11
12 import javax.swing.AbstractAction;
13 import javax.swing.JOptionPane;
14
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;
19
20 /**
21  * 
22  * @author Haruaki TAMADA
23  */
24 public class SaveAction extends AbstractAction{
25     private static final long serialVersionUID = 1427912047636729211L;
26
27     private AsciiDataWritable asciiWritable;
28     private BinaryDataWritable binaryWritable;
29     private StigmataFrame stigmata;
30     private String[] extensions;
31     private String description;
32
33     public SaveAction(StigmataFrame stigmata, AsciiDataWritable writable){
34         this.stigmata = stigmata;
35         this.asciiWritable = writable;
36     }
37
38     public SaveAction(StigmataFrame stigmata, BinaryDataWritable writable){
39         this.stigmata = stigmata;
40         this.binaryWritable = writable;
41     }
42
43     public void setExtensions(String[] extensions){
44         this.extensions = extensions;
45     }
46
47     public void setDescrpition(String description){
48         this.description = description;
49     }
50
51     @Override
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");
56         }
57         File file = stigmata.getSaveFile(extensions, description);
58         if(file != null){
59             String name = file.getName();
60             String format = name.substring(name.lastIndexOf('.') + 1, name.length());
61
62             OutputStream out = null;
63             PrintWriter writer = null;
64             try{
65                 if(asciiWritable != null){
66                     writer = new PrintWriter(new FileWriter(file));
67                     asciiWritable.writeAsciiData(writer, format);
68                 }
69                 else{
70                     out = new BufferedOutputStream(new FileOutputStream(file));
71                     binaryWritable.writeBinaryData(out, format);
72                 }
73             }catch(IOException ee){
74                 JOptionPane.showMessageDialog(
75                     stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
76                     JOptionPane.ERROR_MESSAGE
77                 );
78             }catch(UnsupportedFormatException ee){
79                 JOptionPane.showMessageDialog(
80                     stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
81                     JOptionPane.ERROR_MESSAGE
82                 );
83             }finally{
84                 if(out != null){
85                     try{
86                         out.close();
87                     } catch(IOException ee){
88                         throw new InternalError(ee.getMessage());
89                     }
90                 }
91                 if(writer != null){
92                     writer.close();
93                 }
94             }
95         }
96     }
97 }