/**
* Copyright (c) 2008 - 2011 10gen, Inc. <http://10gen.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 com.mongodb;
import org.bson.*;
import org.bson.io.*;
import static org.bson.BSON.EOO;
import static org.bson.BSON.OBJECT;
import static org.bson.BSON.REF;
import org.bson.types.*;
public class DefaultDBEncoder extends BasicBSONEncoder implements DBEncoder {
public int writeObject( OutputBuffer buf, BSONObject o ){
set( buf );
int x = super.putObject( o );
done();
return x;
}
static class DefaultFactory implements DBEncoderFactory {
@Override
public DBEncoder create( ){
return new DefaultDBEncoder( );
}
}
@SuppressWarnings("deprecation")
protected boolean putSpecial( String name , Object val ){
if ( val instanceof DBPointer ){
DBPointer r = (DBPointer)val;
putDBPointer( name , r._ns , (ObjectId)r._id );
return true;
}
if ( val instanceof DBRefBase ){
putDBRef( name, (DBRefBase)val );
return true;
}
return false;
}
protected void putDBPointer( String name , String ns , ObjectId oid ){
_put( REF , name );
_putValueString( ns );
_buf.writeInt( oid._time() );
_buf.writeInt( oid._machine() );
_buf.writeInt( oid._inc() );
}
protected void putDBRef( String name, DBRefBase ref ){
_put( OBJECT , name );
final int sizePos = _buf.getPosition();
_buf.writeInt( 0 );
_putObjectField( "$ref" , ref.getRef() );
_putObjectField( "$id" , ref.getId() );
_buf.write( EOO );
_buf.writeInt( sizePos , _buf.getPosition() - sizePos );
}
public static DBEncoderFactory FACTORY = new DefaultFactory();
public DefaultDBEncoder( ){
}
}