/src/main/com/mongodb/DefaultDBCallback.java
https://github.com/dixcychaitanya/mongo-java-driver · Java · 143 lines · 98 code · 23 blank · 22 comment · 20 complexity · 06463253d145d93c5e8b11db56cba9e6 MD5 · raw file
- // DBCallback.java
- /**
- * Copyright (C) 2008 10gen 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 com.mongodb;
- // Bson
- import java.util.List;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import org.bson.BSONObject;
- import org.bson.BasicBSONCallback;
- import org.bson.types.ObjectId;
- /**
- * This class overrides BasicBSONCallback to implement some extra features specific to the Database.
- * For example DBRef type.
- * @author antoine
- */
- public class DefaultDBCallback extends BasicBSONCallback implements DBCallback {
- static class DefaultFactory implements DBCallbackFactory {
- @Override
- public DBCallback create( DBCollection collection ){
- return new DefaultDBCallback( collection );
- }
- }
- public static DBCallbackFactory FACTORY = new DefaultFactory();
- public DefaultDBCallback( DBCollection coll ){
- _collection = coll;
- _db = _collection == null ? null : _collection.getDB();
- }
- @Override
- @SuppressWarnings("deprecation")
- public void gotDBRef( String name , String ns , ObjectId id ){
- if ( id.equals( Bytes.COLLECTION_REF_ID ) )
- cur().put( name , _collection );
- else
- cur().put( name , new DBPointer( (DBObject)cur() , name , _db , ns , id ) );
- }
- @Override
- public void objectStart(boolean array, String name){
- _lastName = name;
- super.objectStart( array , name );
- }
- @Override
- public Object objectDone(){
- BSONObject o = (BSONObject)super.objectDone();
- if ( ! ( o instanceof List ) &&
- o.containsField( "$ref" ) &&
- o.containsField( "$id" ) ){
- return cur().put( _lastName , new DBRef( _db, o ) );
- }
- return o;
- }
- @Override
- public BSONObject create(){
- return _create( null );
- }
- @Override
- public BSONObject create( boolean array , List<String> path ){
- if ( array )
- return new BasicDBList();
- return _create( path );
- }
- private DBObject _create( List<String> path ){
- Class c = null;
- if ( _collection != null && _collection._objectClass != null){
- if ( path == null || path.size() == 0 ){
- c = _collection._objectClass;
- }
- else {
- StringBuilder buf = new StringBuilder();
- for ( int i=0; i<path.size(); i++ ){
- if ( i > 0 )
- buf.append(".");
- buf.append( path.get(i) );
- }
- c = _collection.getInternalClass( buf.toString() );
- }
- }
- if ( c != null ){
- try {
- return (DBObject)c.newInstance();
- }
- catch ( InstantiationException ie ){
- LOGGER.log( Level.FINE , "can't create a: " + c , ie );
- throw new MongoInternalException( "can't instantiate a : " + c , ie );
- }
- catch ( IllegalAccessException iae ){
- LOGGER.log( Level.FINE , "can't create a: " + c , iae );
- throw new MongoInternalException( "can't instantiate a : " + c , iae );
- }
- }
- if ( _collection != null && _collection._name.equals( "$cmd" ) )
- return new CommandResult();
- return new BasicDBObject();
- }
- DBObject dbget(){
- return (DBObject)get();
- }
- @Override
- public void reset(){
- _lastName = null;
- super.reset();
- }
- private String _lastName;
- final DBCollection _collection;
- final DB _db;
- static final Logger LOGGER = Logger.getLogger( "com.mongo.DECODING" );
- }