package net.ocheyedan.wrk; import java.io.File; import java.io.IOException; import java.util.concurrent.atomic.AtomicReference; /** * User: blangel * Date: 6/29/12 * Time: 9:01 PM * * Parses the configuration file at {@literal ~/.wrk/config} * * { * color: true * } */ public final class Config { private static final class JsonFile { private final Boolean color; private final String editor; private final String editorOpts; private JsonFile() { this(null, null, null); } private JsonFile(Boolean color, String editor, String editorOpts) { this.color = color; this.editor = editor; this.editorOpts = editorOpts; } public Boolean getColor() { return color; } public String getEditor() { return editor; } public String getEditorOpts() { return editorOpts; } } private static final AtomicReference<String> editor = new AtomicReference<String>(); private static final AtomicReference<String> editorOpts = new AtomicReference<String>(); private static final Boolean defaultColor = true; private static final String defaultEditor = System.getProperty("wrk.editor"); private static final String defaultEmacsOpts = "-nw -Q"; private static final String defaultViOpts = ""; public static void init() { boolean color = true; try { File configFile = new File(String.format("%s%s%s%s%s", System.getProperty("user.home"), File.separator, ".wrk", File.separator, "config")); if (configFile.exists()) { JsonFile config = Json.mapper().readValue(configFile, JsonFile.class); color = (config.getColor() == null) || config.getColor(); editor.set(config.getEditor()); editorOpts.set(config.getEditorOpts()); } else { // set defaults for user String defaultEditorOpts = (defaultEditor.endsWith("emacs") ? defaultEmacsOpts : defaultViOpts); JsonFile defaultConfig = new JsonFile(defaultColor, defaultEditor, defaultEditorOpts); editor.set(defaultConfig.getEditor()); editorOpts.set(defaultConfig.getEditorOpts()); Json.mapper().writeValue(configFile, defaultConfig); } } catch (IOException ioe) { // ignore and take defaults } Output.init(color); } public static String getEditor() { return editor.get(); } public static String getEditorOpts() { return editorOpts.get(); } private Config() { } }