Skip to content

Commit a8fe4ca

Browse files
authored
Simplify OverridableUuidRepresentationCodecRegistry (#1014)
Make it implement CodecProvider instead of CodecRegistry JAVA-4755
1 parent fef2873 commit a8fe4ca

File tree

8 files changed

+28
-148
lines changed

8 files changed

+28
-148
lines changed

bson/src/main/org/bson/codecs/configuration/CodecRegistries.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import org.bson.UuidRepresentation;
2020
import org.bson.codecs.Codec;
21-
import org.bson.internal.OverridableUuidRepresentationCodecRegistry;
2221
import org.bson.internal.ProvidersCodecRegistry;
2322

2423
import java.util.List;
@@ -41,18 +40,7 @@ public final class CodecRegistries {
4140
* @since 4.5
4241
*/
4342
public static CodecRegistry withUuidRepresentation(final CodecRegistry codecRegistry, final UuidRepresentation uuidRepresentation) {
44-
if (codecRegistry instanceof OverridableUuidRepresentationCodecRegistry) {
45-
OverridableUuidRepresentationCodecRegistry overridableUuidRepresentationCodecRegistry =
46-
(OverridableUuidRepresentationCodecRegistry) codecRegistry;
47-
if (overridableUuidRepresentationCodecRegistry.getUuidRepresentation().equals(uuidRepresentation)) {
48-
return codecRegistry;
49-
} else {
50-
return new OverridableUuidRepresentationCodecRegistry(overridableUuidRepresentationCodecRegistry.getWrapped(),
51-
uuidRepresentation);
52-
}
53-
} else {
54-
return new OverridableUuidRepresentationCodecRegistry(codecRegistry, uuidRepresentation);
55-
}
43+
return fromProviders(new OverridableUuidRepresentationCodecProvider(codecRegistry, uuidRepresentation));
5644
}
5745

5846
/**

bson/src/main/org/bson/internal/OverridableUuidRepresentationCodecRegistry.java renamed to bson/src/main/org/bson/codecs/configuration/OverridableUuidRepresentationCodecProvider.java

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,41 +14,24 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.bson.internal;
17+
package org.bson.codecs.configuration;
1818

1919
import org.bson.UuidRepresentation;
2020
import org.bson.codecs.Codec;
2121
import org.bson.codecs.OverridableUuidRepresentationCodec;
22-
import org.bson.codecs.configuration.CodecProvider;
23-
import org.bson.codecs.configuration.CodecRegistry;
2422

2523
import static org.bson.assertions.Assertions.notNull;
2624

27-
public class OverridableUuidRepresentationCodecRegistry implements CycleDetectingCodecRegistry {
25+
final class OverridableUuidRepresentationCodecProvider implements CodecProvider {
2826

2927
private final CodecProvider wrapped;
30-
private final CodecCache codecCache = new CodecCache();
3128
private final UuidRepresentation uuidRepresentation;
3229

33-
public OverridableUuidRepresentationCodecRegistry(final CodecProvider wrapped, final UuidRepresentation uuidRepresentation) {
30+
OverridableUuidRepresentationCodecProvider(final CodecProvider wrapped, final UuidRepresentation uuidRepresentation) {
3431
this.uuidRepresentation = notNull("uuidRepresentation", uuidRepresentation);
3532
this.wrapped = notNull("wrapped", wrapped);
3633
}
3734

38-
public UuidRepresentation getUuidRepresentation() {
39-
return uuidRepresentation;
40-
}
41-
42-
public CodecProvider getWrapped() {
43-
return wrapped;
44-
}
45-
46-
@Override
47-
public <T> Codec<T> get(final Class<T> clazz) {
48-
return get(new ChildCodecRegistry<T>(this, clazz));
49-
}
50-
51-
5235
@Override
5336
@SuppressWarnings({"unchecked"})
5437
public <T> Codec<T> get(final Class<T> clazz, final CodecRegistry registry) {
@@ -59,19 +42,6 @@ public <T> Codec<T> get(final Class<T> clazz, final CodecRegistry registry) {
5942
return codec;
6043
}
6144

62-
@Override
63-
@SuppressWarnings({"unchecked"})
64-
public <T> Codec<T> get(final ChildCodecRegistry<T> context) {
65-
if (!codecCache.containsKey(context.getCodecClass())) {
66-
Codec<T> codec = wrapped.get(context.getCodecClass(), context);
67-
if (codec instanceof OverridableUuidRepresentationCodec) {
68-
codec = ((OverridableUuidRepresentationCodec<T>) codec).withUuidRepresentation(uuidRepresentation);
69-
}
70-
codecCache.put(context.getCodecClass(), codec);
71-
}
72-
return codecCache.getOrThrow(context.getCodecClass());
73-
}
74-
7545
@Override
7646
public boolean equals(final Object o) {
7747
if (this == o) {
@@ -81,7 +51,7 @@ public boolean equals(final Object o) {
8151
return false;
8252
}
8353

84-
OverridableUuidRepresentationCodecRegistry that = (OverridableUuidRepresentationCodecRegistry) o;
54+
OverridableUuidRepresentationCodecProvider that = (OverridableUuidRepresentationCodecProvider) o;
8555

8656
if (!wrapped.equals(that.wrapped)) {
8757
return false;

bson/src/test/unit/org/bson/codecs/configuration/CodeRegistriesSpecification.groovy

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import org.bson.codecs.IntegerCodec
2323
import org.bson.codecs.LongCodec
2424
import org.bson.codecs.UuidCodec
2525
import org.bson.codecs.ValueCodecProvider
26-
import org.bson.internal.OverridableUuidRepresentationCodecRegistry
2726
import org.bson.internal.ProvidersCodecRegistry
2827
import spock.lang.Specification
2928

@@ -78,27 +77,18 @@ class CodeRegistriesSpecification extends Specification {
7877
def 'withUuidRepresentation should apply uuid representation'() {
7978
given:
8079
def registry = fromProviders(new ValueCodecProvider());
81-
82-
when:
8380
def registryWithStandard = withUuidRepresentation(registry, STANDARD)
8481

85-
then:
86-
registryWithStandard instanceof OverridableUuidRepresentationCodecRegistry
87-
(registryWithStandard as OverridableUuidRepresentationCodecRegistry).uuidRepresentation == STANDARD
88-
(registryWithStandard as OverridableUuidRepresentationCodecRegistry).wrapped == registry
89-
9082
when:
91-
def registryWithUnspecified = withUuidRepresentation(registryWithStandard, UNSPECIFIED)
83+
def uuidCodec = registry.get(UUID) as UuidCodec
9284

9385
then:
94-
registryWithUnspecified instanceof OverridableUuidRepresentationCodecRegistry
95-
(registryWithUnspecified as OverridableUuidRepresentationCodecRegistry).uuidRepresentation == UNSPECIFIED
96-
(registryWithUnspecified as OverridableUuidRepresentationCodecRegistry).wrapped == registry
86+
uuidCodec.getUuidRepresentation() == UNSPECIFIED
9787

9888
when:
99-
def registryWithUnspecifiedTwo = withUuidRepresentation(registryWithUnspecified, UNSPECIFIED)
89+
uuidCodec = registryWithStandard.get(UUID) as UuidCodec
10090

10191
then:
102-
registryWithUnspecifiedTwo === registryWithUnspecified
92+
uuidCodec.getUuidRepresentation() == STANDARD
10393
}
10494
}

bson/src/test/unit/org/bson/internal/OverridableUuidRepresentationCodecRegistrySpecification.groovy

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

driver-legacy/src/test/unit/com/mongodb/MongoClientSpecification.groovy

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ import com.mongodb.connection.ClusterSettings
2424
import com.mongodb.internal.connection.Cluster
2525
import org.bson.BsonDocument
2626
import org.bson.Document
27+
import org.bson.codecs.UuidCodec
2728
import org.bson.codecs.ValueCodecProvider
2829
import org.bson.codecs.configuration.CodecRegistry
29-
import org.bson.internal.OverridableUuidRepresentationCodecRegistry
3030
import org.bson.json.JsonObject
3131
import spock.lang.Specification
3232

@@ -37,6 +37,7 @@ import static com.mongodb.ReadPreference.secondary
3737
import static com.mongodb.connection.ClusterConnectionMode.MULTIPLE
3838
import static com.mongodb.connection.ClusterConnectionMode.SINGLE
3939
import static java.util.concurrent.TimeUnit.MILLISECONDS
40+
import static org.bson.UuidRepresentation.C_SHARP_LEGACY
4041
import static org.bson.UuidRepresentation.STANDARD
4142
import static org.bson.codecs.configuration.CodecRegistries.fromProviders
4243
import static spock.util.matcher.HamcrestSupport.expect
@@ -345,17 +346,14 @@ class MongoClientSpecification extends Specification {
345346
given:
346347
def options = MongoClientOptions.builder()
347348
.codecRegistry(codecRegistry)
348-
.uuidRepresentation(STANDARD)
349+
.uuidRepresentation(C_SHARP_LEGACY)
349350
.build()
350351

351352
when:
352353
def client = new MongoClient('localhost', options)
353-
def registry = client.getCodecRegistry()
354354

355355
then:
356-
registry instanceof OverridableUuidRepresentationCodecRegistry
357-
(registry as OverridableUuidRepresentationCodecRegistry).uuidRepresentation == STANDARD
358-
(registry as OverridableUuidRepresentationCodecRegistry).wrapped == codecRegistry
356+
(client.getCodecRegistry().get(UUID) as UuidCodec).getUuidRepresentation() == C_SHARP_LEGACY
359357

360358
cleanup:
361359
client?.close()

driver-sync/src/test/unit/com/mongodb/client/MongoClientSpecification.groovy

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,17 @@ import com.mongodb.internal.client.model.changestream.ChangeStreamLevel
3636
import com.mongodb.internal.connection.Cluster
3737
import org.bson.BsonDocument
3838
import org.bson.Document
39-
import org.bson.codecs.BsonValueCodecProvider
39+
import org.bson.codecs.UuidCodec
4040
import org.bson.codecs.ValueCodecProvider
4141
import org.bson.codecs.configuration.CodecRegistry
42-
import org.bson.internal.OverridableUuidRepresentationCodecRegistry
4342
import spock.lang.Specification
4443

4544
import static com.mongodb.CustomMatchers.isTheSameAs
4645
import static com.mongodb.MongoClientSettings.getDefaultCodecRegistry
4746
import static com.mongodb.ReadPreference.primary
4847
import static com.mongodb.ReadPreference.secondary
4948
import static com.mongodb.client.internal.TestHelper.execute
50-
import static org.bson.UuidRepresentation.STANDARD
49+
import static org.bson.UuidRepresentation.C_SHARP_LEGACY
5150
import static org.bson.UuidRepresentation.UNSPECIFIED
5251
import static org.bson.codecs.configuration.CodecRegistries.fromProviders
5352
import static org.bson.codecs.configuration.CodecRegistries.withUuidRepresentation
@@ -198,20 +197,17 @@ class MongoClientSpecification extends Specification {
198197

199198
def 'should create registry reflecting UuidRepresentation'() {
200199
given:
201-
def codecRegistry = fromProviders([new BsonValueCodecProvider()])
200+
def codecRegistry = fromProviders([new ValueCodecProvider()])
202201
def settings = MongoClientSettings.builder()
203202
.codecRegistry(codecRegistry)
204-
.uuidRepresentation(STANDARD)
203+
.uuidRepresentation(C_SHARP_LEGACY)
205204
.build()
206205

207206
when:
208207
def client = new MongoClientImpl(Stub(Cluster), null, settings, new TestOperationExecutor([]))
209-
def registry = client.getCodecRegistry()
210208

211209
then:
212-
registry instanceof OverridableUuidRepresentationCodecRegistry
213-
(registry as OverridableUuidRepresentationCodecRegistry).uuidRepresentation == STANDARD
214-
(registry as OverridableUuidRepresentationCodecRegistry).wrapped == codecRegistry
210+
(client.getCodecRegistry().get(UUID) as UuidCodec).getUuidRepresentation() == C_SHARP_LEGACY
215211

216212
cleanup:
217213
client?.close()

driver-sync/src/test/unit/com/mongodb/client/internal/MongoCollectionSpecification.groovy

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ import org.bson.Document
8383
import org.bson.codecs.BsonDocumentCodec
8484
import org.bson.codecs.BsonValueCodecProvider
8585
import org.bson.codecs.DocumentCodec
86+
import org.bson.codecs.UuidCodec
8687
import org.bson.codecs.ValueCodecProvider
8788
import org.bson.codecs.configuration.CodecConfigurationException
8889
import org.bson.codecs.configuration.CodecRegistries
8990
import org.bson.conversions.Bson
90-
import org.bson.internal.OverridableUuidRepresentationCodecRegistry
9191
import spock.lang.Specification
9292

9393
import java.util.concurrent.TimeUnit
@@ -105,8 +105,8 @@ import static com.mongodb.internal.bulk.WriteRequest.Type.INSERT
105105
import static com.mongodb.internal.bulk.WriteRequest.Type.REPLACE
106106
import static com.mongodb.internal.bulk.WriteRequest.Type.UPDATE
107107
import static java.util.concurrent.TimeUnit.MILLISECONDS
108+
import static org.bson.UuidRepresentation.C_SHARP_LEGACY
108109
import static org.bson.UuidRepresentation.JAVA_LEGACY
109-
import static org.bson.UuidRepresentation.STANDARD
110110
import static org.bson.codecs.configuration.CodecRegistries.fromProviders
111111
import static spock.util.matcher.HamcrestSupport.expect
112112

@@ -150,14 +150,12 @@ class MongoCollectionSpecification extends Specification {
150150

151151
when:
152152
def collection = new MongoCollectionImpl(namespace, Document, codecRegistry, readPreference, ACKNOWLEDGED,
153-
true, true, readConcern, STANDARD, null, executor).withCodecRegistry(newCodecRegistry)
153+
true, true, readConcern, C_SHARP_LEGACY, null, executor).withCodecRegistry(newCodecRegistry)
154154

155155
then:
156-
collection.getCodecRegistry() instanceof OverridableUuidRepresentationCodecRegistry
157-
(collection.getCodecRegistry() as OverridableUuidRepresentationCodecRegistry).uuidRepresentation == STANDARD
158-
(collection.getCodecRegistry() as OverridableUuidRepresentationCodecRegistry).wrapped == newCodecRegistry
156+
(collection.getCodecRegistry().get(UUID) as UuidCodec).getUuidRepresentation() == C_SHARP_LEGACY
159157
expect collection, isTheSameAs(new MongoCollectionImpl(namespace, Document, collection.getCodecRegistry(), readPreference,
160-
ACKNOWLEDGED, true, true, readConcern, STANDARD, null, executor))
158+
ACKNOWLEDGED, true, true, readConcern, C_SHARP_LEGACY, null, executor))
161159
}
162160

163161
def 'should behave correctly when using withReadPreference'() {

driver-sync/src/test/unit/com/mongodb/client/internal/MongoDatabaseSpecification.groovy

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,17 @@ import org.bson.BsonInt32
4040
import org.bson.Document
4141
import org.bson.codecs.BsonValueCodecProvider
4242
import org.bson.codecs.DocumentCodecProvider
43+
import org.bson.codecs.UuidCodec
4344
import org.bson.codecs.ValueCodecProvider
44-
import org.bson.internal.OverridableUuidRepresentationCodecRegistry
4545
import spock.lang.Specification
4646

4747
import static com.mongodb.CustomMatchers.isTheSameAs
4848
import static com.mongodb.ReadPreference.primary
4949
import static com.mongodb.ReadPreference.primaryPreferred
5050
import static com.mongodb.ReadPreference.secondary
5151
import static com.mongodb.client.internal.TestHelper.execute
52+
import static org.bson.UuidRepresentation.C_SHARP_LEGACY
5253
import static org.bson.UuidRepresentation.JAVA_LEGACY
53-
import static org.bson.UuidRepresentation.STANDARD
5454
import static org.bson.codecs.configuration.CodecRegistries.fromProviders
5555
import static spock.util.matcher.HamcrestSupport.expect
5656

@@ -100,15 +100,13 @@ class MongoDatabaseSpecification extends Specification {
100100

101101
when:
102102
def database = new MongoDatabaseImpl(name, codecRegistry, readPreference, writeConcern, false, true, readConcern,
103-
STANDARD, null, executor)
103+
C_SHARP_LEGACY, null, executor)
104104
.withCodecRegistry(newCodecRegistry)
105105

106106
then:
107-
database.getCodecRegistry() instanceof OverridableUuidRepresentationCodecRegistry
108-
(database.getCodecRegistry() as OverridableUuidRepresentationCodecRegistry).uuidRepresentation == STANDARD
109-
(database.getCodecRegistry() as OverridableUuidRepresentationCodecRegistry).wrapped == newCodecRegistry
107+
(database.getCodecRegistry().get(UUID) as UuidCodec).getUuidRepresentation() == C_SHARP_LEGACY
110108
expect database, isTheSameAs(new MongoDatabaseImpl(name, database.getCodecRegistry(), readPreference, writeConcern,
111-
false, true, readConcern, STANDARD, null, executor))
109+
false, true, readConcern, C_SHARP_LEGACY, null, executor))
112110
}
113111

114112
def 'should behave correctly when using withReadPreference'() {

0 commit comments

Comments
 (0)