static

in grails-data-mongodb/bson/src/main/groovy/org/grails/datastore/bson/codecs/CodecExtensions.groovy [86:240]


    static {
        ADDITIONAL_CODECS[IntRange] = new IntRangeCodec()
        ADDITIONAL_CODECS[GStringImpl] = new GStringCodec()
        ADDITIONAL_CODECS[Locale] = new LocaleCodec()
        ADDITIONAL_CODECS[Currency] = new CurrencyCodec()
        ADDITIONAL_CODECS[GString] = new GStringCodec()
        ADDITIONAL_CODECS[List] = new ListCodec()
        ADDITIONAL_CODECS[Map] = new MapCodec()
        ADDITIONAL_CODECS[LinkedHashMap] = new MapCodec()
        ADDITIONAL_CODECS[HashMap] = new MapCodec()
        ADDITIONAL_CODECS[ArrayList] = new ListCodec()
        BSON_VALUE_CONVERTERS[BsonBinary] << new Converter<BsonBinary, byte[]>() {
            @Override
            byte[] convert(BsonBinary source) {
                return source.data
            }
        }
        BSON_VALUE_CONVERTERS[BsonObjectId] << new Converter<BsonObjectId, ObjectId>() {
            @Override
            ObjectId convert(BsonObjectId source) {
                source.value
            }
        }
        BSON_VALUE_CONVERTERS[BsonTimestamp] << new Converter<BsonTimestamp, Date>() {
            @Override
            Date convert(BsonTimestamp source) {
                new Date(source.time * 1000)
            }
        }
        BSON_VALUE_CONVERTERS[BsonDateTime] << new Converter<BsonDateTime, Date>() {
            @Override
            Date convert(BsonDateTime source) {
                new Date(source.value)
            }
        }
        BSON_VALUE_CONVERTERS[BsonString] << new Converter<BsonString, CharSequence>() {
            @Override
            CharSequence convert(BsonString source) {
                source.value
            }
        }
        BSON_VALUE_CONVERTERS[BsonString] << new Converter<BsonString, String>() {
            @Override
            String convert(BsonString source) {
                source.value
            }
        }
        BSON_VALUE_CONVERTERS[BsonRegularExpression] << new Converter<BsonRegularExpression, Pattern>() {
            @Override
            Pattern convert(BsonRegularExpression source) {
                Pattern.compile(source.pattern)
            }
        }
        BSON_VALUE_CONVERTERS[BsonBoolean] << new Converter<BsonBoolean, Boolean>() {
            @Override
            Boolean convert(BsonBoolean source) {
                source.value
            }
        }
        BSON_VALUE_CONVERTERS[BsonNull] << new Converter<BsonNull, Object>() {
            @Override
            Object convert(BsonNull source) {
                return null
            }
        }
        BSON_VALUE_CONVERTERS[BsonDouble] << new Converter<BsonDouble, Double>() {
            @Override
            Double convert(BsonDouble source) {
                source.doubleValue()
            }
        }
        BSON_VALUE_CONVERTERS[BsonDouble] << new Converter<BsonDouble, Float>() {
            @Override
            Float convert(BsonDouble source) {
                source.doubleValue().floatValue()
            }
        }
        BSON_VALUE_CONVERTERS[BsonInt32] << new Converter<BsonInt32, Integer>() {
            @Override
            Integer convert(BsonInt32 source) {
                return source.intValue()
            }
        }
        BSON_VALUE_CONVERTERS[BsonInt32] << new Converter<BsonInt32, Short>() {
            @Override
            Short convert(BsonInt32 source) {
                source.intValue().shortValue()
            }
        }
        BSON_VALUE_CONVERTERS[BsonInt64] << new Converter<BsonInt64, Long>() {
            @Override
            Long convert(BsonInt64 source) {
                source.longValue()
            }
        }
        BSON_VALUE_CONVERTERS[BsonArray] << new Converter<BsonArray, List>() {
            @Override
            List convert(BsonArray source) {
                List list = []
                for(BsonValue v in source) {
                    if(v != null) {
                        def converter = BSON_VALUE_CONVERTERS[v.getClass()]?.first()
                        list << (converter ? converter.convert(v) : v)
                    }
                    else {
                        list << v
                    }
                }
                return list
            }
        }
        BSON_VALUE_CONVERTERS[BsonArray] << new Converter<BsonArray, Object[]>() {
            @Override
            Object[] convert(BsonArray source) {
                Object[] array = new Object[source.size()]
                int i = 0
                for(BsonValue v in source) {
                    if(v != null) {
                        def converter = BSON_VALUE_CONVERTERS[v.getClass()]?.first()
                        array[i++] = (converter ? converter.convert(v) : v)
                    }
                    else {
                        array[i++] = v
                    }
                }
                return array
            }
        }
        BSON_VALUE_CONVERTERS[BsonDocument] << new Converter<BsonDocument, Map<String, Object>>() {
            @Override
            Map<String, Object> convert(BsonDocument source) {
                Map<String, Object> map = [:]

                for(key in source.keySet()) {
                    def v = source[key]
                    if(v != null) {
                        def converter = BSON_VALUE_CONVERTERS[v.getClass()]?.first()
                        map[key] = (converter ? converter.convert(v) : v)
                    }
                    else {
                        map[key] = v
                    }

                }
                return map
            }
        }

        BSON_VALUE_CONVERTERS[BsonDecimal128] << new Converter<BsonDecimal128, BigDecimal>() {
            @Override
            BigDecimal convert(BsonDecimal128 source) {
                return source.decimal128Value().bigDecimalValue()
            }
        }
    }