Skip to content

Commit 35a1d3e

Browse files
committed
Updating to graphql-java 17.x
Tests now running and also parseLiteral in place
1 parent 320e3bf commit 35a1d3e

29 files changed

+335
-43
lines changed

build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import java.text.SimpleDateFormat
33

44
plugins {
55
id 'java'
6+
id 'groovy'
67
id 'java-library'
78
id 'maven'
89
id 'maven-publish'
@@ -41,8 +42,9 @@ repositories {
4142
dependencies {
4243
compile "com.graphql-java:graphql-java:0.0.0-2021-06-27T12-22-33-cd2bab76"
4344

44-
testCompile 'org.spockframework:spock-core:1.1-groovy-2.4'
45-
testCompile 'org.codehaus.groovy:groovy-all:2.4.13'
45+
testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5'
46+
testImplementation('org.codehaus.groovy:groovy:2.5.13')
47+
4648
}
4749

4850
task sourcesJar(type: Jar, dependsOn: classes) {

src/main/java/graphql/scalars/alias/AliasedScalar.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,12 @@ public Object parseLiteral(Object input) throws CoercingParseLiteralException {
9191

9292
@Override
9393
public Object parseLiteral(Object input, Map<String, Object> variables) throws CoercingParseLiteralException {
94-
return aliasedScalar.getCoercing().parseLiteral(input, variables);
94+
Coercing<?, ?> c = aliasedScalar.getCoercing();
95+
return c.parseLiteral(input, variables);
9596
}
9697

9798
@Override
98-
public Value valueToLiteral(Object input) {
99+
public Value<?> valueToLiteral(Object input) {
99100
return aliasedScalar.getCoercing().valueToLiteral(input);
100101
}
101102
};

src/main/java/graphql/scalars/datetime/DateScalar.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import graphql.Internal;
44
import graphql.language.StringValue;
5+
import graphql.language.Value;
56
import graphql.schema.Coercing;
67
import graphql.schema.CoercingParseLiteralException;
78
import graphql.schema.CoercingParseValueException;
@@ -81,6 +82,12 @@ public LocalDate parseLiteral(Object input) throws CoercingParseLiteralException
8182
return parseLocalDate(((StringValue) input).getValue(), CoercingParseLiteralException::new);
8283
}
8384

85+
@Override
86+
public Value<?> valueToLiteral(Object input) {
87+
String s = serialize(input);
88+
return StringValue.newStringValue(s).build();
89+
}
90+
8491
private LocalDate parseLocalDate(String s, Function<String, RuntimeException> exceptionMaker) {
8592
try {
8693
TemporalAccessor temporalAccessor = dateFormatter.parse(s);

src/main/java/graphql/scalars/datetime/DateTimeScalar.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import graphql.Internal;
44
import graphql.language.StringValue;
5+
import graphql.language.Value;
56
import graphql.schema.Coercing;
67
import graphql.schema.CoercingParseLiteralException;
78
import graphql.schema.CoercingParseValueException;
@@ -77,6 +78,12 @@ public OffsetDateTime parseLiteral(Object input) throws CoercingParseLiteralExce
7778
return parseOffsetDateTime(((StringValue) input).getValue(), CoercingParseLiteralException::new);
7879
}
7980

81+
@Override
82+
public Value<?> valueToLiteral(Object input) {
83+
String s = serialize(input);
84+
return StringValue.newStringValue(s).build();
85+
}
86+
8087
private OffsetDateTime parseOffsetDateTime(String s, Function<String, RuntimeException> exceptionMaker) {
8188
try {
8289
return OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME);

src/main/java/graphql/scalars/datetime/TimeScalar.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import graphql.Internal;
44
import graphql.language.StringValue;
5+
import graphql.language.Value;
56
import graphql.schema.Coercing;
67
import graphql.schema.CoercingParseLiteralException;
78
import graphql.schema.CoercingParseValueException;
@@ -81,6 +82,12 @@ public OffsetTime parseLiteral(Object input) throws CoercingParseLiteralExceptio
8182
return parseOffsetTime(((StringValue) input).getValue(), CoercingParseLiteralException::new);
8283
}
8384

85+
@Override
86+
public Value<?> valueToLiteral(Object input) {
87+
String s = serialize(input);
88+
return StringValue.newStringValue(s).build();
89+
}
90+
8491
private OffsetTime parseOffsetTime(String s, Function<String, RuntimeException> exceptionMaker) {
8592
try {
8693
TemporalAccessor temporalAccessor = dateFormatter.parse(s);

src/main/java/graphql/scalars/java/JavaPrimitives.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import graphql.language.FloatValue;
55
import graphql.language.IntValue;
66
import graphql.language.StringValue;
7+
import graphql.language.Value;
78
import graphql.schema.Coercing;
89
import graphql.schema.CoercingParseLiteralException;
910
import graphql.schema.CoercingParseValueException;
@@ -12,6 +13,7 @@
1213

1314
import java.math.BigDecimal;
1415
import java.math.BigInteger;
16+
import java.util.Objects;
1517

1618
/**
1719
* Access these via {@link graphql.scalars.ExtendedScalars}
@@ -112,6 +114,12 @@ public Long parseLiteral(Object input) {
112114
"Expected AST type 'IntValue' or 'StringValue' but was '" + typeName(input) + "'."
113115
);
114116
}
117+
118+
@Override
119+
public Value<?> valueToLiteral(Object input) {
120+
Long result = Objects.requireNonNull(convertImpl(input));
121+
return IntValue.newIntValue(BigInteger.valueOf(result)).build();
122+
}
115123
};
116124

117125
GraphQLLong = GraphQLScalarType.newScalar()
@@ -185,6 +193,12 @@ public Short parseLiteral(Object input) {
185193
}
186194
return value.shortValue();
187195
}
196+
197+
@Override
198+
public Value<?> valueToLiteral(Object input) {
199+
Short result = Objects.requireNonNull(convertImpl(input));
200+
return IntValue.newIntValue(BigInteger.valueOf(result)).build();
201+
}
188202
};
189203

190204
GraphQLShort = GraphQLScalarType.newScalar()
@@ -258,6 +272,12 @@ public Byte parseLiteral(Object input) {
258272
}
259273
return value.byteValue();
260274
}
275+
276+
@Override
277+
public Value<?> valueToLiteral(Object input) {
278+
Byte result = Objects.requireNonNull(convertImpl(input));
279+
return IntValue.newIntValue(BigInteger.valueOf(result)).build();
280+
}
261281
};
262282

263283
GraphQLByte = GraphQLScalarType.newScalar()
@@ -339,6 +359,12 @@ public BigInteger parseLiteral(Object input) {
339359
"Expected AST type 'IntValue', 'StringValue' or 'FloatValue' but was '" + typeName(input) + "'."
340360
);
341361
}
362+
363+
@Override
364+
public Value<?> valueToLiteral(Object input) {
365+
BigInteger result = Objects.requireNonNull(convertImpl(input));
366+
return IntValue.newIntValue(result).build();
367+
}
342368
};
343369

344370
GraphQLBigInteger = GraphQLScalarType.newScalar()
@@ -407,6 +433,13 @@ public BigDecimal parseLiteral(Object input) {
407433
"Expected AST type 'IntValue', 'StringValue' or 'FloatValue' but was '" + typeName(input) + "'."
408434
);
409435
}
436+
437+
@Override
438+
public Value<?> valueToLiteral(Object input) {
439+
BigDecimal result = Objects.requireNonNull(convertImpl(input));
440+
return FloatValue.newFloatValue(result).build();
441+
}
442+
410443
};
411444

412445
GraphQLBigDecimal = GraphQLScalarType.newScalar()
@@ -471,6 +504,13 @@ public Character parseLiteral(Object input) {
471504
}
472505
return value.charAt(0);
473506
}
507+
508+
@Override
509+
public Value<?> valueToLiteral(Object input) {
510+
Character result = Objects.requireNonNull(convertImpl(input));
511+
return StringValue.newStringValue(result.toString()).build();
512+
}
513+
474514
};
475515

476516
GraphQLChar = GraphQLScalarType.newScalar()

src/main/java/graphql/scalars/locale/LocaleScalar.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import graphql.Internal;
44
import graphql.language.StringValue;
5+
import graphql.language.Value;
56
import graphql.schema.Coercing;
67
import graphql.schema.CoercingParseLiteralException;
78
import graphql.schema.CoercingParseValueException;
@@ -50,6 +51,8 @@ public Locale parseValue(Object input) throws CoercingParseValueException {
5051
throw new CoercingParseValueException(
5152
"Unable to parse value to 'java.util.Locale' because of: " + e.getMessage());
5253
}
54+
} else if (input instanceof Locale) {
55+
return (Locale) input;
5356
} else {
5457
throw new CoercingParseValueException(
5558
"Expected a 'java.lang.String' object but was " + typeName(input));
@@ -65,6 +68,12 @@ public Locale parseLiteral(Object input) throws CoercingParseLiteralException {
6568
"Expected a 'java.lang.String' object but was " + typeName(input));
6669
}
6770
}
71+
72+
@Override
73+
public Value<?> valueToLiteral(Object input) {
74+
String s = serialize(input);
75+
return StringValue.newStringValue(s).build();
76+
}
6877
};
6978

7079
INSTANCE = GraphQLScalarType.newScalar()

src/main/java/graphql/scalars/numeric/FloatCoercing.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public Double parseLiteral(Object input) throws CoercingParseLiteralException {
3535
}
3636

3737
@Override
38-
public Value valueToLiteral(Object input) {
38+
public Value<?> valueToLiteral(Object input) {
3939
return GraphQLFloat.getCoercing().valueToLiteral(input);
4040
}
4141
}

src/main/java/graphql/scalars/numeric/IntCoercing.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public Integer parseLiteral(Object input) throws CoercingParseLiteralException {
3535
}
3636

3737
@Override
38-
public Value valueToLiteral(Object input) {
38+
public Value<?> valueToLiteral(Object input) {
3939
return GraphQLInt.getCoercing().valueToLiteral(input);
4040
}
4141

src/main/java/graphql/scalars/object/ObjectScalar.java

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,18 @@
1818
import graphql.schema.CoercingParseValueException;
1919
import graphql.schema.CoercingSerializeException;
2020
import graphql.schema.GraphQLScalarType;
21+
import graphql.util.FpKit;
2122

23+
import java.math.BigDecimal;
24+
import java.math.BigInteger;
25+
import java.util.ArrayList;
2226
import java.util.Collections;
2327
import java.util.LinkedHashMap;
2428
import java.util.List;
2529
import java.util.Map;
2630
import java.util.stream.Collectors;
2731

32+
import static graphql.language.ObjectField.newObjectField;
2833
import static graphql.scalars.util.Kit.typeName;
2934

3035
/**
@@ -46,14 +51,16 @@ public Object parseValue(Object input) throws CoercingParseValueException {
4651

4752
@Override
4853
public Object parseLiteral(Object input) throws CoercingParseLiteralException {
54+
// on purpose - object scalars can be null
55+
//noinspection ConstantConditions
4956
return parseLiteral(input, Collections.emptyMap());
5057
}
5158

5259
@Override
5360
public Object parseLiteral(Object input, Map<String, Object> variables) throws CoercingParseLiteralException {
5461
if (!(input instanceof Value)) {
5562
throw new CoercingParseLiteralException(
56-
"Expected AST type 'StringValue' but was '" + typeName(input) + "'."
63+
"Expected AST type 'Value' but was '" + typeName(input) + "'."
5764
);
5865
}
5966
if (input instanceof NullValue) {
@@ -95,6 +102,64 @@ public Object parseLiteral(Object input, Map<String, Object> variables) throws C
95102
}
96103
return Assert.assertShouldNeverHappen("We have covered all Value types");
97104
}
105+
106+
@Override
107+
public Value<?> valueToLiteral(Object input) {
108+
if (input == null) {
109+
return NullValue.newNullValue().build();
110+
}
111+
if (input instanceof String) {
112+
return new StringValue((String) input);
113+
}
114+
if (input instanceof Float) {
115+
return new FloatValue(BigDecimal.valueOf((Float) input));
116+
}
117+
if (input instanceof Double) {
118+
return new FloatValue(BigDecimal.valueOf((Double) input));
119+
}
120+
if (input instanceof BigDecimal) {
121+
return new FloatValue((BigDecimal) input);
122+
}
123+
if (input instanceof BigInteger) {
124+
return new IntValue((BigInteger) input);
125+
}
126+
if (input instanceof Number) {
127+
long l = ((Number) input).longValue();
128+
return new IntValue(BigInteger.valueOf(l));
129+
}
130+
if (input instanceof Boolean) {
131+
return new BooleanValue((Boolean) input);
132+
}
133+
if (FpKit.isIterable(input)) {
134+
return handleIterable(FpKit.toIterable(input));
135+
}
136+
if (input instanceof Map) {
137+
return handleMap((Map<?, ?>) input);
138+
}
139+
throw new UnsupportedOperationException("The ObjectScalar cant handle values of type : " + input.getClass());
140+
}
141+
142+
private Value<?> handleMap(Map<?, ?> map) {
143+
ObjectValue.Builder builder = ObjectValue.newObjectValue();
144+
for (Map.Entry<?, ?> entry : map.entrySet()) {
145+
String name = String.valueOf(entry.getKey());
146+
Value<?> value = valueToLiteral(entry.getValue());
147+
148+
builder.objectField(
149+
newObjectField().name(name).value(value).build()
150+
);
151+
}
152+
return builder.build();
153+
}
154+
155+
@SuppressWarnings("rawtypes")
156+
private Value<?> handleIterable(Iterable<?> input) {
157+
List<Value> values = new ArrayList<>();
158+
for (Object val : input) {
159+
values.add(valueToLiteral(val));
160+
}
161+
return ArrayValue.newArrayValue().values(values).build();
162+
}
98163
};
99164

100165
public static GraphQLScalarType INSTANCE = GraphQLScalarType.newScalar()

0 commit comments

Comments
 (0)