1
package org.herac.tuxguitar.gui.actions.file;
3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
6
import java.io.FileInputStream;
7
import java.io.FileOutputStream;
8
import java.io.InputStream;
10
import java.util.Iterator;
12
import org.herac.tuxguitar.gui.TuxGuitar;
13
import org.herac.tuxguitar.gui.util.ConfirmDialog;
14
import org.herac.tuxguitar.gui.util.FileChooser;
15
import org.herac.tuxguitar.gui.util.MessageDialog;
16
import org.herac.tuxguitar.io.base.TGFileFormat;
17
import org.herac.tuxguitar.io.base.TGFileFormatException;
18
import org.herac.tuxguitar.io.base.TGFileFormatManager;
19
import org.herac.tuxguitar.io.base.TGOutputStreamBase;
20
import org.herac.tuxguitar.io.base.TGSongExporter;
21
import org.herac.tuxguitar.io.base.TGSongImporter;
22
import org.herac.tuxguitar.song.managers.TGSongManager;
23
import org.herac.tuxguitar.song.models.TGSong;
25
public class FileActionUtils {
27
public static String getFileName(){
28
if (TuxGuitar.instance().getFileHistory().isNewFile() || !TuxGuitar.instance().getFileHistory().isLocalFile()) {
29
return chooseFileName();
31
String path = TuxGuitar.instance().getFileHistory().getCurrentFilePath();
32
String file = TuxGuitar.instance().getFileHistory().getCurrentFileName(FileChooser.DEFAULT_SAVE_FILENAME);
33
String fullPath = path + File.separator + file;
34
return ( isSuportedFormat(fullPath) ? fullPath : chooseFileName() );
37
public static String chooseFileName(){
38
String fileName = FileChooser.instance().save(TuxGuitar.instance().getShell(),TGFileFormatManager.instance().getOutputFormats());
39
if (fileName != null) {
40
if (!isSuportedFormat(fileName)) {
41
fileName += TGFileFormatManager.DEFAULT_EXTENSION;
43
if(!canWrite(fileName)){
50
public static String chooseFileName(TGFileFormat format){
51
String fileName = FileChooser.instance().save(TuxGuitar.instance().getShell(),format);
52
if (fileName != null && !canWrite(fileName)){
58
public static boolean isSuportedFormat(String path) {
60
int index = path.lastIndexOf(".");
62
Iterator it = TGFileFormatManager.instance().getOutputStreams();
64
TGOutputStreamBase writer = (TGOutputStreamBase)it.next();
65
if(writer.isSupportedExtension(path.substring(index))){
74
public static boolean canWrite(String fileName){
75
boolean canWrite = true;
76
File file = new File(fileName);
78
ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.overwrite-question"));
79
confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
80
if (confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO , ConfirmDialog.BUTTON_NO ) == ConfirmDialog.STATUS_NO) {
87
public static void open(final String fileName){
89
TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),new FileInputStream(fileName));
90
TuxGuitar.instance().fireNewSong(song,new File(fileName).toURI().toURL());
91
}catch (Throwable throwable) {
92
TuxGuitar.instance().newSong();
93
MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{fileName}),throwable));
97
public static void save(final String fileName){
99
TGSongManager manager = TuxGuitar.instance().getSongManager();
100
TGFileFormatManager.instance().getWriter().write(manager.getFactory(),manager.getSong(), fileName);
101
TuxGuitar.instance().fireSaveSong(new File(fileName).toURI().toURL());
102
} catch (Throwable throwable) {
103
MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.save.error", new String[]{fileName}),throwable));
107
public static void open(final URL url){
109
InputStream stream = (isLocalFile(url) ? url.openStream() : getInputStream(url.openStream()));
110
TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream);
111
TuxGuitar.instance().fireNewSong(song,url);
112
}catch (Throwable throwable) {
113
TuxGuitar.instance().newSong();
114
MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{url.toString()}),throwable));
118
public static void exportSong(TGSongExporter exporter, String path){
120
TGSongManager manager = TuxGuitar.instance().getSongManager();
121
exporter.exportSong(new FileOutputStream(new File(path)),manager.getSong());
122
} catch (Throwable throwable) {
123
MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.export.error", new String[]{path}),throwable));
127
public static void importSong(final TGSongImporter importer, String path){
129
TGSong song = importer.importSong(TuxGuitar.instance().getSongManager().getFactory(),new FileInputStream(new File(path)));
130
TuxGuitar.instance().fireNewSong(song,null);
131
}catch (Throwable throwable) {
132
TuxGuitar.instance().newSong();
133
MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.import.error", new String[]{path}),throwable));
137
private static boolean isLocalFile(URL url){
139
if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){
142
}catch(Throwable throwable){
143
throwable.printStackTrace();
148
private static InputStream getInputStream(InputStream in)throws Throwable {
149
ByteArrayOutputStream out = new ByteArrayOutputStream();
151
while((read = in.read()) != -1){
154
byte[] bytes = out.toByteArray();
158
return new ByteArrayInputStream(bytes);