// JSONCallback.java package org.bson; import java.text.*; import java.util.*; import java.util.logging.*; import java.util.regex.*; import org.bson.*; import org.bson.types.*; public class JSONCallback extends BasicBSONCallback { public BSONObject create(){ return new BasicDBObject(); } public BSONObject create( boolean array , List<String> path ){ if ( array ) return new BasicDBList(); return new BasicDBObject(); } public void objectStart(boolean array, String name){ _lastName = name; _lastArray = array; super.objectStart( array , name ); } public Object objectDone(){ Object o = super.objectDone(); BSONObject b = (BSONObject)o; if ( ! _lastArray ) { if ( b.containsKey( "$oid" ) ) { o = new ObjectId((String)b.get("$oid")); if (!isStackEmpty()) { gotObjectId( _lastName, (ObjectId)o); } else { setRoot(o); } } else if ( b.containsKey( "$date" ) ) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); format.setCalendar(new GregorianCalendar(new SimpleTimeZone(0, "GMT"))); o = format.parse((String)b.get("$date"), new ParsePosition(0)); if (!isStackEmpty()) { cur().put( _lastName, o ); } else { setRoot(o); } } else if ( b.containsKey( "$regex" ) ) { o = Pattern.compile( (String)b.get( "$regex" ), BSON.regexFlags( (String)b.get( "$options" )) ); if (!isStackEmpty()) { cur().put( _lastName, o ); } else { setRoot(o); } } } return o; } private String _lastName; private boolean _lastArray = false; }