/src/main/com/mongodb/util/JSONCallback.java
https://github.com/dixcychaitanya/mongo-java-driver · Java · 154 lines · 124 code · 12 blank · 18 comment · 40 complexity · 37aa40982fe790b28db4d059f70fd83b MD5 · raw file
- // JSONCallback.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.util;
- import java.text.ParsePosition;
- import java.text.SimpleDateFormat;
- import java.util.GregorianCalendar;
- import java.util.SimpleTimeZone;
- import java.util.UUID;
- import java.util.regex.Pattern;
- import org.bson.BSON;
- import org.bson.BSONObject;
- import org.bson.BasicBSONCallback;
- import org.bson.types.BSONTimestamp;
- import org.bson.types.Code;
- import org.bson.types.CodeWScope;
- import org.bson.types.MaxKey;
- import org.bson.types.MinKey;
- import org.bson.types.ObjectId;
- import com.mongodb.BasicDBList;
- import com.mongodb.BasicDBObject;
- import com.mongodb.DBObject;
- import com.mongodb.DBRef;
- public class JSONCallback extends BasicBSONCallback {
-
- @Override
- public BSONObject create(){
- return new BasicDBObject();
- }
-
- @Override
- protected BSONObject createList() {
- return new BasicDBList();
- }
-
- public void objectStart(boolean array, String name){
- _lastArray = array;
- super.objectStart( array , name );
- }
- public Object objectDone(){
- String name = curName();
- Object o = super.objectDone();
- BSONObject b = (BSONObject)o;
- // override the object if it's a special type
- if ( ! _lastArray ) {
- if ( b.containsField( "$oid" ) ) {
- o = new ObjectId((String)b.get("$oid"));
- if (!isStackEmpty()) {
- gotObjectId( name, (ObjectId)o);
- } else {
- setRoot(o);
- }
- } else if ( b.containsField( "$date" ) ) {
- SimpleDateFormat format =
- new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
- GregorianCalendar calendar = new GregorianCalendar(new SimpleTimeZone(0, "GMT"));
- format.setCalendar(calendar);
- String txtdate = (String) b.get("$date");
- o = format.parse(txtdate, new ParsePosition(0));
- if (o == null) {
- // try older format with no ms
- format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
- format.setCalendar(calendar);
- o = format.parse(txtdate, new ParsePosition(0));
- }
- if (!isStackEmpty()) {
- cur().put( name, o );
- } else {
- setRoot(o);
- }
- } else if ( b.containsField( "$regex" ) ) {
- o = Pattern.compile( (String)b.get( "$regex" ),
- BSON.regexFlags( (String)b.get( "$options" )) );
- if (!isStackEmpty()) {
- cur().put( name, o );
- } else {
- setRoot(o);
- }
- } else if ( b.containsField( "$ts" ) ) {
- Long ts = ((Number)b.get("$ts")).longValue();
- Long inc = ((Number)b.get("$inc")).longValue();
- o = new BSONTimestamp(ts.intValue(), inc.intValue());
- if (!isStackEmpty()) {
- cur().put( name, o );
- } else {
- setRoot(o);
- }
- } else if ( b.containsField( "$code" ) ) {
- if (b.containsField("$scope")) {
- o = new CodeWScope((String)b.get("$code"), (DBObject)b.get("$scope"));
- } else {
- o = new Code((String)b.get("$code"));
- }
- if (!isStackEmpty()) {
- cur().put( name, o );
- } else {
- setRoot(o);
- }
- } else if ( b.containsField( "$ref" ) ) {
- o = new DBRef(null, (String)b.get("$ref"), b.get("$id"));
- if (!isStackEmpty()) {
- cur().put( name, o );
- } else {
- setRoot(o);
- }
- } else if ( b.containsField( "$minKey" ) ) {
- o = new MinKey();
- if (!isStackEmpty()) {
- cur().put( name, o );
- } else {
- setRoot(o);
- }
- } else if ( b.containsField( "$maxKey" ) ) {
- o = new MaxKey();
- if (!isStackEmpty()) {
- cur().put( name, o );
- } else {
- setRoot(o);
- }
- } else if ( b.containsField( "$uuid" ) ) {
- o = UUID.fromString((String)b.get("$uuid"));
- if (!isStackEmpty()) {
- cur().put( name, o );
- } else {
- setRoot(o);
- }
- }
- }
- return o;
- }
- private boolean _lastArray = false;
- }