Skip to content

Commit 745c505

Browse files
committed
Implemented support for serializing Enums, refactoring
1 parent d6a338b commit 745c505

12 files changed

+75
-12
lines changed

README.MD

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ maven {
2121
url = 'https://repo.mikigal.pl/releases'
2222
}
2323
24-
compile group: 'pl.mikigal', name: 'ConfigAPI', version: '1.2.5'
24+
compile group: 'pl.mikigal', name: 'ConfigAPI', version: '1.2.6'
2525
```
2626

2727
#### Maven
@@ -34,7 +34,7 @@ compile group: 'pl.mikigal', name: 'ConfigAPI', version: '1.2.5'
3434
<dependency>
3535
<groupId>pl.mikigal</groupId>
3636
<artifactId>ConfigAPI</artifactId>
37-
<version>1.2.5</version>
37+
<version>1.2.6</version>
3838
<scope>compile</scope>
3939
</dependency>
4040
```

build.gradle

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
}
55

66
group 'pl.mikigal'
7-
version '1.2.5'
7+
version '1.2.6'
88

99
publishing {
1010
repositories {
@@ -44,4 +44,8 @@ jar {
4444
from {
4545
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
4646
}
47-
}
47+
}
48+
49+
tasks.withType(Jar) {
50+
destinationDir = file("C:\\Users\\mikigal\\Desktop\\test\\plugins")
51+
}

src/main/java/pl/mikigal/config/serializer/Serializers.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import org.bukkit.potion.PotionEffect;
99
import pl.mikigal.config.exception.InvalidConfigException;
1010
import pl.mikigal.config.exception.MissingSerializerException;
11+
import pl.mikigal.config.serializer.bukkit.*;
12+
import pl.mikigal.config.serializer.java.EnumSerializer;
13+
import pl.mikigal.config.serializer.java.UUIDSerializer;
1114
import pl.mikigal.config.serializer.universal.UniversalArraySerializer;
1215
import pl.mikigal.config.serializer.universal.UniversalCollectionSerializer;
1316
import pl.mikigal.config.serializer.universal.UniversalMapSerializer;
@@ -31,11 +34,13 @@ public class Serializers {
3134
private static final Serializer UNIVERSAL_OBJECT_SERIALIZER = new UniversalObjectSerializer();
3235

3336
static {
37+
register(UUID.class, new UUIDSerializer());
38+
register(Enum.class, new EnumSerializer());
39+
3440
register(ItemStack.class, new ItemStackSerializer());
3541
register(Location.class, new LocationSerializer());
3642
register(ShapedRecipe.class, new ShapedRecipeSerializer());
3743
register(PotionEffect.class, new PotionEffectSerializer());
38-
register(UUID.class, new UUIDSerializer());
3944
register(Material.class, new MaterialSerializer());
4045
register(Biome.class, new BiomeSerializer());
4146

src/main/java/pl/mikigal/config/serializer/BiomeSerializer.java src/main/java/pl/mikigal/config/serializer/bukkit/BiomeSerializer.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
package pl.mikigal.config.serializer;
1+
package pl.mikigal.config.serializer.bukkit;
22

33
import org.bukkit.block.Biome;
44
import pl.mikigal.config.BukkitConfiguration;
5+
import pl.mikigal.config.serializer.Serializer;
56

67
/**
78
* Built-in serializer for Biome

src/main/java/pl/mikigal/config/serializer/ItemStackSerializer.java src/main/java/pl/mikigal/config/serializer/bukkit/ItemStackSerializer.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package pl.mikigal.config.serializer;
1+
package pl.mikigal.config.serializer.bukkit;
22

33
import org.bukkit.Material;
44
import org.bukkit.configuration.ConfigurationSection;
@@ -7,6 +7,8 @@
77
import org.bukkit.inventory.meta.ItemMeta;
88
import pl.mikigal.config.BukkitConfiguration;
99
import pl.mikigal.config.exception.InvalidConfigFileException;
10+
import pl.mikigal.config.serializer.Serializer;
11+
import pl.mikigal.config.serializer.Serializers;
1012
import pl.mikigal.config.util.ConversionUtils;
1113

1214
import java.util.ArrayList;

src/main/java/pl/mikigal/config/serializer/LocationSerializer.java src/main/java/pl/mikigal/config/serializer/bukkit/LocationSerializer.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
package pl.mikigal.config.serializer;
1+
package pl.mikigal.config.serializer.bukkit;
22

33
import org.bukkit.Bukkit;
44
import org.bukkit.Location;
55
import org.bukkit.World;
66
import org.bukkit.configuration.ConfigurationSection;
77
import pl.mikigal.config.BukkitConfiguration;
88
import pl.mikigal.config.exception.InvalidConfigFileException;
9+
import pl.mikigal.config.serializer.Serializer;
910
import pl.mikigal.config.util.ConversionUtils;
1011

1112
/**

src/main/java/pl/mikigal/config/serializer/MaterialSerializer.java src/main/java/pl/mikigal/config/serializer/bukkit/MaterialSerializer.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package pl.mikigal.config.serializer;
1+
package pl.mikigal.config.serializer.bukkit;
22

33
import org.bukkit.Location;
44
import org.bukkit.Material;
55
import pl.mikigal.config.BukkitConfiguration;
6+
import pl.mikigal.config.serializer.Serializer;
67

78
/**
89
* Built-in serializer for Material

src/main/java/pl/mikigal/config/serializer/PotionEffectSerializer.java src/main/java/pl/mikigal/config/serializer/bukkit/PotionEffectSerializer.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
package pl.mikigal.config.serializer;
1+
package pl.mikigal.config.serializer.bukkit;
22

33
import org.bukkit.potion.PotionEffect;
44
import org.bukkit.potion.PotionEffectType;
55
import pl.mikigal.config.BukkitConfiguration;
66
import pl.mikigal.config.exception.InvalidConfigFileException;
7+
import pl.mikigal.config.serializer.Serializer;
78

89
/**
910
* Built-in serializer for PotionEffect

src/main/java/pl/mikigal/config/serializer/ShapedRecipeSerializer.java src/main/java/pl/mikigal/config/serializer/bukkit/ShapedRecipeSerializer.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package pl.mikigal.config.serializer;
1+
package pl.mikigal.config.serializer.bukkit;
22

33
import org.bukkit.Material;
44
import org.bukkit.configuration.ConfigurationSection;
@@ -8,6 +8,8 @@
88
import pl.mikigal.config.BukkitConfiguration;
99
import pl.mikigal.config.ConfigAPI;
1010
import pl.mikigal.config.exception.InvalidConfigException;
11+
import pl.mikigal.config.serializer.Serializer;
12+
import pl.mikigal.config.serializer.Serializers;
1113
import pl.mikigal.config.util.ReflectionUtils;
1214

1315
import java.lang.reflect.Constructor;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package pl.mikigal.config.serializer.java;
2+
3+
import pl.mikigal.config.BukkitConfiguration;
4+
import pl.mikigal.config.exception.InvalidConfigException;
5+
import pl.mikigal.config.serializer.Serializer;
6+
7+
import java.lang.reflect.InvocationTargetException;
8+
import java.lang.reflect.Method;
9+
10+
/**
11+
* Built-in serializer for Enums
12+
* @see Enum
13+
* @see Serializer
14+
* @since 1.2.6
15+
* @author Mikołaj Gałązka
16+
*/
17+
public class EnumSerializer extends Serializer<Enum> {
18+
19+
@Override
20+
protected void saveObject(String path, Enum object, BukkitConfiguration configuration) {
21+
configuration.set(path + ".value", object.toString());
22+
configuration.set(path + ".type", object.getClass().getName());
23+
}
24+
25+
@Override
26+
public Enum deserialize(String path, BukkitConfiguration configuration) {
27+
String value = configuration.getString(path + ".value");
28+
String classPath = configuration.getString(path + ".type");
29+
Class<?> clazz;
30+
Method valueOfMethod;
31+
32+
try {
33+
clazz = Class.forName(classPath);
34+
valueOfMethod = clazz.getMethod("valueOf", String.class);
35+
} catch (ClassNotFoundException | NoSuchMethodException e) {
36+
throw new RuntimeException("An error occurred while deserializing class '" + classPath + "'", e);
37+
}
38+
39+
try {
40+
return (Enum<?>) valueOfMethod.invoke(null, value);
41+
} catch (IllegalAccessException | InvocationTargetException e) {
42+
throw new InvalidConfigException("Value " + value + " is not valid for type " + classPath, e);
43+
}
44+
}
45+
}

src/main/java/pl/mikigal/config/serializer/UUIDSerializer.java src/main/java/pl/mikigal/config/serializer/java/UUIDSerializer.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package pl.mikigal.config.serializer;
1+
package pl.mikigal.config.serializer.java;
22

33
import pl.mikigal.config.BukkitConfiguration;
4+
import pl.mikigal.config.serializer.Serializer;
45

56
import java.util.UUID;
67

src/main/resources/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)