Skip to content

Commit 5628d7f

Browse files
author
Ajay Kannan
committed
Refactor BasePageFetcher
1 parent 823f0de commit 5628d7f

4 files changed

Lines changed: 79 additions & 102 deletions

File tree

gcloud-java-bigquery/src/main/java/com/google/gcloud/bigquery/BigQueryImpl.java

Lines changed: 29 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.google.gcloud.ExceptionHandler.Interceptor;
3939
import com.google.gcloud.Page;
4040
import com.google.gcloud.PageImpl;
41+
import com.google.gcloud.PageImpl.BasePageFetcher;
4142
import com.google.gcloud.RetryHelper;
4243
import com.google.gcloud.bigquery.InsertAllRequest.RowToInsert;
4344
import com.google.gcloud.spi.BigQueryRpc;
@@ -69,108 +70,93 @@ public RetryResult beforeEval(Exception exception) {
6970
static final ExceptionHandler EXCEPTION_HANDLER = ExceptionHandler.builder()
7071
.abortOn(RuntimeException.class).interceptor(EXCEPTION_HANDLER_INTERCEPTOR).build();
7172

72-
private abstract static class BasePageFetcher<T> implements PageImpl.NextPageFetcher<T> {
73+
private static class DatasetPageFetcher extends BasePageFetcher<DatasetInfo, BigQueryOptions> {
7374

74-
private static final long serialVersionUID = -338124488600215401L;
75-
76-
protected final Map<BigQueryRpc.Option, ?> requestOptions;
77-
protected final BigQueryOptions serviceOptions;
78-
79-
BasePageFetcher(BigQueryOptions serviceOptions, String cursor,
80-
Map<BigQueryRpc.Option, ?> optionMap) {
81-
this.serviceOptions = serviceOptions;
82-
ImmutableMap.Builder<BigQueryRpc.Option, Object> builder = ImmutableMap.builder();
83-
if (cursor != null) {
84-
builder.put(BigQueryRpc.Option.PAGE_TOKEN, cursor);
85-
}
86-
for (Map.Entry<BigQueryRpc.Option, ?> option : optionMap.entrySet()) {
87-
if (option.getKey() != BigQueryRpc.Option.PAGE_TOKEN) {
88-
builder.put(option.getKey(), option.getValue());
89-
}
90-
}
91-
this.requestOptions = builder.build();
92-
}
93-
}
94-
95-
private static class DatasetPageFetcher extends BasePageFetcher<DatasetInfo> {
96-
97-
private static final long serialVersionUID = 3030824397616608646L;
75+
private static final long serialVersionUID = 8049465230453759547L;
9876

9977
DatasetPageFetcher(BigQueryOptions serviceOptions, String cursor,
10078
Map<BigQueryRpc.Option, ?> optionMap) {
101-
super(serviceOptions, cursor, optionMap);
79+
super(serviceOptions, BigQueryRpc.Option.PAGE_TOKEN, cursor, optionMap);
10280
}
10381

82+
@SuppressWarnings("unchecked")
10483
@Override
10584
public Page<DatasetInfo> nextPage() {
106-
return listDatasets(serviceOptions, requestOptions);
85+
return listDatasets(serviceOptions, (Map<BigQueryRpc.Option, ?>) requestOptions);
10786
}
10887
}
10988

110-
private static class TablePageFetcher extends BasePageFetcher<BaseTableInfo> {
89+
private static class TablePageFetcher extends BasePageFetcher<BaseTableInfo, BigQueryOptions> {
11190

112-
private static final long serialVersionUID = 5908129355985236115L;
91+
private static final long serialVersionUID = 6542604186608591265L;
11392
private final String dataset;
11493

11594
TablePageFetcher(String dataset, BigQueryOptions serviceOptions, String cursor,
11695
Map<BigQueryRpc.Option, ?> optionMap) {
117-
super(serviceOptions, cursor, optionMap);
96+
super(serviceOptions, BigQueryRpc.Option.PAGE_TOKEN, cursor, optionMap);
11897
this.dataset = dataset;
11998
}
12099

100+
@SuppressWarnings("unchecked")
121101
@Override
122102
public Page<BaseTableInfo> nextPage() {
123-
return listTables(dataset, serviceOptions, requestOptions);
103+
return listTables(dataset, serviceOptions, (Map<BigQueryRpc.Option, ?>) requestOptions);
124104
}
125105
}
126106

127-
private static class JobPageFetcher extends BasePageFetcher<JobInfo> {
107+
private static class JobPageFetcher extends BasePageFetcher<JobInfo, BigQueryOptions> {
128108

129-
private static final long serialVersionUID = -4984845360519279880L;
109+
private static final long serialVersionUID = 1983484324002958994L;
130110

131111
JobPageFetcher(BigQueryOptions serviceOptions, String cursor,
132112
Map<BigQueryRpc.Option, ?> optionMap) {
133-
super(serviceOptions, cursor, optionMap);
113+
super(serviceOptions, BigQueryRpc.Option.PAGE_TOKEN, cursor, optionMap);
134114
}
135115

116+
@SuppressWarnings("unchecked")
136117
@Override
137118
public Page<JobInfo> nextPage() {
138-
return listJobs(serviceOptions, requestOptions);
119+
return listJobs(serviceOptions, (Map<BigQueryRpc.Option, ?>) requestOptions);
139120
}
140121
}
141122

142-
private static class TableDataPageFetcher extends BasePageFetcher<List<FieldValue>> {
123+
private static class TableDataPageFetcher
124+
extends BasePageFetcher<List<FieldValue>, BigQueryOptions> {
143125

144-
private static final long serialVersionUID = 1281938239570262432L;
126+
private static final long serialVersionUID = 7767953898927019188L;
145127
private final TableId table;
146128

147129
TableDataPageFetcher(TableId table, BigQueryOptions serviceOptions, String cursor,
148130
Map<BigQueryRpc.Option, ?> optionMap) {
149-
super(serviceOptions, cursor, optionMap);
131+
super(serviceOptions, BigQueryRpc.Option.PAGE_TOKEN, cursor, optionMap);
150132
this.table = table;
151133
}
152134

135+
@SuppressWarnings("unchecked")
153136
@Override
154137
public Page<List<FieldValue>> nextPage() {
155-
return listTableData(table, serviceOptions, requestOptions);
138+
return listTableData(table, serviceOptions, (Map<BigQueryRpc.Option, ?>) requestOptions);
156139
}
157140
}
158141

159-
private static class QueryResultsPageFetcherImpl extends BasePageFetcher<List<FieldValue>>
142+
private static class QueryResultsPageFetcherImpl
143+
extends BasePageFetcher<List<FieldValue>, BigQueryOptions>
160144
implements QueryResult.QueryResultsPageFetcher {
161145

162-
private static final long serialVersionUID = 6713948754731557486L;
146+
private static final long serialVersionUID = 6377034420634949203L;
163147
private final JobId job;
164148

165149
QueryResultsPageFetcherImpl(JobId job, BigQueryOptions serviceOptions, String cursor,
166150
Map<BigQueryRpc.Option, ?> optionMap) {
167-
super(serviceOptions, cursor, optionMap);
151+
super(serviceOptions, BigQueryRpc.Option.PAGE_TOKEN, cursor, optionMap);
168152
this.job = job;
169153
}
170154

155+
@SuppressWarnings("unchecked")
171156
@Override
172157
public QueryResult nextPage() {
173-
return getQueryResults(job, serviceOptions, requestOptions).result();
158+
return getQueryResults(job, serviceOptions, (Map<BigQueryRpc.Option, ?>) requestOptions)
159+
.result();
174160
}
175161
}
176162

gcloud-java-core/src/main/java/com/google/gcloud/PageImpl.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
package com.google.gcloud;
1818

1919
import com.google.common.collect.AbstractIterator;
20+
import com.google.common.collect.ImmutableMap;
2021

2122
import java.io.Serializable;
2223
import java.util.Collections;
2324
import java.util.Iterator;
25+
import java.util.Map;
2426
import java.util.Objects;
2527

2628
/**
@@ -38,6 +40,37 @@ public interface NextPageFetcher<T> extends Serializable {
3840
Page<T> nextPage();
3941
}
4042

43+
/**
44+
* Base class for page fetchers.
45+
*
46+
* @param <T> the value type that the page holds. {@code T} should implement
47+
* {@code java.io.Serializable}
48+
* @param <O> the service options type
49+
*/
50+
@SuppressWarnings("rawtypes")
51+
public abstract static class BasePageFetcher<T, O extends ServiceOptions>
52+
implements NextPageFetcher<T> {
53+
54+
private static final long serialVersionUID = -3333056232729661990L;
55+
protected final Map<?, ?> requestOptions;
56+
protected final O serviceOptions;
57+
58+
protected BasePageFetcher(O serviceOptions, Enum<?> pageTokenOption,
59+
String cursor, Map<?, ?> optionMap) {
60+
this.serviceOptions = serviceOptions;
61+
ImmutableMap.Builder<Object, Object> builder = ImmutableMap.builder();
62+
if (cursor != null) {
63+
builder.put(pageTokenOption, cursor);
64+
}
65+
for (Map.Entry<?, ?> option : optionMap.entrySet()) {
66+
if (option.getKey() != pageTokenOption) {
67+
builder.put(option.getKey(), option.getValue());
68+
}
69+
}
70+
this.requestOptions = builder.build();
71+
}
72+
}
73+
4174
static class PageIterator<T> extends AbstractIterator<T> {
4275

4376
private Iterator<T> currentPageIterator;

gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/ResourceManagerImpl.java

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@
2929
import com.google.gcloud.ExceptionHandler.Interceptor;
3030
import com.google.gcloud.Page;
3131
import com.google.gcloud.PageImpl;
32+
import com.google.gcloud.PageImpl.BasePageFetcher;
3233
import com.google.gcloud.RetryHelper.RetryHelperException;
3334
import com.google.gcloud.spi.ResourceManagerRpc;
3435
import com.google.gcloud.spi.ResourceManagerRpc.Tuple;
3536

36-
import java.io.Serializable;
3737
import java.util.Map;
3838
import java.util.concurrent.Callable;
3939

@@ -117,42 +117,20 @@ public com.google.api.services.cloudresourcemanager.model.Project call() {
117117
}
118118
}
119119

120-
private abstract static class BasePageFetcher<T extends Serializable>
121-
implements PageImpl.NextPageFetcher<T> {
122-
123-
private static final long serialVersionUID = -5560906434575940205L;
124-
125-
protected final Map<ResourceManagerRpc.Option, ?> requestOptions;
126-
protected final ResourceManagerOptions serviceOptions;
127-
128-
BasePageFetcher(ResourceManagerOptions serviceOptions, String cursor,
129-
Map<ResourceManagerRpc.Option, ?> optionMap) {
130-
this.serviceOptions = serviceOptions;
131-
ImmutableMap.Builder<ResourceManagerRpc.Option, Object> builder = ImmutableMap.builder();
132-
if (cursor != null) {
133-
builder.put(ResourceManagerRpc.Option.PAGE_TOKEN, cursor);
134-
}
135-
for (Map.Entry<ResourceManagerRpc.Option, ?> option : optionMap.entrySet()) {
136-
if (option.getKey() != ResourceManagerRpc.Option.PAGE_TOKEN) {
137-
builder.put(option.getKey(), option.getValue());
138-
}
139-
}
140-
this.requestOptions = builder.build();
141-
}
142-
}
143-
144-
private static class ProjectPageFetcher extends BasePageFetcher<ProjectInfo> {
120+
private static class ProjectPageFetcher
121+
extends BasePageFetcher<ProjectInfo, ResourceManagerOptions> {
145122

146123
private static final long serialVersionUID = -533306655445189098L;
147124

148125
ProjectPageFetcher(ResourceManagerOptions serviceOptions, String cursor,
149126
Map<ResourceManagerRpc.Option, ?> optionMap) {
150-
super(serviceOptions, cursor, optionMap);
127+
super(serviceOptions, ResourceManagerRpc.Option.PAGE_TOKEN, cursor, optionMap);
151128
}
152129

130+
@SuppressWarnings("unchecked")
153131
@Override
154132
public Page<ProjectInfo> nextPage() {
155-
return listProjects(serviceOptions, requestOptions);
133+
return listProjects(serviceOptions, (Map<ResourceManagerRpc.Option, ?>) requestOptions);
156134
}
157135
}
158136

gcloud-java-storage/src/main/java/com/google/gcloud/storage/StorageImpl.java

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.google.gcloud.ExceptionHandler.Interceptor;
4949
import com.google.gcloud.Page;
5050
import com.google.gcloud.PageImpl;
51+
import com.google.gcloud.PageImpl.BasePageFetcher;
5152
import com.google.gcloud.RetryHelper.RetryHelperException;
5253
import com.google.gcloud.spi.StorageRpc;
5354
import com.google.gcloud.spi.StorageRpc.RewriteResponse;
@@ -209,58 +210,37 @@ public BlobInfo get(BlobId blob) {
209210
return get(blob, new BlobGetOption[0]);
210211
}
211212

212-
private abstract static class BasePageFetcher<T extends Serializable>
213-
implements PageImpl.NextPageFetcher<T> {
213+
private static class BucketPageFetcher extends BasePageFetcher<BucketInfo, StorageOptions> {
214214

215-
private static final long serialVersionUID = 8236329004030295223L;
216-
protected final Map<StorageRpc.Option, ?> requestOptions;
217-
protected final StorageOptions serviceOptions;
218-
219-
BasePageFetcher(StorageOptions serviceOptions, String cursor,
220-
Map<StorageRpc.Option, ?> optionMap) {
221-
this.serviceOptions = serviceOptions;
222-
ImmutableMap.Builder<StorageRpc.Option, Object> builder = ImmutableMap.builder();
223-
if (cursor != null) {
224-
builder.put(StorageRpc.Option.PAGE_TOKEN, cursor);
225-
}
226-
for (Map.Entry<StorageRpc.Option, ?> option : optionMap.entrySet()) {
227-
if (option.getKey() != StorageRpc.Option.PAGE_TOKEN) {
228-
builder.put(option.getKey(), option.getValue());
229-
}
230-
}
231-
this.requestOptions = builder.build();
232-
}
233-
}
234-
235-
private static class BucketPageFetcher extends BasePageFetcher<BucketInfo> {
236-
237-
private static final long serialVersionUID = -5490616010200159174L;
215+
private static final long serialVersionUID = -2456686089489944533L;
238216

239217
BucketPageFetcher(StorageOptions serviceOptions, String cursor,
240218
Map<StorageRpc.Option, ?> optionMap) {
241-
super(serviceOptions, cursor, optionMap);
219+
super(serviceOptions, StorageRpc.Option.PAGE_TOKEN, cursor, optionMap);
242220
}
243221

222+
@SuppressWarnings("unchecked")
244223
@Override
245224
public Page<BucketInfo> nextPage() {
246-
return listBuckets(serviceOptions, requestOptions);
225+
return listBuckets(serviceOptions, (Map<StorageRpc.Option, ?>) requestOptions);
247226
}
248227
}
249228

250-
private static class BlobPageFetcher extends BasePageFetcher<BlobInfo> {
229+
private static class BlobPageFetcher extends BasePageFetcher<BlobInfo, StorageOptions> {
251230

252-
private static final long serialVersionUID = -5490616010200159174L;
231+
private static final long serialVersionUID = 3841753010333660702L;
253232
private final String bucket;
254233

255234
BlobPageFetcher(String bucket, StorageOptions serviceOptions, String cursor,
256235
Map<StorageRpc.Option, ?> optionMap) {
257-
super(serviceOptions, cursor, optionMap);
236+
super(serviceOptions, StorageRpc.Option.PAGE_TOKEN, cursor, optionMap);
258237
this.bucket = bucket;
259238
}
260239

240+
@SuppressWarnings("unchecked")
261241
@Override
262242
public Page<BlobInfo> nextPage() {
263-
return listBlobs(bucket, serviceOptions, requestOptions);
243+
return listBlobs(bucket, serviceOptions, (Map<StorageRpc.Option, ?>) requestOptions);
264244
}
265245
}
266246

0 commit comments

Comments
 (0)