1 package eu.svjatoslav.instantlauncher.configuration;
3 import com.esotericsoftware.yamlbeans.YamlConfig;
4 import com.esotericsoftware.yamlbeans.YamlReader;
5 import com.esotericsoftware.yamlbeans.YamlWriter;
8 import java.util.HashSet;
10 public class ConfigurationManager {
12 private static final String CONFIG_FILE_NAME = ".instantlauncher";
13 private Configuration configuration;
15 public ConfigurationManager() throws IOException {
19 public Configuration getConfiguration() {
23 private File getPropertiesFile() {
24 return new File(System.getProperty("user.home") + "/" + CONFIG_FILE_NAME);
28 private void initConfig() throws IOException {
29 final File propertiesFile = getPropertiesFile();
30 if (!propertiesFile.exists()) {
31 initDefaultConfiguration();
33 loadConfigFile(propertiesFile);
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();
44 private void saveConfigFile() throws IOException {
45 YamlWriter writer = new YamlWriter(new FileWriter(getPropertiesFile()));
46 configureYaml(writer.getConfig());
47 writer.write(configuration);
51 private void configureYaml(YamlConfig config) {
52 config.setClassTag("configuration", Configuration.class);
53 config.setPropertyElementType(Configuration.class, "fileAssociations", FileAssociation.class);
56 private void registerFileAssociation(String fileRegex, String command) {
57 FileAssociation association = new FileAssociation(fileRegex, command);
58 configuration.fileAssociations.add(association);
61 private void initDefaultConfiguration() throws IOException {
62 configuration = new Configuration();
63 configuration.fileAssociations = new HashSet<>();
65 configuration.navigationRootPath = System.getProperty("user.home") + "/";
66 configuration.directoryOpenCommand = "nautilus -w {file}";
67 configuration.directoryTerminalOpenCommand = "gnome-terminal --working-directory={file}";
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}");