Skip to content

Commit 5ff9c7d

Browse files
committed
Implemented decode methods for the Geometry codecs
JAVA-2247
1 parent 678591b commit 5ff9c7d

23 files changed

+1395
-459
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright 2017 MongoDB, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.mongodb.client.model.geojson.codecs;
18+
19+
import com.mongodb.client.model.geojson.Geometry;
20+
import org.bson.BsonReader;
21+
import org.bson.BsonWriter;
22+
import org.bson.codecs.Codec;
23+
import org.bson.codecs.DecoderContext;
24+
import org.bson.codecs.EncoderContext;
25+
import org.bson.codecs.configuration.CodecRegistry;
26+
27+
import static com.mongodb.client.model.geojson.codecs.GeometryDecoderHelper.decodeGeometry;
28+
import static com.mongodb.client.model.geojson.codecs.GeometryEncoderHelper.encodeGeometry;
29+
30+
abstract class AbstractGeometryCodec<T extends Geometry> implements Codec<T> {
31+
private final CodecRegistry registry;
32+
private final Class<T> encoderClass;
33+
34+
AbstractGeometryCodec(final CodecRegistry registry, final Class<T> encoderClass) {
35+
this.registry = registry;
36+
this.encoderClass = encoderClass;
37+
}
38+
39+
@Override
40+
public void encode(final BsonWriter writer, final T value, final EncoderContext encoderContext) {
41+
encodeGeometry(writer, value, encoderContext, registry);
42+
}
43+
44+
@Override
45+
public T decode(final BsonReader reader, final DecoderContext decoderContext) {
46+
return decodeGeometry(reader, getEncoderClass());
47+
}
48+
49+
@Override
50+
public Class<T> getEncoderClass() {
51+
return encoderClass;
52+
}
53+
}

driver-core/src/main/com/mongodb/client/model/geojson/codecs/GeoJsonCodecProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.mongodb.client.model.geojson.codecs;
1818

19+
import com.mongodb.client.model.geojson.Geometry;
1920
import com.mongodb.client.model.geojson.GeometryCollection;
2021
import com.mongodb.client.model.geojson.LineString;
2122
import com.mongodb.client.model.geojson.MultiLineString;
@@ -53,6 +54,8 @@ public <T> Codec<T> get(final Class<T> clazz, final CodecRegistry registry) {
5354
return (Codec<T>) new GeometryCollectionCodec(registry);
5455
} else if (clazz.equals(NamedCoordinateReferenceSystem.class)) {
5556
return (Codec<T>) new NamedCoordinateReferenceSystemCodec();
57+
} else if (clazz.equals(Geometry.class)) {
58+
return (Codec<T>) new GeometryCodec(registry);
5659
}
5760

5861
return null;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2017 MongoDB, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.mongodb.client.model.geojson.codecs;
18+
19+
import com.mongodb.client.model.geojson.Geometry;
20+
import org.bson.codecs.configuration.CodecRegistry;
21+
22+
/**
23+
* A Codec for a GeoJSON Geometry.
24+
*
25+
* @since 3.5
26+
*/
27+
public final class GeometryCodec extends AbstractGeometryCodec<Geometry> {
28+
29+
/**
30+
* Construct a new instance
31+
*
32+
* @param registry the CodecRegistry
33+
*/
34+
public GeometryCodec(final CodecRegistry registry) {
35+
super(registry, Geometry.class);
36+
}
37+
}

driver-core/src/main/com/mongodb/client/model/geojson/codecs/GeometryCodecHelper.java

Lines changed: 0 additions & 89 deletions
This file was deleted.

driver-core/src/main/com/mongodb/client/model/geojson/codecs/GeometryCollectionCodec.java

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -14,66 +14,22 @@
1414

1515
package com.mongodb.client.model.geojson.codecs;
1616

17-
import com.mongodb.client.model.geojson.Geometry;
1817
import com.mongodb.client.model.geojson.GeometryCollection;
19-
import org.bson.BsonReader;
20-
import org.bson.BsonWriter;
21-
import org.bson.codecs.Codec;
22-
import org.bson.codecs.DecoderContext;
23-
import org.bson.codecs.EncoderContext;
2418
import org.bson.codecs.configuration.CodecRegistry;
2519

26-
import static com.mongodb.assertions.Assertions.notNull;
27-
import static com.mongodb.client.model.geojson.codecs.GeometryCodecHelper.encodeCoordinateReferenceSystem;
28-
import static com.mongodb.client.model.geojson.codecs.GeometryCodecHelper.encodeType;
29-
3020
/**
3121
* A Codec for a GeoJSON GeometryCollection.
3222
*
3323
* @since 3.1
3424
*/
35-
public class GeometryCollectionCodec implements Codec<GeometryCollection> {
36-
private final CodecRegistry registry;
25+
public class GeometryCollectionCodec extends AbstractGeometryCodec<GeometryCollection> {
3726

3827
/**
3928
* Constructs an instance.
4029
*
4130
* @param registry the registry
4231
*/
4332
public GeometryCollectionCodec(final CodecRegistry registry) {
44-
this.registry = notNull("registry", registry);
45-
}
46-
47-
@Override
48-
public void encode(final BsonWriter writer, final GeometryCollection value, final EncoderContext encoderContext) {
49-
writer.writeStartDocument();
50-
encodeType(writer, value);
51-
52-
writer.writeName("geometries");
53-
54-
writer.writeStartArray();
55-
for (Geometry geometry : value.getGeometries()) {
56-
encodeGeometry(writer, geometry, encoderContext);
57-
}
58-
writer.writeEndArray();
59-
60-
encodeCoordinateReferenceSystem(writer, value, encoderContext, registry);
61-
writer.writeEndDocument();
62-
}
63-
64-
@SuppressWarnings({"unchecked", "rawtypes"})
65-
private void encodeGeometry(final BsonWriter writer, final Geometry geometry, final EncoderContext encoderContext) {
66-
Codec codec = registry.get(geometry.getClass());
67-
encoderContext.encodeWithChildContext(codec, writer, geometry);
68-
}
69-
70-
@Override
71-
public Class<GeometryCollection> getEncoderClass() {
72-
return GeometryCollection.class;
73-
}
74-
75-
@Override
76-
public GeometryCollection decode(final BsonReader reader, final DecoderContext decoderContext) {
77-
throw new UnsupportedOperationException("Not implemented yet!");
33+
super(registry, GeometryCollection.class);
7834
}
7935
}

0 commit comments

Comments
 (0)