Skip to content

Commit cbd9b63

Browse files
Fixes on IncrementalItem hierarchy
1 parent 691d138 commit cbd9b63

3 files changed

Lines changed: 44 additions & 51 deletions

File tree

src/main/java/graphql/incremental/DeferredItem.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package graphql.incremental;
22

33
import graphql.ExperimentalApi;
4+
import graphql.GraphQLError;
45

56
import java.util.LinkedHashMap;
7+
import java.util.List;
68
import java.util.Map;
79

810
@ExperimentalApi
911
public class DeferredItem extends IncrementalItem {
1012
private final Object data;
1113

12-
private DeferredItem(Object data, IncrementalItem incrementalExecutionResult) {
13-
super(incrementalExecutionResult);
14+
private DeferredItem(Object data, List<Object> path, List<GraphQLError> errors, Map<Object, Object> extensions) {
15+
super(path, errors, extensions);
1416
this.data = data;
1517
}
1618

@@ -34,23 +36,23 @@ public static DeferredItem.Builder newDeferredItem() {
3436
return new DeferredItem.Builder();
3537
}
3638

37-
public static class Builder extends IncrementalItem.Builder {
39+
public static class Builder extends IncrementalItem.Builder<DeferredItem> {
3840
private Object data = null;
39-
private final IncrementalItem.Builder builder = IncrementalItem.newIncrementalExecutionResult();
4041

4142
public Builder data(Object data) {
4243
this.data = data;
4344
return this;
4445
}
4546

46-
public Builder from(IncrementalItem incrementalExecutionResult) {
47-
builder.from(incrementalExecutionResult);
47+
public Builder from(DeferredItem deferredItem) {
48+
super.from(deferredItem);
49+
this.data = deferredItem.data;
4850
return this;
4951
}
5052

51-
public IncrementalItem build() {
52-
IncrementalItem build = builder.build();
53-
return new DeferredItem(data, build);
53+
@Override
54+
public DeferredItem build() {
55+
return new DeferredItem(data, this.path, this.errors, this.extensions);
5456
}
5557
}
5658
}

src/main/java/graphql/incremental/IncrementalItem.java

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,30 @@
1212
import static java.util.stream.Collectors.toList;
1313

1414
@ExperimentalApi
15-
public class IncrementalItem {
15+
public abstract class IncrementalItem {
1616
private final List<Object> path;
1717
private final List<GraphQLError> errors;
1818
private final transient Map<Object, Object> extensions;
1919

20-
private IncrementalItem(List<Object> path, List<GraphQLError> errors, Map<Object, Object> extensions) {
20+
protected IncrementalItem(List<Object> path, List<GraphQLError> errors, Map<Object, Object> extensions) {
2121
this.path = path;
2222
this.errors = errors;
2323
this.extensions = extensions;
2424
}
2525

26-
IncrementalItem(IncrementalItem incrementalItem) {
27-
this(incrementalItem.getPath(), incrementalItem.getErrors(), incrementalItem.getExtensions());
28-
}
29-
3026
public List<Object> getPath() {
31-
return null;
27+
return this.path;
3228
}
3329

3430
public List<GraphQLError> getErrors() {
35-
return null;
31+
return this.errors;
3632
}
3733

3834
public Map<Object, Object> getExtensions() {
39-
return null;
35+
return this.extensions;
4036
}
4137

42-
public Map<String, Object> toSpecification() {
38+
protected Map<String, Object> toSpecification() {
4339
Map<String, Object> result = new LinkedHashMap<>();
4440
if (errors != null && !errors.isEmpty()) {
4541
result.put("errors", errorsToSpec(errors));
@@ -53,66 +49,60 @@ public Map<String, Object> toSpecification() {
5349
return result;
5450
}
5551

56-
private Object errorsToSpec(List<GraphQLError> errors) {
52+
protected Object errorsToSpec(List<GraphQLError> errors) {
5753
return errors.stream().map(GraphQLError::toSpecification).collect(toList());
5854
}
5955

60-
static IncrementalItem.Builder newIncrementalExecutionResult() {
61-
return new IncrementalItem.Builder();
62-
}
56+
protected static abstract class Builder<T extends IncrementalItem> {
57+
protected List<Object> path;
58+
protected List<GraphQLError> errors = new ArrayList<>();
59+
protected Map<Object, Object> extensions;
6360

64-
public static class Builder {
65-
private List<Object> path;
66-
private List<GraphQLError> errors = new ArrayList<>();
67-
private Map<Object, Object> extensions;
68-
69-
public IncrementalItem.Builder from(IncrementalItem incrementalExecutionResult) {
70-
path = incrementalExecutionResult.getPath();
71-
errors = new ArrayList<>(incrementalExecutionResult.getErrors());
72-
extensions = incrementalExecutionResult.getExtensions();
61+
public Builder<T> from(T incrementalExecutionResult) {
62+
this.path = incrementalExecutionResult.getPath();
63+
this.errors = new ArrayList<>(incrementalExecutionResult.getErrors());
64+
this.extensions = incrementalExecutionResult.getExtensions();
7365
return this;
7466
}
7567

76-
public IncrementalItem.Builder path(ResultPath path) {
68+
public Builder<T> path(ResultPath path) {
7769
if (path != null) {
7870
this.path = path.toList();
7971
}
8072
return this;
8173
}
8274

83-
public IncrementalItem.Builder path(List<Object> path) {
75+
public Builder<T> path(List<Object> path) {
8476
this.path = path;
8577
return this;
8678
}
8779

88-
public IncrementalItem.Builder errors(List<GraphQLError> errors) {
80+
public Builder<T> errors(List<GraphQLError> errors) {
8981
this.errors = errors;
9082
return this;
9183
}
9284

93-
public IncrementalItem.Builder addErrors(List<GraphQLError> errors) {
85+
public Builder<T> addErrors(List<GraphQLError> errors) {
9486
this.errors.addAll(errors);
9587
return this;
9688
}
9789

98-
public IncrementalItem.Builder addError(GraphQLError error) {
90+
public Builder<T> addError(GraphQLError error) {
9991
this.errors.add(error);
10092
return this;
10193
}
10294

103-
public IncrementalItem.Builder extensions(Map<Object, Object> extensions) {
95+
public Builder<T> extensions(Map<Object, Object> extensions) {
10496
this.extensions = extensions;
10597
return this;
10698
}
10799

108-
public IncrementalItem.Builder addExtension(String key, Object value) {
100+
public Builder<T> addExtension(String key, Object value) {
109101
this.extensions = (this.extensions == null ? new LinkedHashMap<>() : this.extensions);
110102
this.extensions.put(key, value);
111103
return this;
112104
}
113105

114-
public IncrementalItem build() {
115-
return new IncrementalItem(path, errors, extensions);
116-
}
106+
public abstract T build();
117107
}
118108
}

src/main/java/graphql/incremental/StreamedItem.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.incremental;
22

33
import graphql.ExperimentalApi;
4+
import graphql.GraphQLError;
45

56
import java.util.LinkedHashMap;
67
import java.util.List;
@@ -10,8 +11,8 @@
1011
public class StreamedItem extends IncrementalItem {
1112
private final List<Object> items;
1213

13-
private StreamedItem(List<Object> items, IncrementalItem incrementalExecutionResult) {
14-
super(incrementalExecutionResult);
14+
private StreamedItem(List<Object> items, List<Object> path, List<GraphQLError> errors, Map<Object, Object> extensions) {
15+
super(path, errors, extensions);
1516
this.items = items;
1617
}
1718

@@ -35,23 +36,23 @@ public static StreamedItem.Builder newStreamedItem() {
3536
return new StreamedItem.Builder();
3637
}
3738

38-
public static class Builder extends IncrementalItem.Builder {
39+
public static class Builder extends IncrementalItem.Builder<StreamedItem> {
3940
private List<Object> items = null;
40-
private final IncrementalItem.Builder builder = IncrementalItem.newIncrementalExecutionResult();
4141

4242
public Builder items(List<Object> items) {
4343
this.items = items;
4444
return this;
4545
}
4646

47-
public Builder from(IncrementalItem incrementalExecutionResult) {
48-
builder.from(incrementalExecutionResult);
47+
public Builder from(StreamedItem streamedItem) {
48+
super.from(streamedItem);
49+
this.items = streamedItem.items;
4950
return this;
5051
}
5152

52-
public IncrementalItem build() {
53-
IncrementalItem build = builder.build();
54-
return new StreamedItem(items, build);
53+
@Override
54+
public StreamedItem build() {
55+
return new StreamedItem(items, this.path, this.errors, this.extensions);
5556
}
5657
}
5758
}

0 commit comments

Comments
 (0)