001package com.plivo.api; 002 003import com.fasterxml.jackson.core.JsonGenerator; 004import com.fasterxml.jackson.core.JsonParser; 005import com.fasterxml.jackson.core.JsonProcessingException; 006import com.fasterxml.jackson.databind.BeanDescription; 007import com.fasterxml.jackson.databind.DeserializationConfig; 008import com.fasterxml.jackson.databind.DeserializationContext; 009import com.fasterxml.jackson.databind.JavaType; 010import com.fasterxml.jackson.databind.JsonDeserializer; 011import com.fasterxml.jackson.databind.SerializerProvider; 012import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier; 013import com.fasterxml.jackson.databind.module.SimpleModule; 014import com.fasterxml.jackson.databind.ser.std.StdSerializer; 015import okhttp3.OkHttpClient; 016 017import java.io.IOException; 018 019public class PhloRestClient { 020 021 protected static String BASE_URL = "https://phlorunner.plivo.com/v1/"; 022 private SimpleModule simpleModule = new SimpleModule(); 023 private final PlivoClient client; 024 025 { 026 simpleModule.setDeserializerModifier(new BeanDeserializerModifier() { 027 @Override 028 public JsonDeserializer<?> modifyEnumDeserializer(DeserializationConfig config, JavaType type, 029 BeanDescription beanDesc, JsonDeserializer<?> deserializer) { 030 return new JsonDeserializer<Enum>() { 031 @Override 032 public Enum deserialize(JsonParser jp, DeserializationContext ctxt) 033 throws IOException, JsonProcessingException { 034 Class<? extends Enum> rawClass = (Class<Enum<?>>) type.getRawClass(); 035 return Enum.valueOf(rawClass, jp.getValueAsString().toUpperCase().replace("-", "_")); 036 } 037 }; 038 } 039 }); 040 simpleModule.addSerializer(Enum.class, new StdSerializer<Enum>(Enum.class) { 041 @Override 042 public void serialize(Enum value, JsonGenerator gen, SerializerProvider provider) 043 throws IOException { 044 gen.writeString(value.name().toLowerCase()); 045 } 046 }); 047 } 048 049 public PhloRestClient(String authId, String authToken) { 050 this.client = new PlivoClient(authId, authToken, new OkHttpClient.Builder(), BASE_URL, simpleModule); 051 } 052 053 public PhloRestClient(String authId, String authToken, OkHttpClient.Builder httpClientBuilder) { 054 this.client = new PlivoClient(authId, authToken, httpClientBuilder, BASE_URL, simpleModule); 055 } 056 057 public PlivoClient getClient() { 058 return client; 059 } 060}