fixed text editor
[instantlauncher.git] / src / main / java / eu / svjatoslav / instantlauncher / FileAssociationManager.java
1 package eu.svjatoslav.instantlauncher;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.util.HashMap;
6
7 import eu.svjatoslav.commons.gui.dialog.ExceptionDialog;
8
9 public class FileAssociationManager {
10
11         private static final String TEXT_EDITOR = "emacs";
12
13     private static final String DOCUMENT_EDITOR = "lowriter";
14
15     private static final String SPREADSHEET_EDITOR = "localc";
16
17     private static final String FILE_INDICATOR = "<FILE>";
18
19     private static final String MUSIC_PLAYER = "clementine";
20
21     public static HashMap<String, String[]> extensionToApplication = new HashMap<String, String[]>();
22
23     /**
24      * @return <code>true</code> if file was opened. <code>false</code> if unknown file type.
25      */
26     public static boolean openFile(final File file) {
27
28         if (isLogFile(file.getName())){
29             runOpeningApplication(file, new String[] { "glogg", FILE_INDICATOR });
30                 return true;
31         }
32         
33         final String fileExtension = Utils.getFileExtension(file);
34
35         if (extensionToApplication.containsKey(fileExtension)) {
36             final String[] commands = extensionToApplication.get(fileExtension);
37             runOpeningApplication(file, commands);
38             return true;
39         } else
40             return false;
41
42     }
43
44         private static void runOpeningApplication(final File file, final String[] commands) {
45                 for (int i = 0; i < commands.length; i++)
46                     if (commands[i].equals(FILE_INDICATOR))
47                         commands[i] = file.getAbsolutePath();
48
49                 try {
50                     Runtime.getRuntime().exec(commands);
51                     InstantLauncher.exitProgram();
52
53                 } catch (final IOException e) {
54                     new ExceptionDialog(e);
55                 }
56         }
57
58         private static boolean isLogFile(String fileName) {
59                 if (fileName.endsWith(".out")) return true;
60                 if (fileName.endsWith(".log")) return true;
61                 if (fileName.contains(".log.")) return true;
62                 
63                 return false;
64         }
65
66     public FileAssociationManager() {
67
68         extensionToApplication.put("txt", new String[] { TEXT_EDITOR, FILE_INDICATOR });
69         extensionToApplication.put("xml", new String[] { TEXT_EDITOR, FILE_INDICATOR });
70         extensionToApplication.put("properties", new String[] { TEXT_EDITOR, FILE_INDICATOR });
71         extensionToApplication.put("ini", new String[] { TEXT_EDITOR, FILE_INDICATOR });
72         extensionToApplication.put("", new String[] { TEXT_EDITOR, FILE_INDICATOR });
73
74         extensionToApplication.put("jpg", new String[] { "eog", FILE_INDICATOR });
75         extensionToApplication.put("jpeg", new String[] { "eog", FILE_INDICATOR });
76         extensionToApplication.put("png", new String[] { "eog", FILE_INDICATOR });
77
78         extensionToApplication.put("pdf", new String[] { "evince", FILE_INDICATOR });
79
80         extensionToApplication.put("mp3", new String[] { "banshee", FILE_INDICATOR });
81         extensionToApplication.put("ogg", new String[] { "banshee", FILE_INDICATOR });
82
83         extensionToApplication.put("avi", new String[] { "vlc", FILE_INDICATOR });
84         extensionToApplication.put("mkv", new String[] { "vlc", FILE_INDICATOR });
85         extensionToApplication.put("ogv", new String[] { "vlc", FILE_INDICATOR });
86         extensionToApplication.put("mp4", new String[] { "vlc", FILE_INDICATOR });
87         extensionToApplication.put("flv", new String[] { "vlc", FILE_INDICATOR });
88         extensionToApplication.put("wmv", new String[] { "vlc", FILE_INDICATOR });
89
90         extensionToApplication.put("flac", new String[] { MUSIC_PLAYER, FILE_INDICATOR });
91         extensionToApplication.put("mp3", new String[] { MUSIC_PLAYER, FILE_INDICATOR });
92         extensionToApplication.put("ogg", new String[] { MUSIC_PLAYER, FILE_INDICATOR });
93         extensionToApplication.put("wav", new String[] { MUSIC_PLAYER, FILE_INDICATOR });
94
95         extensionToApplication.put("ods", new String[] { SPREADSHEET_EDITOR, FILE_INDICATOR });
96         extensionToApplication.put("xls", new String[] { SPREADSHEET_EDITOR, FILE_INDICATOR });
97         extensionToApplication.put("xlsx", new String[] { SPREADSHEET_EDITOR, FILE_INDICATOR });
98
99         extensionToApplication.put("docx", new String[] { DOCUMENT_EDITOR, FILE_INDICATOR });
100         extensionToApplication.put("doc", new String[] { DOCUMENT_EDITOR, FILE_INDICATOR });
101
102         extensionToApplication.put("desktop", new String[] { "run-desktop", FILE_INDICATOR });
103
104         extensionToApplication.put("log", new String[] { "glogg", FILE_INDICATOR });
105         extensionToApplication.put("out", new String[] { "glogg", FILE_INDICATOR });
106
107     }
108
109 }