/** Creates a new team and assigns the repositories. */ public GHTeam createTeam(String name, Permission p, Collection<GHRepository> repositories) throws IOException { Requester post = new Requester(root).with("name", name).with("permission", p); List<String> repo_names = new ArrayList<String>(); for (GHRepository r : repositories) { repo_names.add(r.getName()); } post.with("repo_names", repo_names); return post.method("POST").to("/orgs/" + login + "/teams", GHTeam.class).wrapUp(this); }
/** * Loads pagenated resources. * * Every iterator call reports a new batch. */ /*package*/ <T> Iterator<T> asIterator(String _tailApiUrl, final Class<T> type) { method("GET"); if (!args.isEmpty()) { boolean first=true; try { for (Entry a : args) { _tailApiUrl += first ? '?' : '&'; first = false; _tailApiUrl += URLEncoder.encode(a.key,"UTF-8")+'='+URLEncoder.encode(a.value.toString(),"UTF-8"); } } catch (UnsupportedEncodingException e) { throw new AssertionError(e); // UTF-8 is mandatory } } final String tailApiUrl = _tailApiUrl; return new Iterator<T>() { /** * The next batch to be returned from {@link #next()}. */ T next; /** * URL of the next resource to be retrieved, or null if no more data is available. */ URL url; { try { url = root.getApiURL(tailApiUrl); } catch (IOException e) { throw new Error(e); } } public boolean hasNext() { fetch(); return next!=null; } public T next() { fetch(); T r = next; if (r==null) throw new NoSuchElementException(); next = null; return r; } public void remove() { throw new UnsupportedOperationException(); } private void fetch() { if (next!=null) return; // already fetched if (url==null) return; // no more data to fetch try { while (true) {// loop while API rate limit is hit HttpURLConnection uc = setupConnection(url); try { next = parse(uc,type,null); assert next!=null; findNextURL(uc); return; } catch (IOException e) { handleApiError(e,uc); } } } catch (IOException e) { throw new Error(e); } } /** * Locate the next page from the pagination "Link" tag. */ private void findNextURL(HttpURLConnection uc) throws MalformedURLException { url = null; // start defensively String link = uc.getHeaderField("Link"); if (link==null) return; for (String token : link.split(", ")) { if (token.endsWith("rel=\"next\"")) { // found the next page. This should look something like // <https://api.github.com/repos?page=3&per_page=100>; rel="next" int idx = token.indexOf('>'); url = new URL(token.substring(1,idx)); return; } } // no more "next" link. we are done. } }; }