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}