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 com.plivo.api.models.base.LogLevel;
016import okhttp3.OkHttpClient;
017
018import java.io.IOException;
019
020public class PhloRestClient {
021
022  protected static String BASE_URL = "https://phlorunner.plivo.com/v1/";
023  private SimpleModule simpleModule = new SimpleModule();
024  private final PlivoClient client;
025
026  {
027    simpleModule.setDeserializerModifier(new BeanDeserializerModifier() {
028      @Override
029      public JsonDeserializer<?> modifyEnumDeserializer(DeserializationConfig config, JavaType type,
030                                                        BeanDescription beanDesc, JsonDeserializer<?> deserializer) {
031        return new JsonDeserializer<Enum>() {
032          @Override
033          public Enum deserialize(JsonParser jp, DeserializationContext ctxt)
034            throws IOException, JsonProcessingException {
035            Class<? extends Enum> rawClass = (Class<Enum<?>>) type.getRawClass();
036            return Enum.valueOf(rawClass, jp.getValueAsString().toUpperCase().replace("-", "_"));
037          }
038        };
039      }
040    });
041    simpleModule.addSerializer(Enum.class, new StdSerializer<Enum>(Enum.class) {
042      @Override
043      public void serialize(Enum value, JsonGenerator gen, SerializerProvider provider)
044        throws IOException {
045        gen.writeString(value.name().toLowerCase());
046      }
047    });
048  }
049
050  public PhloRestClient(String authId, String authToken) {
051    this.client = new PlivoClient(authId, authToken, new OkHttpClient.Builder(), BASE_URL, simpleModule, LogLevel.NONE);
052  }
053
054  public PhloRestClient(String authId, String authToken, OkHttpClient.Builder httpClientBuilder) {
055    this.client = new PlivoClient(authId, authToken, httpClientBuilder, BASE_URL, simpleModule, LogLevel.NONE);
056  }
057
058  public PlivoClient getClient() {
059    return client;
060  }
061}