From e27d5967029f4f3da8889dd673ba516dcd9f3ac8 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sun, 16 Jun 2019 23:49:25 +0200 Subject: Plugin rework along with API rework: Enigma split from EnigmaProject; plugins now provide services configurable via a profile --- src/main/java/cuchaz/enigma/EnigmaProfile.java | 51 ++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/main/java/cuchaz/enigma/EnigmaProfile.java (limited to 'src/main/java/cuchaz/enigma/EnigmaProfile.java') diff --git a/src/main/java/cuchaz/enigma/EnigmaProfile.java b/src/main/java/cuchaz/enigma/EnigmaProfile.java new file mode 100644 index 0000000..9dc5ff2 --- /dev/null +++ b/src/main/java/cuchaz/enigma/EnigmaProfile.java @@ -0,0 +1,51 @@ +package cuchaz.enigma; + +import com.google.common.collect.ImmutableMap; +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; +import cuchaz.enigma.api.service.EnigmaServiceType; + +import javax.annotation.Nullable; +import java.io.Reader; +import java.util.Map; +import java.util.Optional; + +public final class EnigmaProfile { + public static final EnigmaProfile EMPTY = new EnigmaProfile(ImmutableMap.of()); + + private static final Gson GSON = new Gson(); + + @SerializedName("services") + private final Map serviceProfiles; + + private EnigmaProfile(Map serviceProfiles) { + this.serviceProfiles = serviceProfiles; + } + + public static EnigmaProfile parse(Reader reader) { + return GSON.fromJson(reader, EnigmaProfile.class); + } + + @Nullable + public Service getServiceProfile(EnigmaServiceType serviceType) { + return serviceProfiles.get(serviceType.key); + } + + public static class Service { + private final String id; + private final Map args; + + Service(String id, Map args) { + this.id = id; + this.args = args; + } + + public boolean matches(String id) { + return this.id.equals(id); + } + + public Optional getArgument(String key) { + return Optional.ofNullable(args.get(key)); + } + } +} -- cgit v1.2.3