org.jongo.marshall.jackson.bson4jackson.BsonSerializers.java Source code

Java tutorial

Introduction

Here is the source code for org.jongo.marshall.jackson.bson4jackson.BsonSerializers.java

Source

/*
 * Copyright (C) 2011 Benoit GUEROUT <bguerout at gmail dot com> and Yves AMSELLEM <amsellem dot yves at gmail dot com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jongo.marshall.jackson.bson4jackson;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleSerializers;
import org.bson.types.*;

import java.io.IOException;

class BsonSerializers extends SimpleSerializers {
    public BsonSerializers() {
        addSerializer(org.bson.types.ObjectId.class, new BsonObjectIdSerializer());
        addSerializer(BSONTimestamp.class, new BSONTimestampSerializer());
        addSerializer(MinKey.class, new MinKeySerializer());
        addSerializer(MaxKey.class, new MaxKeySerializer());
        addSerializer(Binary.class, new BinarySerializer());
    }

    static class MaxKeySerializer extends JsonSerializer<MaxKey> {

        public void serialize(MaxKey obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
                throws IOException, JsonProcessingException {
            if (jsonGenerator instanceof MongoBsonGenerator) {
                ((MongoBsonGenerator) jsonGenerator).writeMaxKey(obj);
            } else {
                jsonGenerator.writeStartObject();
                jsonGenerator.writeNumberField("$maxKey", 1);
                jsonGenerator.writeEndObject();
            }
        }
    }

    static class MinKeySerializer extends JsonSerializer<MinKey> {

        public void serialize(MinKey obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
                throws IOException, JsonProcessingException {
            if (jsonGenerator instanceof MongoBsonGenerator) {
                ((MongoBsonGenerator) jsonGenerator).writeMinKey(obj);
            } else {
                jsonGenerator.writeStartObject();
                jsonGenerator.writeNumberField("$minKey", 1);
                jsonGenerator.writeEndObject();
            }
        }
    }

    static class BSONTimestampSerializer extends JsonSerializer<BSONTimestamp> {

        public void serialize(BSONTimestamp obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
                throws IOException, JsonProcessingException {
            if (jsonGenerator instanceof MongoBsonGenerator) {
                ((MongoBsonGenerator) jsonGenerator).writeBSONTimestamp(obj);
            } else {
                jsonGenerator.writeStartObject();
                jsonGenerator.writeFieldName("$timestamp");
                jsonGenerator.writeStartObject();
                jsonGenerator.writeNumberField("t", obj.getTime());
                jsonGenerator.writeNumberField("i", obj.getInc());
                jsonGenerator.writeEndObject();
                jsonGenerator.writeEndObject();
            }
        }
    }

    static class BsonObjectIdSerializer extends JsonSerializer<ObjectId> {

        public void serialize(ObjectId obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
                throws IOException, JsonProcessingException {
            if (jsonGenerator instanceof MongoBsonGenerator) {
                ((MongoBsonGenerator) jsonGenerator).writeNativeObjectId(obj);
            } else {
                jsonGenerator.writeStartObject();
                jsonGenerator.writeStringField("$oid", obj.toHexString());
                jsonGenerator.writeEndObject();
            }
        }
    }

    static class BinarySerializer extends JsonSerializer<Binary> {

        public void serialize(Binary obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
                throws IOException, JsonProcessingException {
            if (jsonGenerator instanceof MongoBsonGenerator) {
                ((MongoBsonGenerator) jsonGenerator).writeBinary(obj);
            } else {
                jsonGenerator.writeStartObject();
                jsonGenerator.writeBinaryField("$binary", obj.getData());
                jsonGenerator.writeStringField("$type", Integer.toHexString(obj.getType()).toUpperCase());
                jsonGenerator.writeEndObject();
            }
        }
    }

}