19
19
import static com .google .common .base .Preconditions .checkArgument ;
20
20
21
21
import com .google .common .base .Function ;
22
- import com .google .common .base .Joiner ;
23
22
import com .google .common .collect .ImmutableList ;
24
23
import com .google .common .collect .Lists ;
25
- import com .google .common .collect .Sets ;
24
+ import com .google .gcloud .FieldSelector ;
25
+ import com .google .gcloud .FieldSelector .Helper ;
26
26
import com .google .gcloud .Page ;
27
27
import com .google .gcloud .Service ;
28
28
import com .google .gcloud .bigquery .spi .BigQueryRpc ;
29
29
30
30
import java .util .List ;
31
- import java .util .Set ;
32
31
33
32
/**
34
33
* An interface for Google Cloud BigQuery.
@@ -43,7 +42,7 @@ public interface BigQuery extends Service<BigQueryOptions> {
43
42
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/datasets#resource">Dataset
44
43
* Resource</a>
45
44
*/
46
- enum DatasetField {
45
+ enum DatasetField implements FieldSelector {
47
46
ACCESS ("access" ),
48
47
CREATION_TIME ("creationTime" ),
49
48
DATASET_REFERENCE ("datasetReference" ),
@@ -56,24 +55,19 @@ enum DatasetField {
56
55
LOCATION ("location" ),
57
56
SELF_LINK ("selfLink" );
58
57
58
+ static final List <? extends FieldSelector > REQUIRED_FIELDS =
59
+ ImmutableList .of (DATASET_REFERENCE );
60
+
59
61
private final String selector ;
60
62
61
63
DatasetField (String selector ) {
62
64
this .selector = selector ;
63
65
}
64
66
67
+ @ Override
65
68
public String selector () {
66
69
return selector ;
67
70
}
68
-
69
- static String selector (DatasetField ... fields ) {
70
- Set <String > fieldStrings = Sets .newHashSetWithExpectedSize (fields .length + 1 );
71
- fieldStrings .add (DATASET_REFERENCE .selector ());
72
- for (DatasetField field : fields ) {
73
- fieldStrings .add (field .selector ());
74
- }
75
- return Joiner .on (',' ).join (fieldStrings );
76
- }
77
71
}
78
72
79
73
/**
@@ -82,7 +76,7 @@ static String selector(DatasetField... fields) {
82
76
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/tables#resource">Table
83
77
* Resource</a>
84
78
*/
85
- enum TableField {
79
+ enum TableField implements FieldSelector {
86
80
CREATION_TIME ("creationTime" ),
87
81
DESCRIPTION ("description" ),
88
82
ETAG ("etag" ),
@@ -101,25 +95,19 @@ enum TableField {
101
95
TYPE ("type" ),
102
96
VIEW ("view" );
103
97
98
+ static final List <? extends FieldSelector > REQUIRED_FIELDS =
99
+ ImmutableList .of (TABLE_REFERENCE , TYPE );
100
+
104
101
private final String selector ;
105
102
106
103
TableField (String selector ) {
107
104
this .selector = selector ;
108
105
}
109
106
107
+ @ Override
110
108
public String selector () {
111
109
return selector ;
112
110
}
113
-
114
- static String selector (TableField ... fields ) {
115
- Set <String > fieldStrings = Sets .newHashSetWithExpectedSize (fields .length + 2 );
116
- fieldStrings .add (TABLE_REFERENCE .selector ());
117
- fieldStrings .add (TYPE .selector ());
118
- for (TableField field : fields ) {
119
- fieldStrings .add (field .selector ());
120
- }
121
- return Joiner .on (',' ).join (fieldStrings );
122
- }
123
111
}
124
112
125
113
/**
@@ -128,7 +116,7 @@ static String selector(TableField... fields) {
128
116
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/jobs#resource">Job Resource
129
117
* </a>
130
118
*/
131
- enum JobField {
119
+ enum JobField implements FieldSelector {
132
120
CONFIGURATION ("configuration" ),
133
121
ETAG ("etag" ),
134
122
ID ("id" ),
@@ -138,25 +126,19 @@ enum JobField {
138
126
STATUS ("status" ),
139
127
USER_EMAIL ("user_email" );
140
128
129
+ static final List <? extends FieldSelector > REQUIRED_FIELDS =
130
+ ImmutableList .of (JOB_REFERENCE , CONFIGURATION );
131
+
141
132
private final String selector ;
142
133
143
134
JobField (String selector ) {
144
135
this .selector = selector ;
145
136
}
146
137
138
+ @ Override
147
139
public String selector () {
148
140
return selector ;
149
141
}
150
-
151
- static String selector (JobField ... fields ) {
152
- Set <String > fieldStrings = Sets .newHashSetWithExpectedSize (fields .length + 2 );
153
- fieldStrings .add (JOB_REFERENCE .selector ());
154
- fieldStrings .add (CONFIGURATION .selector ());
155
- for (JobField field : fields ) {
156
- fieldStrings .add (field .selector ());
157
- }
158
- return Joiner .on (',' ).join (fieldStrings );
159
- }
160
142
}
161
143
162
144
/**
@@ -210,7 +192,8 @@ private DatasetOption(BigQueryRpc.Option option, Object value) {
210
192
* returned, even if not specified.
211
193
*/
212
194
public static DatasetOption fields (DatasetField ... fields ) {
213
- return new DatasetOption (BigQueryRpc .Option .FIELDS , DatasetField .selector (fields ));
195
+ return new DatasetOption (BigQueryRpc .Option .FIELDS ,
196
+ Helper .selector (DatasetField .REQUIRED_FIELDS , fields ));
214
197
}
215
198
}
216
199
@@ -279,7 +262,8 @@ private TableOption(BigQueryRpc.Option option, Object value) {
279
262
* of {@link Table#definition()}) are always returned, even if not specified.
280
263
*/
281
264
public static TableOption fields (TableField ... fields ) {
282
- return new TableOption (BigQueryRpc .Option .FIELDS , TableField .selector (fields ));
265
+ return new TableOption (BigQueryRpc .Option .FIELDS ,
266
+ Helper .selector (TableField .REQUIRED_FIELDS , fields ));
283
267
}
284
268
}
285
269
@@ -376,10 +360,8 @@ public static JobListOption pageToken(String pageToken) {
376
360
* listing jobs.
377
361
*/
378
362
public static JobListOption fields (JobField ... fields ) {
379
- String selector = JobField .selector (fields );
380
- StringBuilder builder = new StringBuilder ();
381
- builder .append ("etag,jobs(" ).append (selector ).append (",state,errorResult),nextPageToken" );
382
- return new JobListOption (BigQueryRpc .Option .FIELDS , builder .toString ());
363
+ return new JobListOption (BigQueryRpc .Option .FIELDS ,
364
+ Helper .listSelector ("jobs" , JobField .REQUIRED_FIELDS , fields , "state" , "errorResult" ));
383
365
}
384
366
}
385
367
@@ -402,7 +384,8 @@ private JobOption(BigQueryRpc.Option option, Object value) {
402
384
* returned, even if not specified.
403
385
*/
404
386
public static JobOption fields (JobField ... fields ) {
405
- return new JobOption (BigQueryRpc .Option .FIELDS , JobField .selector (fields ));
387
+ return new JobOption (BigQueryRpc .Option .FIELDS ,
388
+ Helper .selector (JobField .REQUIRED_FIELDS , fields ));
406
389
}
407
390
}
408
391
0 commit comments