package org.bson.codecs.pojo;
import org.bson.codecs.Codec;
import org.bson.codecs.configuration.CodecRegistry;
import java.util.ArrayList;
import java.util.List;
class PropertyCodecRegistryImpl implements PropertyCodecRegistry {
private final List<PropertyCodecProvider> propertyCodecProviders;
PropertyCodecRegistryImpl(final PojoCodec<?> pojoCodec, final CodecRegistry codecRegistry,
final List<PropertyCodecProvider> propertyCodecProviders) {
List<PropertyCodecProvider> augmentedProviders = new ArrayList<PropertyCodecProvider>();
if (propertyCodecProviders != null) {
augmentedProviders.addAll(propertyCodecProviders);
}
augmentedProviders.add(new CollectionPropertyCodecProvider());
augmentedProviders.add(new MapPropertyCodecProvider());
augmentedProviders.add(new EnumPropertyCodecProvider(codecRegistry));
augmentedProviders.add(new FallbackPropertyCodecProvider(pojoCodec, codecRegistry));
this.propertyCodecProviders = augmentedProviders;
}
@Override
public <S> Codec<S> get(final TypeWithTypeParameters<S> type) {
for (PropertyCodecProvider propertyCodecProvider : propertyCodecProviders) {
Codec<S> codec = propertyCodecProvider.get(type, this);
if (codec != null) {
return codec;
}
}
return null;
}
}