diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3cc77f8..4257bea 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,17 +5,10 @@ - - - - - - - - - - - + + + + - { + "keyToString": { + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "last_opened_file_path": "C:/Users/chris/Documents/HomeAuto/Confindibus", + "project.structure.last.edited": "Artifacts", + "project.structure.proportion": "0.0", + "project.structure.side.proportion": "0.2" } -}]]> +} @@ -74,20 +68,4 @@ - - - - - file://$PROJECT_DIR$/src/dev/asdf00/confidibus/Confidibus.java - 180 - - - file://$PROJECT_DIR$/src/dev/asdf00/confidibus/Confidibus.java - 252 - - - - \ No newline at end of file diff --git a/src/dev/asdf00/confidibus/Confidibus.java b/src/dev/asdf00/confidibus/Configurator.java similarity index 89% rename from src/dev/asdf00/confidibus/Confidibus.java rename to src/dev/asdf00/confidibus/Configurator.java index a03e142..0c7bca8 100644 --- a/src/dev/asdf00/confidibus/Confidibus.java +++ b/src/dev/asdf00/confidibus/Configurator.java @@ -1,6 +1,6 @@ package dev.asdf00.confidibus; -import dev.asdf00.confidibus.annotations.Config; +import dev.asdf00.confidibus.annotations.Configuration; import dev.asdf00.confidibus.annotations.Section; import dev.asdf00.confidibus.annotations.Value; @@ -18,19 +18,39 @@ import java.util.Iterator; /** * Helper class to initialize and read a configuration file. Call {@code init()} to parse the configuration file. *
- * The {@code configClass} needs to be annotated with @Config and @Section. It may contain inner classes annotated + * The {@code configClass} needs to be annotated with @Configuration and @Section. It may contain inner classes annotated * with @Section. Every value needs to be public, static and annotated with @Value. *
* This config only allows primitive types and strings. + *
+ *
+ * Example config class: + *
{@code
+ * @Configuration(path = "example.conf")
+ * @Section(title = "Example Configuration", comment = "This is an example")
+ * public class Config {
+ *     @Value(standard = "1")
+ *     public static int SIMPLE_VAL;
+ *
+ *     @Value(name = "VAR_NAME_IN_FILE", standard = "someDefaultValue")
+ *     public static String INTERNAL_VAR_NAME;
+ *
+ *     @Section(title = "subsection A")
+ *     public static class Subsection1 {
+ *         @Value(comment = "enables debug mode", standard = "false")
+ *         public static boolean DEBUG;
+ *     }
+ * }
+ * 
*/ -public class Confidibus { +public class Configurator { private final Class _class; private final PrintStream _debug; private StringBuilder sb = new StringBuilder(); private int indent = 0; - private Confidibus(Class configClass, PrintStream debugMsgStream) { + private Configurator(Class configClass, PrintStream debugMsgStream) { _class = configClass; _debug = debugMsgStream; } @@ -42,8 +62,8 @@ public class Confidibus { * @param debugMsgStream {@link PrintStream} where debug output shall be written to. * Can be {@code null} if no debug output should be written */ - public static Confidibus of(Class configClass, PrintStream debugMsgStream) { - return new Confidibus(configClass, debugMsgStream); + public static Configurator of(Class configClass, PrintStream debugMsgStream) { + return new Configurator(configClass, debugMsgStream); } /** @@ -51,7 +71,7 @@ public class Confidibus { * @param createIfMissing permission to create new config file if none is found */ public void init(boolean createIfMissing) { - Config cAnn = _class.getAnnotation(Config.class); + Configuration cAnn = _class.getAnnotation(Configuration.class); if (cAnn == null) { throw new ConfigurationException("missing @Config annotation for %s!", _class.getSimpleName()); } @@ -160,9 +180,9 @@ public class Confidibus { } String type = f.getType().equals(String.class) ? "String" : f.getType().getTypeName(); sb.append(" ".repeat(indent)).append('[').append(type).append("] ").append(name).append(": ") - .append(v._default()).append('\n'); - setConfigValue(f, v._default()); - printDebug("initialized %s(%s) with %s!", f.getName(), name, v._default()); + .append(v.standard()).append('\n'); + setConfigValue(f, v.standard()); + printDebug("initialized %s(%s) with %s!", f.getName(), name, v.standard()); } } for (Class subSection : section.getDeclaredClasses()) { diff --git a/src/dev/asdf00/confidibus/annotations/Config.java b/src/dev/asdf00/confidibus/annotations/Configuration.java similarity index 90% rename from src/dev/asdf00/confidibus/annotations/Config.java rename to src/dev/asdf00/confidibus/annotations/Configuration.java index 550d022..fbd7ed8 100644 --- a/src/dev/asdf00/confidibus/annotations/Config.java +++ b/src/dev/asdf00/confidibus/annotations/Configuration.java @@ -7,7 +7,7 @@ import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) -public @interface Config { +public @interface Configuration { /** * path of the configuration file */ diff --git a/src/dev/asdf00/confidibus/annotations/Value.java b/src/dev/asdf00/confidibus/annotations/Value.java index 848eb26..938182a 100644 --- a/src/dev/asdf00/confidibus/annotations/Value.java +++ b/src/dev/asdf00/confidibus/annotations/Value.java @@ -15,5 +15,5 @@ public @interface Value { */ String name() default ""; - String _default(); + String standard(); }