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 cuchaz.enigma.translation.mapping.MappingFileNameFormat; import cuchaz.enigma.translation.mapping.MappingSaveParameters; 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; @SerializedName("mapping_save_parameters") private final MappingSaveParameters mappingSaveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF); 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 MappingSaveParameters getMappingSaveParameters() { return mappingSaveParameters; } 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 args != null ? Optional.ofNullable(args.get(key)) : Optional.empty(); } } }