package com.alorma.github.sdk.services.issues;
import com.alorma.github.sdk.bean.dto.response.Issue;
import com.alorma.github.sdk.bean.info.IssueInfo;
import com.alorma.github.sdk.services.client.GithubListClient;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import retrofit.RestAdapter;
/**
* Created by Bernat on 22/08/2014.
*/
public class GetIssuesClient extends GithubListClient<List<Issue>> {
private final Map<String, String> filter;
private final int page;
private IssueInfo issueInfo;
public GetIssuesClient() {
this(null, 0);
}
public GetIssuesClient(int page) {
this(null, page);
}
public GetIssuesClient(Map<String, String> filter) {
this(null, filter, 0);
}
public GetIssuesClient(Map<String, String> filter, int page) {
this(null, filter, page);
}
public GetIssuesClient(IssueInfo issueInfo, Map<String, String> filter) {
this(issueInfo, filter, 0);
}
public GetIssuesClient(IssueInfo issueInfo, Map<String, String> filter, int page) {
super();
this.issueInfo = issueInfo;
this.page = page;
this.filter = filter != null ? filter : new HashMap<>();
}
@Override
protected ApiSubscriber getApiObservable(RestAdapter restAdapter) {
return new ApiSubscriber() {
@Override
protected void call(RestAdapter restAdapter) {
IssuesService issuesService = restAdapter.create(IssuesService.class);
if (page == 0) {
if (issueInfo != null) {
issuesService.issues(issueInfo.repoInfo.owner, issueInfo.repoInfo.name, filter, this);
} else {
issuesService.issues(filter, this);
}
} else {
if (issueInfo != null) {
issuesService.issues(issueInfo.repoInfo.owner, issueInfo.repoInfo.name, filter, page,
this);
} else {
issuesService.issues(filter, page, this);
}
}
}
};
}
}