// 
// Decompiled by Procyon v0.6.0
// 

package org.bson.codecs;

import java.util.Iterator;
import org.bson.codecs.configuration.CodecConfigurationException;
import org.bson.BsonType;
import org.bson.assertions.Assertions;
import org.bson.codecs.configuration.CodecRegistry;

public class BsonTypeCodecMap
{
    private final BsonTypeClassMap bsonTypeClassMap;
    private final Codec<?>[] codecs;
    
    public BsonTypeCodecMap(final BsonTypeClassMap bsonTypeClassMap, final CodecRegistry codecRegistry) {
        this.codecs = new Codec[256];
        this.bsonTypeClassMap = Assertions.notNull("bsonTypeClassMap", bsonTypeClassMap);
        Assertions.notNull("codecRegistry", codecRegistry);
        for (final BsonType cur : bsonTypeClassMap.keys()) {
            final Class<?> clazz = bsonTypeClassMap.get(cur);
            if (clazz != null) {
                try {
                    this.codecs[cur.getValue()] = codecRegistry.get(clazz);
                }
                catch (final CodecConfigurationException ex) {}
            }
        }
    }
    
    public Codec<?> get(final BsonType bsonType) {
        final Codec<?> codec = this.codecs[bsonType.getValue()];
        if (codec != null) {
            return codec;
        }
        final Class<?> clazz = this.bsonTypeClassMap.get(bsonType);
        if (clazz == null) {
            throw new CodecConfigurationException(String.format("No class mapped for BSON type %s.", bsonType));
        }
        throw new CodecConfigurationException(String.format("Can't find a codec for %s.", clazz));
    }
}
