Updated documentation. Made configuration file more readable.
[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         } else
32             loadConfigFile(propertiesFile);
33     }
34
35     private void loadConfigFile(File propertiesFile) throws IOException {
36         YamlReader reader = new YamlReader(new FileReader(propertiesFile));
37         configuration = reader.read(Configuration.class);
38         if (configuration == null)
39             initDefaultConfiguration();
40     }
41
42     private void saveConfigFile() throws IOException {
43         YamlWriter writer = new YamlWriter(new FileWriter(getPropertiesFile()));
44         writer.getConfig().setClassTag("configuration",  Configuration.class);
45         writer.getConfig().setPropertyElementType(Configuration.class, "fileAssociations", FileAssociation.class);
46         writer.write(configuration);
47         writer.close();
48     }
49
50     private void registerFileAssociation(String fileRegex, String command) {
51         FileAssociation association = new FileAssociation(fileRegex, command);
52         configuration.fileAssociations.add(association);
53     }
54
55     private void initDefaultConfiguration() throws IOException {
56         configuration = new Configuration();
57         configuration.fileAssociations = new HashSet<>();
58
59         configuration.navigationRootPath = System.getProperty("user.home") + "/";
60         configuration.directoryOpenCommand = "nautilus -w {file}";
61         configuration.directoryTerminalOpenCommand = "gnome-terminal --working-directory={file}";
62
63         registerFileAssociation(".*\\.jpeg$", "eog {file}");
64         registerFileAssociation(".*\\.jpg$", "eog {file}");
65         registerFileAssociation(".*\\.png$", "eog {file}");
66         registerFileAssociation(".*\\.txt$", "emacs {file}");
67         registerFileAssociation(".*\\.org$", "emacs {file}");
68         registerFileAssociation(".*\\.avi$", "vlc {file}");
69         registerFileAssociation(".*\\.mp4$", "vlc {file}");
70         registerFileAssociation(".*\\.mkv$", "vlc {file}");
71
72         saveConfigFile();
73     }
74 }