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