{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments/47840555","id":47840555,"diff_hunk":"@@ -0,0 +1,723 @@\n+/*\n+ * Copyright 2015 Google Inc. All Rights Reserved.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *       http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+package com.google.gcloud.bigquery;\n+\n+import static com.google.common.base.Preconditions.checkArgument;\n+import static com.google.gcloud.RetryHelper.runWithRetries;\n+\n+import com.google.api.services.bigquery.model.Dataset;\n+import com.google.api.services.bigquery.model.GetQueryResultsResponse;\n+import com.google.api.services.bigquery.model.Job;\n+import com.google.api.services.bigquery.model.Table;\n+import com.google.api.services.bigquery.model.TableDataInsertAllRequest;\n+import com.google.api.services.bigquery.model.TableDataInsertAllRequest.Rows;\n+import com.google.api.services.bigquery.model.TableDataInsertAllResponse;\n+import com.google.api.services.bigquery.model.TableReference;\n+import com.google.api.services.bigquery.model.TableRow;\n+import com.google.common.base.Function;\n+import com.google.common.collect.ImmutableList;\n+import com.google.common.collect.ImmutableMap;\n+import com.google.common.collect.Iterables;\n+import com.google.common.collect.Lists;\n+import com.google.common.collect.Maps;\n+import com.google.gcloud.BaseService;\n+import com.google.gcloud.ExceptionHandler;\n+import com.google.gcloud.ExceptionHandler.Interceptor;\n+import com.google.gcloud.Page;\n+import com.google.gcloud.PageImpl;\n+import com.google.gcloud.RetryHelper;\n+import com.google.gcloud.bigquery.InsertAllRequest.RowToInsert;\n+import com.google.gcloud.spi.BigQueryRpc;\n+\n+import java.util.List;\n+import java.util.Map;\n+import java.util.concurrent.Callable;\n+\n+final class BigQueryImpl extends BaseService<BigQueryOptions> implements BigQuery {\n+\n+  private static final Interceptor EXCEPTION_HANDLER_INTERCEPTOR = new Interceptor() {\n+\n+    private static final long serialVersionUID = -7478333733015750774L;\n+\n+    @Override\n+    public RetryResult afterEval(Exception exception, RetryResult retryResult) {\n+      return Interceptor.RetryResult.CONTINUE_EVALUATION;\n+    }\n+\n+    @Override\n+    public RetryResult beforeEval(Exception exception) {\n+      if (exception instanceof BigQueryException) {\n+        boolean retriable = ((BigQueryException) exception).retryable();\n+        return retriable ? Interceptor.RetryResult.RETRY : Interceptor.RetryResult.NO_RETRY;\n+      }\n+      return Interceptor.RetryResult.CONTINUE_EVALUATION;\n+    }\n+  };\n+  static final ExceptionHandler EXCEPTION_HANDLER = ExceptionHandler.builder()\n+      .abortOn(RuntimeException.class).interceptor(EXCEPTION_HANDLER_INTERCEPTOR).build();\n+\n+  private abstract static class BasePageFetcher<T> implements PageImpl.NextPageFetcher<T> {\n+\n+    private static final long serialVersionUID = -338124488600215401L;\n+\n+    protected final Map<BigQueryRpc.Option, ?> requestOptions;\n+    protected final BigQueryOptions serviceOptions;\n+\n+    BasePageFetcher(BigQueryOptions serviceOptions, String cursor,\n+        Map<BigQueryRpc.Option, ?> optionMap) {\n+      this.serviceOptions = serviceOptions;\n+      ImmutableMap.Builder<BigQueryRpc.Option, Object> builder = ImmutableMap.builder();\n+      if (cursor != null) {\n+        builder.put(BigQueryRpc.Option.PAGE_TOKEN, cursor);\n+      }\n+      for (Map.Entry<BigQueryRpc.Option, ?> option : optionMap.entrySet()) {\n+        if (option.getKey() != BigQueryRpc.Option.PAGE_TOKEN) {\n+          builder.put(option.getKey(), option.getValue());\n+        }\n+      }\n+      this.requestOptions = builder.build();\n+    }\n+  }\n+\n+  private static class DatasetPageFetcher extends BasePageFetcher<DatasetInfo> {\n+\n+    private static final long serialVersionUID = 3030824397616608646L;\n+\n+    DatasetPageFetcher(BigQueryOptions serviceOptions, String cursor,\n+        Map<BigQueryRpc.Option, ?> optionMap) {\n+      super(serviceOptions, cursor, optionMap);\n+    }\n+\n+    @Override\n+    public Page<DatasetInfo> nextPage() {\n+      return listDatasets(serviceOptions, requestOptions);\n+    }\n+  }\n+\n+  private static class TablePageFetcher extends BasePageFetcher<BaseTableInfo> {\n+\n+    private static final long serialVersionUID = 5908129355985236115L;\n+    private final String dataset;\n+\n+    TablePageFetcher(String dataset, BigQueryOptions serviceOptions, String cursor,\n+        Map<BigQueryRpc.Option, ?> optionMap) {\n+      super(serviceOptions, cursor, optionMap);\n+      this.dataset = dataset;\n+    }\n+\n+    @Override\n+    public Page<BaseTableInfo> nextPage() {\n+      return listTables(dataset, serviceOptions, requestOptions);\n+    }\n+  }\n+\n+  private static class JobPageFetcher extends BasePageFetcher<JobInfo> {\n+\n+    private static final long serialVersionUID = -4984845360519279880L;\n+\n+    JobPageFetcher(BigQueryOptions serviceOptions, String cursor,\n+        Map<BigQueryRpc.Option, ?> optionMap) {\n+      super(serviceOptions, cursor, optionMap);\n+    }\n+\n+    @Override\n+    public Page<JobInfo> nextPage() {\n+      return listJobs(serviceOptions, requestOptions);\n+    }\n+  }\n+\n+  private static class TableDataPageFetcher extends BasePageFetcher<List<FieldValue>> {\n+\n+    private static final long serialVersionUID = 1281938239570262432L;\n+    private final TableId table;\n+\n+    TableDataPageFetcher(TableId table, BigQueryOptions serviceOptions, String cursor,\n+        Map<BigQueryRpc.Option, ?> optionMap) {\n+      super(serviceOptions, cursor, optionMap);\n+      this.table = table;\n+    }\n+\n+    @Override\n+    public Page<List<FieldValue>> nextPage() {\n+      return listTableData(table, serviceOptions, requestOptions);\n+    }\n+  }\n+\n+  private static class QueryResultsPageFetcherImpl extends BasePageFetcher<List<FieldValue>>\n+      implements QueryResult.QueryResultsPageFetcher {\n+\n+    private static final long serialVersionUID = 6713948754731557486L;\n+    private final JobId job;\n+\n+    QueryResultsPageFetcherImpl(JobId job, BigQueryOptions serviceOptions, String cursor,\n+        Map<BigQueryRpc.Option, ?> optionMap) {\n+      super(serviceOptions, cursor, optionMap);\n+      this.job = job;\n+    }\n+\n+    @Override\n+    public QueryResult nextPage() {\n+      return getQueryResults(job, serviceOptions, requestOptions).result();\n+    }\n+  }\n+\n+  private final BigQueryRpc bigQueryRpc;\n+\n+  BigQueryImpl(BigQueryOptions options) {\n+    super(options);\n+    bigQueryRpc = options.rpc();\n+  }\n+\n+  @Override\n+  public DatasetInfo create(DatasetInfo dataset, DatasetOption... options)\n+      throws BigQueryException {\n+    final Dataset datasetPb = setProjectId(dataset).toPb();\n+    final Map<BigQueryRpc.Option, ?> optionsMap = optionMap(options);\n+    try {\n+      return DatasetInfo.fromPb(runWithRetries(new Callable<Dataset>() {\n+        @Override\n+        public Dataset call() {\n+          return bigQueryRpc.create(datasetPb, optionsMap);\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER));\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public BaseTableInfo create(BaseTableInfo table, TableOption... options)\n+      throws BigQueryException {\n+    final Table tablePb = setProjectId(table).toPb();\n+    final Map<BigQueryRpc.Option, ?> optionsMap = optionMap(options);\n+    try {\n+      return BaseTableInfo.fromPb(runWithRetries(new Callable<Table>() {\n+        @Override\n+        public Table call() {\n+          return bigQueryRpc.create(tablePb, optionsMap);\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER));\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public JobInfo create(JobInfo job, JobOption... options) throws BigQueryException {\n+    final Job jobPb = setProjectId(job).toPb();\n+    final Map<BigQueryRpc.Option, ?> optionsMap = optionMap(options);\n+    try {\n+      return JobInfo.fromPb(runWithRetries(new Callable<Job>() {\n+        @Override\n+        public Job call() {\n+          return bigQueryRpc.create(jobPb, optionsMap);\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER));\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public DatasetInfo getDataset(String datasetId, DatasetOption... options)\n+      throws BigQueryException {\n+    return getDataset(DatasetId.of(datasetId), options);\n+  }\n+\n+  @Override\n+  public DatasetInfo getDataset(final DatasetId datasetId, DatasetOption... options)\n+      throws BigQueryException {\n+    final Map<BigQueryRpc.Option, ?> optionsMap = optionMap(options);\n+    try {\n+      Dataset answer = runWithRetries(new Callable<Dataset>() {\n+        @Override\n+        public Dataset call() {\n+          return bigQueryRpc.getDataset(datasetId.dataset(), optionsMap);\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER);\n+      return answer == null ? null : DatasetInfo.fromPb(answer);\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public Page<DatasetInfo> listDatasets(DatasetListOption... options) throws BigQueryException {\n+    return listDatasets(options(), optionMap(options));\n+  }\n+\n+  private static Page<DatasetInfo> listDatasets(final BigQueryOptions serviceOptions,\n+      final Map<BigQueryRpc.Option, ?> optionsMap) {\n+    try {\n+      BigQueryRpc.Tuple<String, Iterable<Dataset>> result =\n+          runWithRetries(new Callable<BigQueryRpc.Tuple<String, Iterable<Dataset>>>() {\n+            @Override\n+            public BigQueryRpc.Tuple<String, Iterable<Dataset>> call() {\n+              return serviceOptions.rpc().listDatasets(optionsMap);\n+            }\n+          }, serviceOptions.retryParams(), EXCEPTION_HANDLER);\n+      String cursor = result.x();\n+      return new PageImpl<>(new DatasetPageFetcher(serviceOptions, cursor, optionsMap), cursor,\n+          Iterables.transform(result.y(), DatasetInfo.FROM_PB_FUNCTION));\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public boolean delete(String datasetId, DatasetDeleteOption... options) throws BigQueryException {\n+    return delete(DatasetId.of(datasetId), options);\n+  }\n+\n+  @Override\n+  public boolean delete(final DatasetId datasetId, DatasetDeleteOption... options)\n+      throws BigQueryException {\n+    final Map<BigQueryRpc.Option, ?> optionsMap = optionMap(options);\n+    try {\n+      return runWithRetries(new Callable<Boolean>() {\n+        @Override\n+        public Boolean call() {\n+          return bigQueryRpc.deleteDataset(datasetId.dataset(), optionsMap);\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER);\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public boolean delete(final String datasetId, final String tableId) throws BigQueryException {\n+    return delete(TableId.of(datasetId, tableId));\n+  }\n+\n+  @Override\n+  public boolean delete(final TableId tableId) throws BigQueryException {\n+    try {\n+      return runWithRetries(new Callable<Boolean>() {\n+        @Override\n+        public Boolean call() {\n+          return bigQueryRpc.deleteTable(tableId.dataset(), tableId.table());\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER);\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public DatasetInfo update(DatasetInfo dataset, DatasetOption... options)\n+      throws BigQueryException {\n+    final Dataset datasetPb = setProjectId(dataset).toPb();\n+    final Map<BigQueryRpc.Option, ?> optionsMap = optionMap(options);\n+    try {\n+      return DatasetInfo.fromPb(runWithRetries(new Callable<Dataset>() {\n+        @Override\n+        public Dataset call() {\n+          return bigQueryRpc.patch(datasetPb, optionsMap);\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER));\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public BaseTableInfo update(BaseTableInfo table, TableOption... options)\n+      throws BigQueryException {\n+    final Table tablePb = setProjectId(table).toPb();\n+    final Map<BigQueryRpc.Option, ?> optionsMap = optionMap(options);\n+    try {\n+      return BaseTableInfo.fromPb(runWithRetries(new Callable<Table>() {\n+        @Override\n+        public Table call() {\n+          return bigQueryRpc.patch(tablePb, optionsMap);\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER));\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public BaseTableInfo getTable(final String datasetId, final String tableId,\n+      TableOption... options) throws BigQueryException {\n+    return getTable(TableId.of(datasetId, tableId), options);\n+  }\n+\n+  @Override\n+  public BaseTableInfo getTable(final TableId tableId, TableOption... options)\n+      throws BigQueryException {\n+    final Map<BigQueryRpc.Option, ?> optionsMap = optionMap(options);\n+    try {\n+      Table answer = runWithRetries(new Callable<Table>() {\n+        @Override\n+        public Table call() {\n+          return bigQueryRpc.getTable(tableId.dataset(), tableId.table(), optionsMap);\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER);\n+      return answer == null ? null : BaseTableInfo.fromPb(answer);\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public Page<BaseTableInfo> listTables(String datasetId, TableListOption... options)\n+      throws BigQueryException {\n+    return listTables(datasetId, options(), optionMap(options));\n+  }\n+\n+  @Override\n+  public Page<BaseTableInfo> listTables(DatasetId datasetId, TableListOption... options)\n+      throws BigQueryException {\n+    return listTables(datasetId.dataset(), options(), optionMap(options));\n+  }\n+\n+  private static Page<BaseTableInfo> listTables(final String datasetId, final BigQueryOptions\n+      serviceOptions, final Map<BigQueryRpc.Option, ?> optionsMap) {\n+    try {\n+      BigQueryRpc.Tuple<String, Iterable<Table>> result =\n+          runWithRetries(new Callable<BigQueryRpc.Tuple<String, Iterable<Table>>>() {\n+            @Override\n+            public BigQueryRpc.Tuple<String, Iterable<Table>> call() {\n+              return serviceOptions.rpc().listTables(datasetId, optionsMap);\n+            }\n+          }, serviceOptions.retryParams(), EXCEPTION_HANDLER);\n+      String cursor = result.x();\n+      Iterable<BaseTableInfo> tables = Iterables.transform(result.y(),\n+          BaseTableInfo.FROM_PB_FUNCTION);\n+      return new PageImpl<>(new TablePageFetcher(datasetId, serviceOptions, cursor, optionsMap),\n+          cursor, tables);\n+    } catch (RetryHelper.RetryHelperException e) {\n+      throw BigQueryException.translateAndThrow(e);\n+    }\n+  }\n+\n+  @Override\n+  public InsertAllResponse insertAll(InsertAllRequest request) throws BigQueryException {\n+    final TableId tableId = request.table();\n+    final TableDataInsertAllRequest requestPb = new TableDataInsertAllRequest();\n+    requestPb.setIgnoreUnknownValues(request.ignoreUnknownValues());\n+    requestPb.setSkipInvalidRows(request.skipInvalidRows());\n+    List<Rows> rowsPb = Lists.transform(request.rows(), new Function<RowToInsert, Rows>() {\n+      @Override\n+      public Rows apply(RowToInsert rowToInsert) {\n+        return new Rows().setInsertId(rowToInsert.id()).setJson(rowToInsert.content());\n+      }\n+    });\n+    requestPb.setRows(rowsPb);\n+    try {\n+      return InsertAllResponse.fromPb(runWithRetries(new Callable<TableDataInsertAllResponse>() {\n+        @Override\n+        public TableDataInsertAllResponse call() {\n+          return bigQueryRpc.insertAll(tableId.dataset(), tableId.table(), requestPb);\n+        }\n+      }, options().retryParams(), EXCEPTION_HANDLER));\n+    } catch (RetryHelper.RetryHelperException e) {","path":"gcloud-java-bigquery/src/main/java/com/google/gcloud/bigquery/BigQueryImpl.java","position":null,"original_position":430,"commit_id":"d6766367713f7043e9bb3b58b75fd3ba8f6679ce","original_commit_id":"e1dc3af0ba48a6b274e6d432da751ba536b2ba4e","user":{"login":"mziccard","id":450933,"avatar_url":"https://avatars.githubusercontent.com/u/450933?v=3","gravatar_id":"","url":"https://api.github.com/users/mziccard","html_url":"https://github.com/mziccard","followers_url":"https://api.github.com/users/mziccard/followers","following_url":"https://api.github.com/users/mziccard/following{/other_user}","gists_url":"https://api.github.com/users/mziccard/gists{/gist_id}","starred_url":"https://api.github.com/users/mziccard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mziccard/subscriptions","organizations_url":"https://api.github.com/users/mziccard/orgs","repos_url":"https://api.github.com/users/mziccard/repos","events_url":"https://api.github.com/users/mziccard/events{/privacy}","received_events_url":"https://api.github.com/users/mziccard/received_events","type":"User","site_admin":false},"body":"Just opened #470 ","created_at":"2015-12-16T22:02:32Z","updated_at":"2015-12-16T22:02:32Z","html_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/454#discussion_r47840555","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/454","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments/47840555"},"html":{"href":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/454#discussion_r47840555"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/454"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/454","id":53731898,"html_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/454","diff_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/454.diff","patch_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/454.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/454","number":454,"state":"open","locked":false,"title":"Add BigQuery service implementation","user":{"login":"mziccard","id":450933,"avatar_url":"https://avatars.githubusercontent.com/u/450933?v=3","gravatar_id":"","url":"https://api.github.com/users/mziccard","html_url":"https://github.com/mziccard","followers_url":"https://api.github.com/users/mziccard/followers","following_url":"https://api.github.com/users/mziccard/following{/other_user}","gists_url":"https://api.github.com/users/mziccard/gists{/gist_id}","starred_url":"https://api.github.com/users/mziccard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mziccard/subscriptions","organizations_url":"https://api.github.com/users/mziccard/orgs","repos_url":"https://api.github.com/users/mziccard/repos","events_url":"https://api.github.com/users/mziccard/events{/privacy}","received_events_url":"https://api.github.com/users/mziccard/received_events","type":"User","site_admin":false},"body":"This class implements the `BigQuery` service, main changes are:\r\n- Connect `DefaultBigQueryRpc` and `BigQueryImpl` to `BigQueryOptions`\r\n- Add `defaultInstance` method to `BigQueryOptions`\r\n- Add `Option` base class for `BigQuery` operation options and test\r\n- Add methods and options to the `BigQuery` interface\r\n- Add `BigQueryImpl` service implementation\r\n- Add `BigQueryImplTest` with unit tests","created_at":"2015-12-15T17:02:57Z","updated_at":"2015-12-16T22:02:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d0281be496e395fb2accbe55c5157672f821b692","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/454/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/454/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/454/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/statuses/d6766367713f7043e9bb3b58b75fd3ba8f6679ce","head":{"label":"mziccard:bigquery","ref":"bigquery","sha":"d6766367713f7043e9bb3b58b75fd3ba8f6679ce","user":{"login":"mziccard","id":450933,"avatar_url":"https://avatars.githubusercontent.com/u/450933?v=3","gravatar_id":"","url":"https://api.github.com/users/mziccard","html_url":"https://github.com/mziccard","followers_url":"https://api.github.com/users/mziccard/followers","following_url":"https://api.github.com/users/mziccard/following{/other_user}","gists_url":"https://api.github.com/users/mziccard/gists{/gist_id}","starred_url":"https://api.github.com/users/mziccard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mziccard/subscriptions","organizations_url":"https://api.github.com/users/mziccard/orgs","repos_url":"https://api.github.com/users/mziccard/repos","events_url":"https://api.github.com/users/mziccard/events{/privacy}","received_events_url":"https://api.github.com/users/mziccard/received_events","type":"User","site_admin":false},"repo":{"id":40965279,"name":"gcloud-java","full_name":"mziccard/gcloud-java","owner":{"login":"mziccard","id":450933,"avatar_url":"https://avatars.githubusercontent.com/u/450933?v=3","gravatar_id":"","url":"https://api.github.com/users/mziccard","html_url":"https://github.com/mziccard","followers_url":"https://api.github.com/users/mziccard/followers","following_url":"https://api.github.com/users/mziccard/following{/other_user}","gists_url":"https://api.github.com/users/mziccard/gists{/gist_id}","starred_url":"https://api.github.com/users/mziccard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mziccard/subscriptions","organizations_url":"https://api.github.com/users/mziccard/orgs","repos_url":"https://api.github.com/users/mziccard/repos","events_url":"https://api.github.com/users/mziccard/events{/privacy}","received_events_url":"https://api.github.com/users/mziccard/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mziccard/gcloud-java","description":"Google Cloud Client Library for Java","fork":true,"url":"https://api.github.com/repos/mziccard/gcloud-java","forks_url":"https://api.github.com/repos/mziccard/gcloud-java/forks","keys_url":"https://api.github.com/repos/mziccard/gcloud-java/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mziccard/gcloud-java/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mziccard/gcloud-java/teams","hooks_url":"https://api.github.com/repos/mziccard/gcloud-java/hooks","issue_events_url":"https://api.github.com/repos/mziccard/gcloud-java/issues/events{/number}","events_url":"https://api.github.com/repos/mziccard/gcloud-java/events","assignees_url":"https://api.github.com/repos/mziccard/gcloud-java/assignees{/user}","branches_url":"https://api.github.com/repos/mziccard/gcloud-java/branches{/branch}","tags_url":"https://api.github.com/repos/mziccard/gcloud-java/tags","blobs_url":"https://api.github.com/repos/mziccard/gcloud-java/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mziccard/gcloud-java/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mziccard/gcloud-java/git/refs{/sha}","trees_url":"https://api.github.com/repos/mziccard/gcloud-java/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mziccard/gcloud-java/statuses/{sha}","languages_url":"https://api.github.com/repos/mziccard/gcloud-java/languages","stargazers_url":"https://api.github.com/repos/mziccard/gcloud-java/stargazers","contributors_url":"https://api.github.com/repos/mziccard/gcloud-java/contributors","subscribers_url":"https://api.github.com/repos/mziccard/gcloud-java/subscribers","subscription_url":"https://api.github.com/repos/mziccard/gcloud-java/subscription","commits_url":"https://api.github.com/repos/mziccard/gcloud-java/commits{/sha}","git_commits_url":"https://api.github.com/repos/mziccard/gcloud-java/git/commits{/sha}","comments_url":"https://api.github.com/repos/mziccard/gcloud-java/comments{/number}","issue_comment_url":"https://api.github.com/repos/mziccard/gcloud-java/issues/comments{/number}","contents_url":"https://api.github.com/repos/mziccard/gcloud-java/contents/{+path}","compare_url":"https://api.github.com/repos/mziccard/gcloud-java/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mziccard/gcloud-java/merges","archive_url":"https://api.github.com/repos/mziccard/gcloud-java/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mziccard/gcloud-java/downloads","issues_url":"https://api.github.com/repos/mziccard/gcloud-java/issues{/number}","pulls_url":"https://api.github.com/repos/mziccard/gcloud-java/pulls{/number}","milestones_url":"https://api.github.com/repos/mziccard/gcloud-java/milestones{/number}","notifications_url":"https://api.github.com/repos/mziccard/gcloud-java/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mziccard/gcloud-java/labels{/name}","releases_url":"https://api.github.com/repos/mziccard/gcloud-java/releases{/id}","created_at":"2015-08-18T10:16:17Z","updated_at":"2015-08-18T10:16:18Z","pushed_at":"2015-12-16T20:58:12Z","git_url":"git://github.com/mziccard/gcloud-java.git","ssh_url":"git@github.com:mziccard/gcloud-java.git","clone_url":"https://github.com/mziccard/gcloud-java.git","svn_url":"https://github.com/mziccard/gcloud-java","homepage":"http://googlecloudplatform.github.io/gcloud-java/site/0.0.6/","size":16398,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:bigquery","ref":"bigquery","sha":"0f765b7ace3491dcd7bbbf7c98d88a4ad913e434","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":26181278,"name":"gcloud-java","full_name":"GoogleCloudPlatform/gcloud-java","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/gcloud-java","description":"Google Cloud Client Library for Java","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/releases{/id}","created_at":"2014-11-04T17:57:16Z","updated_at":"2015-12-09T20:40:17Z","pushed_at":"2015-12-16T20:58:12Z","git_url":"git://github.com/GoogleCloudPlatform/gcloud-java.git","ssh_url":"git@github.com:GoogleCloudPlatform/gcloud-java.git","clone_url":"https://github.com/GoogleCloudPlatform/gcloud-java.git","svn_url":"https://github.com/GoogleCloudPlatform/gcloud-java","homepage":"http://googlecloudplatform.github.io/gcloud-java/","size":208410,"stargazers_count":50,"watchers_count":50,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":27,"mirror_url":null,"open_issues_count":107,"forks":27,"open_issues":107,"watchers":50,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/454"},"html":{"href":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/454"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/454"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/454/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/454/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/454/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/statuses/d6766367713f7043e9bb3b58b75fd3ba8f6679ce"}}}}