// Path: app/src/main/java/org/estgroup/phphub/api/TokenApi.java
// public interface TokenApi {
//     @FormUrlEncoded
//     @POST("/oauth/access_token")
//     Observable<Token> getToken(@Field("grant_type") @AuthType String authType,
//                                @Field("client_id") String clientId,
//                                @Field("client_secret") String clientSecret);
// 
//     @FormUrlEncoded
//     @POST("/oauth/access_token")
//     Observable<Token> getToken(@Field("grant_type") @AuthType String authType,
//                                @Field("client_id") String clientId,
//                                @Field("client_secret") String clientSecret,
//                                @Field("username") String username,
//                                @Field("login_token") String loginToken);
//     @FormUrlEncoded
//     @POST("/oauth/access_token")
//     Observable<Token> refreshToken(@Field("grant_type") @AuthType String authType,
//                                    @Field("client_id") String clientId,
//                                    @Field("client_secret") String clientSecret,
//                                    @Field("refresh_token") String refreshToken);
// }
// 
// Path: app/src/main/java/org/estgroup/phphub/api/entity/element/Token.java
// public class Token {
//     @SerializedName("access_token")
//     String token;
// 
//     @SerializedName("token_type")
//     String type;
// 
//     @SerializedName("expires_in")
//     int expires;
// 
//     @SerializedName("refresh_token")
//     String refreshToken;
// 
//     public String getToken() {
//         return token;
//     }
// 
//     public void setToken(String token) {
//         this.token = token;
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
//     public void setType(String type) {
//         this.type = type;
//     }
// 
//     public int getExpires() {
//         return expires;
//     }
// 
//     public void setExpires(int expires) {
//         this.expires = expires;
//     }
// 
//     public String getRefreshToken() {
//         return refreshToken;
//     }
// 
//     public void setRefreshToken(String refreshToken) {
//         this.refreshToken = refreshToken;
//     }
// }
// 
// Path: app/src/main/java/org/estgroup/phphub/common/base/BaseModel.java
// public abstract class BaseModel<T, R extends BaseModel> {
//     private T service;
// 
//     @Nullable
//     private TokenProvider tokenProvider;
// 
//     protected AuthRestAdapter authRestAdapter;
// 
//     private RequestInterceptorImpl requestInterceptor;
// 
//     private ThreadLocal<RequestInterceptorImpl> localRequestInterceptor = new ThreadLocal<>();
// 
//     public BaseModel(@NonNull Context context, @Nullable TokenProvider tokenProvider) {
//         this.tokenProvider = tokenProvider;
//         requestInterceptor = new RequestInterceptorImpl();
// 
//         this.authRestAdapter = new AuthRestAdapter.Builder()
//                             .setEndpoint(BuildConfig.ENDPOINT)
//                             .setRequestInterceptor(requestInterceptor)
//                             .build();
// 
//         this.service = authRestAdapter.create(context, TokenInterceptor.BEARER_TOKENINTERCEPTOR, getServiceClass());
//     }
// 
//     protected abstract Class<T> getServiceClass();
// 
//     public RequestInterceptorImpl asRequestInterceptor() {
//         return requestInterceptor;
//     }
// 
//     public R once() {
//         RequestInterceptorImpl requestInterceptor = localRequestInterceptor.get();
//         if (requestInterceptor == null) {
//             localRequestInterceptor.set(new RequestInterceptorImpl());
//         }
//         return (R) this;
//     }
// 
//     public R setToken(final String token) {
//         RequestInterceptorImpl requestInterceptor = localRequestInterceptor.get();
//         if (requestInterceptor != null) {
//             requestInterceptor.setTokenProvider(new TokenProvider() {
//                 @Override
//                 public String getToken() {
//                     return token;
//                 }
//             });
//         }
//         return (R) this;
//     }
// 
//     public R ignoreToken() {
//         RequestInterceptorImpl requestInterceptor = localRequestInterceptor.get();
//         if (requestInterceptor != null) {
//             requestInterceptor.setTokenProvider(null);
//         }
//         return (R) this;
//     }
// 
//     private TokenProvider TokenProvider() {
//         RequestInterceptorImpl requestInterceptor = localRequestInterceptor.get();
//         if (requestInterceptor != null) {
//             return requestInterceptor.getTokenProvider();
//         }
// 
//         return tokenProvider;
//     }
// 
//     public T getService() {
//         asRequestInterceptor().setTokenProvider(TokenProvider());
//         if (localRequestInterceptor.get() != null) {
//             localRequestInterceptor.remove();
//         }
//         return service;
//     }
// }
// 
// Path: app/src/main/java/org/estgroup/phphub/common/provider/TokenProvider.java
// public interface TokenProvider {
//     String getToken();
// }


import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.estgroup.phphub.BuildConfig;
import org.estgroup.phphub.api.TokenApi;
import org.estgroup.phphub.api.entity.element.Token;
import org.estgroup.phphub.common.base.BaseModel;
import org.estgroup.phphub.common.provider.TokenProvider;
import rx.Observable;
import static org.estgroup.phphub.common.qualifier.AuthType.*;
package org.estgroup.phphub.model;




public class TokenModel extends BaseModel<TokenApi, TokenModel> {
    public TokenModel(@NonNull Context context, @Nullable TokenProvider tokenProvider) {
        super(context, tokenProvider);
    }

    @Override
// Path: app/src/main/java/org/estgroup/phphub/api/TokenApi.java
// public interface TokenApi {
//     @FormUrlEncoded
//     @POST("/oauth/access_token")
//     Observable<Token> getToken(@Field("grant_type") @AuthType String authType,
//                                @Field("client_id") String clientId,
//                                @Field("client_secret") String clientSecret);
// 
//     @FormUrlEncoded
//     @POST("/oauth/access_token")
//     Observable<Token> getToken(@Field("grant_type") @AuthType String authType,
//                                @Field("client_id") String clientId,
//                                @Field("client_secret") String clientSecret,
//                                @Field("username") String username,
//                                @Field("login_token") String loginToken);
//     @FormUrlEncoded
//     @POST("/oauth/access_token")
//     Observable<Token> refreshToken(@Field("grant_type") @AuthType String authType,
//                                    @Field("client_id") String clientId,
//                                    @Field("client_secret") String clientSecret,
//                                    @Field("refresh_token") String refreshToken);
// }
// 
// Path: app/src/main/java/org/estgroup/phphub/api/entity/element/Token.java
// public class Token {
//     @SerializedName("access_token")
//     String token;
// 
//     @SerializedName("token_type")
//     String type;
// 
//     @SerializedName("expires_in")
//     int expires;
// 
//     @SerializedName("refresh_token")
//     String refreshToken;
// 
//     public String getToken() {
//         return token;
//     }
// 
//     public void setToken(String token) {
//         this.token = token;
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
//     public void setType(String type) {
//         this.type = type;
//     }
// 
//     public int getExpires() {
//         return expires;
//     }
// 
//     public void setExpires(int expires) {
//         this.expires = expires;
//     }
// 
//     public String getRefreshToken() {
//         return refreshToken;
//     }
// 
//     public void setRefreshToken(String refreshToken) {
//         this.refreshToken = refreshToken;
//     }
// }
// 
// Path: app/src/main/java/org/estgroup/phphub/common/base/BaseModel.java
// public abstract class BaseModel<T, R extends BaseModel> {
//     private T service;
// 
//     @Nullable
//     private TokenProvider tokenProvider;
// 
//     protected AuthRestAdapter authRestAdapter;
// 
//     private RequestInterceptorImpl requestInterceptor;
// 
//     private ThreadLocal<RequestInterceptorImpl> localRequestInterceptor = new ThreadLocal<>();
// 
//     public BaseModel(@NonNull Context context, @Nullable TokenProvider tokenProvider) {
//         this.tokenProvider = tokenProvider;
//         requestInterceptor = new RequestInterceptorImpl();
// 
//         this.authRestAdapter = new AuthRestAdapter.Builder()
//                             .setEndpoint(BuildConfig.ENDPOINT)
//                             .setRequestInterceptor(requestInterceptor)
//                             .build();
// 
//         this.service = authRestAdapter.create(context, TokenInterceptor.BEARER_TOKENINTERCEPTOR, getServiceClass());
//     }
// 
//     protected abstract Class<T> getServiceClass();
// 
//     public RequestInterceptorImpl asRequestInterceptor() {
//         return requestInterceptor;
//     }
// 
//     public R once() {
//         RequestInterceptorImpl requestInterceptor = localRequestInterceptor.get();
//         if (requestInterceptor == null) {
//             localRequestInterceptor.set(new RequestInterceptorImpl());
//         }
//         return (R) this;
//     }
// 
//     public R setToken(final String token) {
//         RequestInterceptorImpl requestInterceptor = localRequestInterceptor.get();
//         if (requestInterceptor != null) {
//             requestInterceptor.setTokenProvider(new TokenProvider() {
//                 @Override
//                 public String getToken() {
//                     return token;
//                 }
//             });
//         }
//         return (R) this;
//     }
// 
//     public R ignoreToken() {
//         RequestInterceptorImpl requestInterceptor = localRequestInterceptor.get();
//         if (requestInterceptor != null) {
//             requestInterceptor.setTokenProvider(null);
//         }
//         return (R) this;
//     }
// 
//     private TokenProvider TokenProvider() {
//         RequestInterceptorImpl requestInterceptor = localRequestInterceptor.get();
//         if (requestInterceptor != null) {
//             return requestInterceptor.getTokenProvider();
//         }
// 
//         return tokenProvider;
//     }
// 
//     public T getService() {
//         asRequestInterceptor().setTokenProvider(TokenProvider());
//         if (localRequestInterceptor.get() != null) {
//             localRequestInterceptor.remove();
//         }
//         return service;
//     }
// }
// 
// Path: app/src/main/java/org/estgroup/phphub/common/provider/TokenProvider.java
// public interface TokenProvider {
//     String getToken();
// }


// Path: app/src/main/java/org/estgroup/phphub/model/TokenModel.java
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.estgroup.phphub.BuildConfig;
import org.estgroup.phphub.api.TokenApi;
import org.estgroup.phphub.api.entity.element.Token;
import org.estgroup.phphub.common.base.BaseModel;
import org.estgroup.phphub.common.provider.TokenProvider;
import rx.Observable;
import static org.estgroup.phphub.common.qualifier.AuthType.*;

package org.estgroup.phphub.model;




public class TokenModel extends BaseModel<TokenApi, TokenModel> {
    public TokenModel(@NonNull Context context, @Nullable TokenProvider tokenProvider) {
        super(context, tokenProvider);
    }

    @Override
    protected Class<TokenApi> getServiceClass() {