// Path: src/main/java/com/deswaef/twitch/api/oauth/domain/AccessTokenRequest.java
// public class AccessTokenRequest {
// 
//     private String client_id;
//     private String client_secret;
//     private String grant_type = "authorization_code";
//     private String redirect_uri;
//     private String code;
// 
//     public AccessTokenRequest copy(String code) {
//         return new AccessTokenRequest()
//                 .setClient_secret(this.client_secret)
//                 .setRedirect_uri(this.getRedirect_uri())
//                 .setClient_id(this.getClient_id())
//                 .setGrant_type(this.getGrant_type())
//                 .setCode(code);
//     }
// 
//     public String getClient_id() {
//         return client_id;
//     }
// 
//     public AccessTokenRequest setClient_id(String client_id) {
//         this.client_id = client_id;
//         return this;
//     }
// 
//     public String getClient_secret() {
//         return client_secret;
//     }
// 
//     public AccessTokenRequest setClient_secret(String client_secret) {
//         this.client_secret = client_secret;
//         return this;
//     }
// 
//     public String getGrant_type() {
//         return grant_type;
//     }
// 
//     public AccessTokenRequest setGrant_type(String grant_type) {
//         this.grant_type = grant_type;
//         return this;
//     }
// 
//     public String getRedirect_uri() {
//         return redirect_uri;
//     }
// 
//     public AccessTokenRequest setRedirect_uri(String redirect_uri) {
//         this.redirect_uri = redirect_uri;
//         return this;
//     }
// 
//     public String getCode() {
//         return code;
//     }
// 
//     public AccessTokenRequest setCode(String code) {
//         this.code = code;
//         return this;
//     }
// }
// 
// Path: src/main/java/com/deswaef/twitch/api/oauth/domain/AccessTokenResponse.java
// public class AccessTokenResponse {
// 
//     private AccessTokenResponseEnum status = AccessTokenResponseEnum.OK;
// 
//     public static AccessTokenResponse invalid_code() {
//         return new AccessTokenResponse()
//                 .setStatus(AccessTokenResponseEnum.INVALID_CODE);
//     }
// 
//     public static AccessTokenResponse forbidden() {
//         return new AccessTokenResponse()
//                 .setStatus(AccessTokenResponseEnum.FORBIDDEN);
//     }
// 
//     public static AccessTokenResponse unknown_issue() {
//         return new AccessTokenResponse()
//                 .setStatus(AccessTokenResponseEnum.UNKNOWN_ISSUE);
//     }
// 
// 
// 
//     private String access_token;
//     private String refresh_token;
//     private String[] scope;
// 
//     public String getAccess_token() {
//         return access_token;
//     }
// 
//     public AccessTokenResponse setAccess_token(String access_token) {
//         this.access_token = access_token;
//         return this;
//     }
// 
//     public String getRefresh_token() {
//         return refresh_token;
//     }
// 
//     public AccessTokenResponse setRefresh_token(String refresh_token) {
//         this.refresh_token = refresh_token;
//         return this;
//     }
// 
//     public AccessTokenResponseEnum getStatus() {
//         return status;
//     }
// 
//     public AccessTokenResponse setStatus(AccessTokenResponseEnum status) {
//         this.status = status;
//         return this;
//     }
// 
//     public String[] getScope() {
//         return scope;
//     }
// 
//     public AccessTokenResponse setScope(String[] scope) {
//         this.scope = scope;
//         return this;
//     }
// }


import com.deswaef.twitch.api.oauth.domain.AccessTokenRequest;
import com.deswaef.twitch.api.oauth.domain.AccessTokenResponse;
import retrofit.RestAdapter;
package com.deswaef.twitch.api.oauth;



/**
 * User: Quinten
 * Date: 16-9-2014
 * Time: 14:24
 *
 * @author Quinten De Swaef
 */
public class AccessTokenResource {

    private AccessTokenService accessTokenService;

    private AccessTokenRequest requestTemplate;

    public AccessTokenResource() {
        super();
        requestTemplate = new AccessTokenRequest();
    }

    public AccessTokenResponse requestToken(String accessCode) {
        try {
            return accessTokenService.requestToken(requestTemplate.copy(accessCode));
        } catch(Exception ex) {
// Path: src/main/java/com/deswaef/twitch/api/oauth/domain/AccessTokenRequest.java
// public class AccessTokenRequest {
// 
//     private String client_id;
//     private String client_secret;
//     private String grant_type = "authorization_code";
//     private String redirect_uri;
//     private String code;
// 
//     public AccessTokenRequest copy(String code) {
//         return new AccessTokenRequest()
//                 .setClient_secret(this.client_secret)
//                 .setRedirect_uri(this.getRedirect_uri())
//                 .setClient_id(this.getClient_id())
//                 .setGrant_type(this.getGrant_type())
//                 .setCode(code);
//     }
// 
//     public String getClient_id() {
//         return client_id;
//     }
// 
//     public AccessTokenRequest setClient_id(String client_id) {
//         this.client_id = client_id;
//         return this;
//     }
// 
//     public String getClient_secret() {
//         return client_secret;
//     }
// 
//     public AccessTokenRequest setClient_secret(String client_secret) {
//         this.client_secret = client_secret;
//         return this;
//     }
// 
//     public String getGrant_type() {
//         return grant_type;
//     }
// 
//     public AccessTokenRequest setGrant_type(String grant_type) {
//         this.grant_type = grant_type;
//         return this;
//     }
// 
//     public String getRedirect_uri() {
//         return redirect_uri;
//     }
// 
//     public AccessTokenRequest setRedirect_uri(String redirect_uri) {
//         this.redirect_uri = redirect_uri;
//         return this;
//     }
// 
//     public String getCode() {
//         return code;
//     }
// 
//     public AccessTokenRequest setCode(String code) {
//         this.code = code;
//         return this;
//     }
// }
// 
// Path: src/main/java/com/deswaef/twitch/api/oauth/domain/AccessTokenResponse.java
// public class AccessTokenResponse {
// 
//     private AccessTokenResponseEnum status = AccessTokenResponseEnum.OK;
// 
//     public static AccessTokenResponse invalid_code() {
//         return new AccessTokenResponse()
//                 .setStatus(AccessTokenResponseEnum.INVALID_CODE);
//     }
// 
//     public static AccessTokenResponse forbidden() {
//         return new AccessTokenResponse()
//                 .setStatus(AccessTokenResponseEnum.FORBIDDEN);
//     }
// 
//     public static AccessTokenResponse unknown_issue() {
//         return new AccessTokenResponse()
//                 .setStatus(AccessTokenResponseEnum.UNKNOWN_ISSUE);
//     }
// 
// 
// 
//     private String access_token;
//     private String refresh_token;
//     private String[] scope;
// 
//     public String getAccess_token() {
//         return access_token;
//     }
// 
//     public AccessTokenResponse setAccess_token(String access_token) {
//         this.access_token = access_token;
//         return this;
//     }
// 
//     public String getRefresh_token() {
//         return refresh_token;
//     }
// 
//     public AccessTokenResponse setRefresh_token(String refresh_token) {
//         this.refresh_token = refresh_token;
//         return this;
//     }
// 
//     public AccessTokenResponseEnum getStatus() {
//         return status;
//     }
// 
//     public AccessTokenResponse setStatus(AccessTokenResponseEnum status) {
//         this.status = status;
//         return this;
//     }
// 
//     public String[] getScope() {
//         return scope;
//     }
// 
//     public AccessTokenResponse setScope(String[] scope) {
//         this.scope = scope;
//         return this;
//     }
// }


// Path: src/main/java/com/deswaef/twitch/api/oauth/AccessTokenResource.java
import com.deswaef.twitch.api.oauth.domain.AccessTokenRequest;
import com.deswaef.twitch.api.oauth.domain.AccessTokenResponse;
import retrofit.RestAdapter;

package com.deswaef.twitch.api.oauth;



/**
 * User: Quinten
 * Date: 16-9-2014
 * Time: 14:24
 *
 * @author Quinten De Swaef
 */
public class AccessTokenResource {

    private AccessTokenService accessTokenService;

    private AccessTokenRequest requestTemplate;

    public AccessTokenResource() {
        super();
        requestTemplate = new AccessTokenRequest();
    }

    public AccessTokenResponse requestToken(String accessCode) {
        try {
            return accessTokenService.requestToken(requestTemplate.copy(accessCode));
        } catch(Exception ex) {
            return AccessTokenResponse.unknown_issue();