package com.alorma.github.sdk.services.issues; import com.alorma.github.sdk.bean.info.RepoInfo; import com.alorma.github.sdk.services.client.BaseInfiniteCallback; import com.alorma.github.sdk.services.client.GithubClient; import core.issues.Label; import java.util.Collections; import java.util.Comparator; import java.util.List; import retrofit.RestAdapter; import rx.Observable; import rx.functions.Func1; public class GithubIssueLabelsClient extends GithubClient<List<Label>> { private RepoInfo repoInfo; private boolean sortAlphabetic = false; private Comparator<? super Label> NAME_SORT = new Comparator<Label>() { @Override public int compare(Label lhs, Label rhs) { return lhs.name.compareTo(rhs.name); } }; public GithubIssueLabelsClient(RepoInfo repoInfo) { super(); this.repoInfo = repoInfo; } public GithubIssueLabelsClient(RepoInfo repoInfo, boolean sortAlphabetic) { super(); this.repoInfo = repoInfo; this.sortAlphabetic = sortAlphabetic; } @Override protected Observable<List<Label>> getApiObservable(final RestAdapter restAdapter) { Observable<List<Label>> listObservable = Observable.create(new BaseInfiniteCallback<List<Label>>() { @Override public void execute() { IssuesService issueService = restAdapter.create(IssuesService.class); issueService.labels(repoInfo.owner, repoInfo.name, this); } @Override protected void executePaginated(int nextPage) { IssuesService issueService = restAdapter.create(IssuesService.class); issueService.labels(repoInfo.owner, repoInfo.name, nextPage, this); } }); if (!sortAlphabetic) { return listObservable; } else { return listObservable.map(new Func1<List<Label>, List<Label>>() { @Override public List<Label> call(List<Label> labels) { Collections.sort(labels, NAME_SORT); return labels; } }); } } }