Typesafe serialization of data
(replace ${reflectVersion}
with this version)
To add the dependency using Maven just add the following section to your dependencies:
<dependency>
<groupId>de.cubeisland.engine</groupId>
<artifactId>reflect</artifactId>
<version>${reflectVersion}</version>
</dependency>
To add the dependency using Gradle just add the following line to your dependencies:
compile 'de.cubeisland.engine:reflect:${reflectVersion}'
Using this library with Android is a little more difficult as the snakeyaml dependency doesn't work with Android. Nevertheless you can use it by following these steps:
-
download the snakeyaml-android.jar from this page: snakeyaml-android
-
copy the file to your project/module
-
add the following section to your dependencies:
- Maven:
<dependency> <groupId>de.cubeisland.engine</groupId> <artifactId>reflect</artifactId> <version>${reflectVersion}</version> <exclusions> <exclusion> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> </exclusion> </exclusions> </dependency> <dependency> <artifactId>org.yaml</artifactId> <groupId>snakeyaml</groupId> <version>1.14</version> <scope>system</scope> <systemPath>${basedir}/RELATIVE_PATH_TO_SNAKEYAML_ANDROID_JAR</systemPath> </dependency>
- Gradle:
compile ('de.cubeisland.engine:reflect:${reflectVersion}') { exclude group: 'org.yaml', module: 'snakeyaml' } compile files('RELATIVE_PATH_TO_SNAKEYAML_ANDROID_JAR')
(Please note: edit the "RELATIVE_PATH_TO_SNAKEYAML_ANDROID_JAR" part!)
public class ExamplePlugin extends JavaPlugin
{
// Create the Factory
private Reflector factory = new Reflector();
private MyConfig config;
public void onEnable()
{
File file = new File(this.getDataFolder(), "config.yml");
// load the reflected using the factory (this will also save after loading)
config = factory.load(MyConfig.class, file);
// at any time you can reload the reflected object
config.reload(); // this will also save the reflected object!
// or save the reflected object
config.save();
}
// The Reflected Class
public class MyConfig extends ReflectedYaml // this is the same as extends Reflected<YamlCodec>
{
public transient boolean noSaving; // fields that are transient are ignored
// the path is generated from the field: lots-of-saving
public boolean lotsOfSaving = true; // set default values (will be set if not loaded OR field is missing in file)
@Name("default")
public String defaultString = "You can define the path with an annotation instead. e.g. if you want to use \"default\"";
// path will be: sub.section
@Comment({"You can comment every field.","Even with multiple lines\nand this linebreak works too"})
public SubSection sub_section; // You do not NEED to set the default here ; it is done automatically
// You can use sections instead of setting the whole path for every field
public class SubSection implements Section
{
// path will be: sub.section.an-int
public int anInt = 42;
// path will be: sub.section.a-long
public long aLong = 666;
}
}
}