// Path: app/src/main/java/proj/me/bitframedemo/beans/BaseResponse.java
// @JsonInclude(JsonInclude.Include.NON_NULL)
// @JsonPropertyOrder({
//         "status",
//         "message"
// })
// public class BaseResponse {
// 
//     @JsonProperty("status")
//     private int status;
//     @JsonProperty("message")
//     private String message;
// 
//     /**
//      * @return The status
//      */
//     @JsonProperty("status")
//     public int getStatus() {
//         return status;
//     }
// 
//     /**
//      * @param status The status
//      */
//     @JsonProperty("status")
//     public void setStatus(int status) {
//         this.status = status;
//     }
// 
//     /**
//      * @return The message
//      */
//     @JsonProperty("message")
//     public String getMessage() {
//         return message;
//     }
// 
//     /**
//      * @param message The message
//      */
//     @JsonProperty("message")
//     public void setMessage(String message) {
//         this.message = message;
//     }
// }


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import proj.me.bitframedemo.beans.BaseResponse;
import retrofit2.Converter;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
        retrofit = new Retrofit.Builder()
                .baseUrl("http://frame-node12345js.rhcloud.com/")
                .addConverterFactory(JacksonConverterFactory.create(objectMapper))
                .client(okHttpClient)
                .build();
    }

    public static RetrofitClient createClient(){
        if(retrofitClient != null) return retrofitClient;
        return retrofitClient = new RetrofitClient<>();
    }

    public T getRetrofitImpl(Class<T> classObj, int classId){
        if(implObject == null) implObject = new HashMap<>();
        else if(implObject.containsKey(classId)) return implObject.get(classId);
        T obj = retrofit.create(classObj);
        implObject.put(classId, obj);
        return obj;
    }

    public <V> String getJsonObject(V object){
        String jsonObj = null;
        try {
            jsonObj = objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return jsonObj;
    }

// Path: app/src/main/java/proj/me/bitframedemo/beans/BaseResponse.java
// @JsonInclude(JsonInclude.Include.NON_NULL)
// @JsonPropertyOrder({
//         "status",
//         "message"
// })
// public class BaseResponse {
// 
//     @JsonProperty("status")
//     private int status;
//     @JsonProperty("message")
//     private String message;
// 
//     /**
//      * @return The status
//      */
//     @JsonProperty("status")
//     public int getStatus() {
//         return status;
//     }
// 
//     /**
//      * @param status The status
//      */
//     @JsonProperty("status")
//     public void setStatus(int status) {
//         this.status = status;
//     }
// 
//     /**
//      * @return The message
//      */
//     @JsonProperty("message")
//     public String getMessage() {
//         return message;
//     }
// 
//     /**
//      * @param message The message
//      */
//     @JsonProperty("message")
//     public void setMessage(String message) {
//         this.message = message;
//     }
// }


// Path: app/src/main/java/proj/me/bitframedemo/network/RetrofitClient.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import proj.me.bitframedemo.beans.BaseResponse;
import retrofit2.Converter;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;

        retrofit = new Retrofit.Builder()
                .baseUrl("http://frame-node12345js.rhcloud.com/")
                .addConverterFactory(JacksonConverterFactory.create(objectMapper))
                .client(okHttpClient)
                .build();
    }

    public static RetrofitClient createClient(){
        if(retrofitClient != null) return retrofitClient;
        return retrofitClient = new RetrofitClient<>();
    }

    public T getRetrofitImpl(Class<T> classObj, int classId){
        if(implObject == null) implObject = new HashMap<>();
        else if(implObject.containsKey(classId)) return implObject.get(classId);
        T obj = retrofit.create(classObj);
        implObject.put(classId, obj);
        return obj;
    }

    public <V> String getJsonObject(V object){
        String jsonObj = null;
        try {
            jsonObj = objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return jsonObj;
    }

    public <V> V getErrorRespose(Class<V> classObj, Response<BaseResponse> response) throws IOException {