package eu.svjatoslav.instantlauncher.configuration;
+import com.esotericsoftware.yamlbeans.YamlConfig;
import com.esotericsoftware.yamlbeans.YamlReader;
import com.esotericsoftware.yamlbeans.YamlWriter;
import java.io.*;
import java.util.HashSet;
-import java.util.Map;
public class ConfigurationManager {
private static final String CONFIG_FILE_NAME = ".instantlauncher";
-
- private boolean propertiesChanged = false;
-
- Configuration configuration;
+ private Configuration configuration;
public ConfigurationManager() throws IOException {
- initialize();
+ initConfig();
}
- private File getPropertiesFile() {
- return new File(System.getProperty("user.home") + "/" + CONFIG_FILE_NAME);
+ public Configuration getConfiguration() {
+ return configuration;
}
- public File getNavigationRootDirectory() {
- if (configuration.navigationRootPath == null){
- configuration.navigationRootPath = System.getProperty("user.home") + "/";
- propertiesChanged = true;
- registerDefaultAssociations();
- }
-
- return new File(configuration.navigationRootPath);
+ private File getPropertiesFile() {
+ return new File(System.getProperty("user.home") + "/" + CONFIG_FILE_NAME);
}
- private void initialize() throws IOException {
-
- loadIfFileExists();
- validatePropertiesFile();
-
- if (propertiesChanged) {
- saveFile();
- }
- }
-
- private void loadIfFileExists() throws IOException {
+ private void initConfig() throws IOException {
final File propertiesFile = getPropertiesFile();
- if (!propertiesFile.exists())
- return;
+ if (!propertiesFile.exists()) {
+ initDefaultConfiguration();
+ } else
+ loadConfigFile(propertiesFile);
+ }
+ private void loadConfigFile(File propertiesFile) throws IOException {
YamlReader reader = new YamlReader(new FileReader(propertiesFile));
+ configureYaml(reader.getConfig());
configuration = reader.read(Configuration.class);
- if (configuration == null) {
- configuration = new Configuration();
- configuration.fileAssociations = new HashSet<>();
- };
+ if (configuration == null)
+ initDefaultConfiguration();
}
- private void saveFile() throws IOException {
+ private void saveConfigFile() throws IOException {
YamlWriter writer = new YamlWriter(new FileWriter(getPropertiesFile()));
+ configureYaml(writer.getConfig());
writer.write(configuration);
writer.close();
}
- private void validatePropertiesFile() {
- getNavigationRootDirectory();
+ private void configureYaml(YamlConfig config) {
+ config.setClassTag("configuration", Configuration.class);
+ config.setPropertyElementType(Configuration.class, "fileAssociations", FileAssociation.class);
}
- private void registerFileAssociation(String fileRegex, String command){
+ private void registerFileAssociation(String fileRegex, String command) {
FileAssociation association = new FileAssociation(fileRegex, command);
configuration.fileAssociations.add(association);
- propertiesChanged = true;
}
- private void registerDefaultAssociations(){
- registerFileAssociation(".jpeg$", "eog {file}");
+ private void initDefaultConfiguration() throws IOException {
+ configuration = new Configuration();
+ configuration.fileAssociations = new HashSet<>();
+
+ configuration.navigationRootPath = System.getProperty("user.home") + "/";
+ configuration.directoryOpenCommand = "nautilus -w {file}";
+ configuration.directoryTerminalOpenCommand = "gnome-terminal --working-directory={file}";
+
+ registerFileAssociation(".*\\.jpeg$", "eog {file}");
+ registerFileAssociation(".*\\.jpg$", "eog {file}");
+ registerFileAssociation(".*\\.png$", "eog {file}");
+ registerFileAssociation(".*\\.txt$", "emacs {file}");
+ registerFileAssociation(".*\\.org$", "emacs {file}");
+ registerFileAssociation(".*\\.avi$", "vlc {file}");
+ registerFileAssociation(".*\\.mp4$", "vlc {file}");
+ registerFileAssociation(".*\\.mkv$", "vlc {file}");
+
+ saveConfigFile();
}
}