// Path: glin/src/main/java/org/loader/glin/Callback.java
// public abstract class Callback<T> {
// 
//     private Context mContext;
//     private ChanNode mAfterChanNode;
// 
//     public final void attach(Context ctx, ChanNode afterChanNode) {
//         mContext = ctx;
//         mAfterChanNode = afterChanNode;
//     }
// 
//     public final void afterResponse(Result<T> result, RawResult rawResult) {
//         mContext.setRawResult(rawResult);
//         mContext.setResult(result);
// 
//         if (mAfterChanNode != null) {
//             mAfterChanNode.exec(mContext);
//         }
//     }
// 
//     public abstract void onResponse(Result<T> result);
// }
// 
// Path: glin/src/main/java/org/loader/glin/RawResult.java
// public class RawResult {
//     private int statusCode;
//     private String message;
//     private String response;
// 
//     public RawResult() {}
// 
//     public RawResult(int statusCode, String message, String response) {
//         this.statusCode = statusCode;
//         this.message = message;
//         this.response = response;
//     }
// 
//     public int getStatusCode() {
//         return statusCode;
//     }
// 
//     public void setStatusCode(int statusCode) {
//         this.statusCode = statusCode;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public String getResponse() {
//         return response;
//     }
// 
//     public void setResponse(String response) {
//         this.response = response;
//     }
// }
// 
// Path: glin/src/main/java/org/loader/glin/Result.java
// public class Result<T> {
//     private boolean ok;
//     private String message;
//     private T result;
//     private int code;
//     private Object obj;
//     private boolean isCache;
// 
//     public boolean isOK() {
//         return ok;
//     }
// 
//     public void ok(boolean ok) {
//         this.ok = ok;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String mMessage) {
//         this.message = mMessage;
//     }
// 
//     public T getResult() {
//         return result;
//     }
// 
//     public void setResult(T mResult) {
//         this.result = mResult;
//     }
// 
//     public int getCode() {
//         return code;
//     }
// 
//     public void setCode(int code) {
//         this.code = code;
//     }
// 
//     public Object getObj() {
//         return obj;
//     }
// 
//     public void setObj(Object obj) {
//         this.obj = obj;
//     }
// 
//     public <V> V assertGetObj() {
//         return (V) getObj();
//     }
// 
//     public boolean isCache() {
//         return isCache;
//     }
// 
//     public void setCache(boolean cache) {
//         isCache = cache;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder();
//         sb.append("ok: ").append(ok).append("\n");
//         sb.append("message: ").append(message).append("\n");
//         sb.append("obj: ").append(obj).append("\n");
//         sb.append("result: ").append(result).append("\n");
//         sb.append("code: ").append(code).append("\n");
//         sb.append("is_cache: ").append(isCache);
// 
//         return sb.toString();
//     }
// }
// 
// Path: glin/src/main/java/org/loader/glin/cache/ICacheProvider.java
// public interface ICacheProvider {
//     /**
//      * get cache by key of {@link #getKey(String, String)}
//      * @param key key
//      * @param  klass type of data struct, see also {@link org.loader.glin.helper.Helper}
//      * @param isList is result a List
//      * @return cache data
//      */
//     <T> Result<T> get(String key, Class<T> klass, boolean isList);
// 
//     /**
//      * cache data
//      * @param key see {@link #getKey(String, String)}
//      * @param netResult the origin result
//      * @param result parsed result
//      */
//     <T> void put(String key, RawResult netResult, Result<T> result);
// 
//     /**
//      * provide the key
//      * @param url the request url
//      * @param params the request params, maybe key1=value1&key2=value2 while your request is POST, maybe null while your request is GET, maybe json string while your request is POST Json
//      * @return
//      */
//     String getKey(String url, String params);
// }
// 
// Path: glin/src/main/java/org/loader/glin/factory/ParserFactory.java
// public interface ParserFactory {
//     Parser getParser();
//     Parser getListParser();
// }
// 
// Path: glin/src/main/java/org/loader/glin/interceptor/IResultInterceptor.java
// public interface IResultInterceptor {
//     /**
//      * 是否拦截结果
//      * @param result
//      * @return true callback不会执行
//      */
//     boolean intercept(Result<?> result);
// }


import org.loader.glin.Callback;
import org.loader.glin.RawResult;
import org.loader.glin.Result;
import org.loader.glin.cache.ICacheProvider;
import org.loader.glin.factory.ParserFactory;
import org.loader.glin.interceptor.IResultInterceptor;
import java.util.List;
package org.loader.glin.helper;



/**
 * ClientHelper, useful when you convert response, cache your data and intercept your callback
 */
public final class ClientHelper {

    private ParserFactory mParserFactory;
    private ICacheProvider mCacheProvider;
// Path: glin/src/main/java/org/loader/glin/Callback.java
// public abstract class Callback<T> {
// 
//     private Context mContext;
//     private ChanNode mAfterChanNode;
// 
//     public final void attach(Context ctx, ChanNode afterChanNode) {
//         mContext = ctx;
//         mAfterChanNode = afterChanNode;
//     }
// 
//     public final void afterResponse(Result<T> result, RawResult rawResult) {
//         mContext.setRawResult(rawResult);
//         mContext.setResult(result);
// 
//         if (mAfterChanNode != null) {
//             mAfterChanNode.exec(mContext);
//         }
//     }
// 
//     public abstract void onResponse(Result<T> result);
// }
// 
// Path: glin/src/main/java/org/loader/glin/RawResult.java
// public class RawResult {
//     private int statusCode;
//     private String message;
//     private String response;
// 
//     public RawResult() {}
// 
//     public RawResult(int statusCode, String message, String response) {
//         this.statusCode = statusCode;
//         this.message = message;
//         this.response = response;
//     }
// 
//     public int getStatusCode() {
//         return statusCode;
//     }
// 
//     public void setStatusCode(int statusCode) {
//         this.statusCode = statusCode;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public String getResponse() {
//         return response;
//     }
// 
//     public void setResponse(String response) {
//         this.response = response;
//     }
// }
// 
// Path: glin/src/main/java/org/loader/glin/Result.java
// public class Result<T> {
//     private boolean ok;
//     private String message;
//     private T result;
//     private int code;
//     private Object obj;
//     private boolean isCache;
// 
//     public boolean isOK() {
//         return ok;
//     }
// 
//     public void ok(boolean ok) {
//         this.ok = ok;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String mMessage) {
//         this.message = mMessage;
//     }
// 
//     public T getResult() {
//         return result;
//     }
// 
//     public void setResult(T mResult) {
//         this.result = mResult;
//     }
// 
//     public int getCode() {
//         return code;
//     }
// 
//     public void setCode(int code) {
//         this.code = code;
//     }
// 
//     public Object getObj() {
//         return obj;
//     }
// 
//     public void setObj(Object obj) {
//         this.obj = obj;
//     }
// 
//     public <V> V assertGetObj() {
//         return (V) getObj();
//     }
// 
//     public boolean isCache() {
//         return isCache;
//     }
// 
//     public void setCache(boolean cache) {
//         isCache = cache;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder();
//         sb.append("ok: ").append(ok).append("\n");
//         sb.append("message: ").append(message).append("\n");
//         sb.append("obj: ").append(obj).append("\n");
//         sb.append("result: ").append(result).append("\n");
//         sb.append("code: ").append(code).append("\n");
//         sb.append("is_cache: ").append(isCache);
// 
//         return sb.toString();
//     }
// }
// 
// Path: glin/src/main/java/org/loader/glin/cache/ICacheProvider.java
// public interface ICacheProvider {
//     /**
//      * get cache by key of {@link #getKey(String, String)}
//      * @param key key
//      * @param  klass type of data struct, see also {@link org.loader.glin.helper.Helper}
//      * @param isList is result a List
//      * @return cache data
//      */
//     <T> Result<T> get(String key, Class<T> klass, boolean isList);
// 
//     /**
//      * cache data
//      * @param key see {@link #getKey(String, String)}
//      * @param netResult the origin result
//      * @param result parsed result
//      */
//     <T> void put(String key, RawResult netResult, Result<T> result);
// 
//     /**
//      * provide the key
//      * @param url the request url
//      * @param params the request params, maybe key1=value1&key2=value2 while your request is POST, maybe null while your request is GET, maybe json string while your request is POST Json
//      * @return
//      */
//     String getKey(String url, String params);
// }
// 
// Path: glin/src/main/java/org/loader/glin/factory/ParserFactory.java
// public interface ParserFactory {
//     Parser getParser();
//     Parser getListParser();
// }
// 
// Path: glin/src/main/java/org/loader/glin/interceptor/IResultInterceptor.java
// public interface IResultInterceptor {
//     /**
//      * 是否拦截结果
//      * @param result
//      * @return true callback不会执行
//      */
//     boolean intercept(Result<?> result);
// }


// Path: glin/src/main/java/org/loader/glin/helper/ClientHelper.java
import org.loader.glin.Callback;
import org.loader.glin.RawResult;
import org.loader.glin.Result;
import org.loader.glin.cache.ICacheProvider;
import org.loader.glin.factory.ParserFactory;
import org.loader.glin.interceptor.IResultInterceptor;
import java.util.List;

package org.loader.glin.helper;



/**
 * ClientHelper, useful when you convert response, cache your data and intercept your callback
 */
public final class ClientHelper {

    private ParserFactory mParserFactory;
    private ICacheProvider mCacheProvider;
    private IResultInterceptor mResultInterceptor;