4a06d067cbd001f68162c4ad2537ab5dc1cb6b01
[instantlauncher.git] / src / main / java / eu / svjatoslav / instantlauncher / configuration / ConfigurationManager.java
1 package eu.svjatoslav.instantlauncher.configuration;
2
3 import com.esotericsoftware.yamlbeans.YamlReader;
4 import com.esotericsoftware.yamlbeans.YamlWriter;
5
6 import java.io.*;
7 import java.util.HashSet;
8
9 public class ConfigurationManager {
10
11     private static final String CONFIG_FILE_NAME = ".instantlauncher";
12     private Configuration configuration;
13
14     public ConfigurationManager() throws IOException {
15         initConfig();
16     }
17
18     public Configuration getConfiguration() {
19         return configuration;
20     }
21
22     private File getPropertiesFile() {
23         return new File(System.getProperty("user.home") + "/" + CONFIG_FILE_NAME);
24     }
25
26
27     private void initConfig() throws IOException {
28         final File propertiesFile = getPropertiesFile();
29         if (!propertiesFile.exists()) {
30             initDefaultConfiguration();
31             saveConfigFile();
32         } else
33             loadConfigFile(propertiesFile);
34     }
35
36     private void loadConfigFile(File propertiesFile) throws FileNotFoundException, com.esotericsoftware.yamlbeans.YamlException {
37         YamlReader reader = new YamlReader(new FileReader(propertiesFile));
38         configuration = reader.read(Configuration.class);
39         if (configuration == null) {
40             configuration = new Configuration();
41             configuration.fileAssociations = new HashSet<>();
42         }
43     }
44
45     private void saveConfigFile() throws IOException {
46         YamlWriter writer = new YamlWriter(new FileWriter(getPropertiesFile()));
47         writer.write(configuration);
48         writer.close();
49     }
50
51     private void registerFileAssociation(String fileRegex, String command) {
52         FileAssociation association = new FileAssociation(fileRegex, command);
53         configuration.fileAssociations.add(association);
54     }
55
56     private void initDefaultConfiguration() {
57         configuration.navigationRootPath = System.getProperty("user.home") + "/";
58         configuration.directoryOpenCommand = "nautilus -w {file}";
59
60         registerFileAssociation(".*\\.jpeg$", "eog {file}");
61         registerFileAssociation(".*\\.jpg$", "eog {file}");
62         registerFileAssociation(".*\\.png$", "eog {file}");
63         registerFileAssociation(".*\\.txt$", "emacs {file}");
64         registerFileAssociation(".*\\.org$", "emacs {file}");
65         registerFileAssociation(".*\\.avi$", "vlc {file}");
66         registerFileAssociation(".*\\.mp4$", "vlc {file}");
67         registerFileAssociation(".*\\.mkv$", "vlc {file}");
68     }
69 }