/*
 * Copyright 2008-present MongoDB, Inc.
 *
 * 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.bson.codecs;

import org.bson.BsonDbPointer;
import org.bson.BsonRegularExpression;
import org.bson.BsonTimestamp;
import org.bson.BsonType;
import org.bson.BsonUndefined;
import org.bson.Document;
import org.bson.types.Binary;
import org.bson.types.Code;
import org.bson.types.CodeWithScope;
import org.bson.types.Decimal128;
import org.bson.types.MaxKey;
import org.bson.types.MinKey;
import org.bson.types.ObjectId;
import org.bson.types.Symbol;

import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

A map from a BSON types to the Class to which it should be decoded. This class is useful if, for example, you want to change the default decoding of BSON DATE to something besides java.util.Date.

The default mappings are:

  • DOCUMENT: org.bson.Document.class
  • ARRAY: java.util.List.class
  • DATE_TIME: java.util.Date.class
  • BOOLEAN: java.lang.Boolean.class
  • DOUBLE: java.lang.Double.class
  • INT32: java.lang.Integer.class
  • INT64: java.lang.Long.class
  • DECIMAL128: org.bson.types.Decimal128.class
  • STRING: java.lang.String.class
  • BINARY: org.bson.types.Binary.class
  • OBJECT_ID: org.bson.types.ObjectId.class
  • REGULAR_EXPRESSION: org.bson.types.RegularExpression.class
  • SYMBOL: org.bson.types.Symbol.class
  • DB_POINTER: org.bson.types.DBPointer.class
  • MAX_KEY: org.bson.types.MaxKey.class
  • MIN_KEY: org.bson.types.MinKey.class
  • JAVASCRIPT: org.bson.types.Code.class
  • JAVASCRIPT_WITH_SCOPE: org.bson.types.CodeWithScope.class
  • TIMESTAMP: org.bson.types.BSONTimestamp.class
  • UNDEFINED: org.bson.types.Undefined.class
Since:3.0
/** * <p>A map from a BSON types to the Class to which it should be decoded. This class is useful if, for example, * you want to change the default decoding of BSON DATE to something besides {@code java.util.Date}.</p> * * <p>The default mappings are:</p> * * <ul> * <li><em>DOCUMENT</em>: {@code org.bson.Document.class} </li> * <li><em>ARRAY</em>: {@code java.util.List.class} </li> * <li><em>DATE_TIME</em>: {@code java.util.Date.class} </li> * <li><em>BOOLEAN</em>: {@code java.lang.Boolean.class} </li> * <li><em>DOUBLE</em>: {@code java.lang.Double.class} </li> * <li><em>INT32</em>: {@code java.lang.Integer.class} </li> * <li><em>INT64</em>: {@code java.lang.Long.class} </li> * <li><em>DECIMAL128</em>: {@code org.bson.types.Decimal128.class} </li> * <li><em>STRING</em>: {@code java.lang.String.class} </li> * <li><em>BINARY</em>: {@code org.bson.types.Binary.class} </li> * <li><em>OBJECT_ID</em>: {@code org.bson.types.ObjectId.class} </li> * <li><em>REGULAR_EXPRESSION</em>: {@code org.bson.types.RegularExpression.class} </li> * <li><em>SYMBOL</em>: {@code org.bson.types.Symbol.class} </li> * <li><em>DB_POINTER</em>: {@code org.bson.types.DBPointer.class} </li> * <li><em>MAX_KEY</em>: {@code org.bson.types.MaxKey.class} </li> * <li><em>MIN_KEY</em>: {@code org.bson.types.MinKey.class} </li> * <li><em>JAVASCRIPT</em>: {@code org.bson.types.Code.class} </li> * <li><em>JAVASCRIPT_WITH_SCOPE</em>: {@code org.bson.types.CodeWithScope.class} </li> * <li><em>TIMESTAMP</em>: {@code org.bson.types.BSONTimestamp.class} </li> * <li><em>UNDEFINED</em>: {@code org.bson.types.Undefined.class} </li> * </ul> * * @since 3.0 */
public class BsonTypeClassMap { private final Map<BsonType, Class<?>> map = new HashMap<BsonType, Class<?>>();
Construct an instance with the default mapping, but replacing the default mapping with any values contained in the given map. This allows a caller to easily replace a single or a few mappings, while leaving the rest at their default values.
Params:
  • replacementsForDefaults – the replacement mappings
/** * Construct an instance with the default mapping, but replacing the default mapping with any values contained in the given map. * This allows a caller to easily replace a single or a few mappings, while leaving the rest at their default values. * * @param replacementsForDefaults the replacement mappings */
public BsonTypeClassMap(final Map<BsonType, Class<?>> replacementsForDefaults) { addDefaults(); map.putAll(replacementsForDefaults); }
Construct an instance with the default mappings.
/** * Construct an instance with the default mappings. */
public BsonTypeClassMap() { this(Collections.<BsonType, Class<?>>emptyMap()); } Set<BsonType> keys() { return map.keySet(); }
Gets the Class that is mapped to the given BSON type.
Params:
  • bsonType – the BSON type
Returns:the Class that is mapped to the BSON type
/** * Gets the Class that is mapped to the given BSON type. * * @param bsonType the BSON type * @return the Class that is mapped to the BSON type */
public Class<?> get(final BsonType bsonType) { return map.get(bsonType); } private void addDefaults() { map.put(BsonType.ARRAY, List.class); map.put(BsonType.BINARY, Binary.class); map.put(BsonType.BOOLEAN, Boolean.class); map.put(BsonType.DATE_TIME, Date.class); map.put(BsonType.DB_POINTER, BsonDbPointer.class); map.put(BsonType.DOCUMENT, Document.class); map.put(BsonType.DOUBLE, Double.class); map.put(BsonType.INT32, Integer.class); map.put(BsonType.INT64, Long.class); map.put(BsonType.DECIMAL128, Decimal128.class); map.put(BsonType.MAX_KEY, MaxKey.class); map.put(BsonType.MIN_KEY, MinKey.class); map.put(BsonType.JAVASCRIPT, Code.class); map.put(BsonType.JAVASCRIPT_WITH_SCOPE, CodeWithScope.class); map.put(BsonType.OBJECT_ID, ObjectId.class); map.put(BsonType.REGULAR_EXPRESSION, BsonRegularExpression.class); map.put(BsonType.STRING, String.class); map.put(BsonType.SYMBOL, Symbol.class); map.put(BsonType.TIMESTAMP, BsonTimestamp.class); map.put(BsonType.UNDEFINED, BsonUndefined.class); } @Override public boolean equals(final Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } final BsonTypeClassMap that = (BsonTypeClassMap) o; if (!map.equals(that.map)) { return false; } return true; } @Override public int hashCode() { return map.hashCode(); } }