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