OSDN Git Service

fixed findbugs warnings.
[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.IOException;
8 import java.io.OutputStream;
9 import java.io.OutputStreamWriter;
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 = new String[extensions.length];
45         System.arraycopy(extensions, 0, this.extensions, 0, extensions.length);
46     }
47
48     public void setDescrpition(String description){
49         this.description = description;
50     }
51
52     @Override
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");
57         }
58         File file = stigmata.getSaveFile(extensions, description);
59         if(file != null){
60             String name = file.getName();
61             String format = name.substring(name.lastIndexOf('.') + 1, name.length());
62
63             OutputStream out = null;
64             PrintWriter writer = null;
65             try{
66                 if(asciiWritable != null){
67                     writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
68                     asciiWritable.writeAsciiData(writer, format);
69                 }
70                 else{
71                     out = new BufferedOutputStream(new FileOutputStream(file));
72                     binaryWritable.writeBinaryData(out, format);
73                 }
74             }catch(IOException ee){
75                 JOptionPane.showMessageDialog(
76                     stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
77                     JOptionPane.ERROR_MESSAGE
78                 );
79             }catch(UnsupportedFormatException ee){
80                 JOptionPane.showMessageDialog(
81                     stigmata, ee.getMessage(), stigmata.getMessages().get("error.dialog.title"),
82                     JOptionPane.ERROR_MESSAGE
83                 );
84             }finally{
85                 if(out != null){
86                     try{
87                         out.close();
88                     } catch(IOException ee){
89                         throw new InternalError(ee.getMessage());
90                     }
91                 }
92                 if(writer != null){
93                     writer.close();
94                 }
95             }
96         }
97     }
98 }