use of org.bson.types.CodeWScope in project mongo-java-driver by mongodb.
the class LazyBSONObject method readValue.
Object readValue(final BsonBinaryReader reader) {
switch(reader.getCurrentBsonType()) {
case DOCUMENT:
return readDocument(reader);
case ARRAY:
return readArray(reader);
case DOUBLE:
return reader.readDouble();
case STRING:
return reader.readString();
case BINARY:
byte binarySubType = reader.peekBinarySubType();
if (BsonBinarySubType.isUuid(binarySubType) && reader.peekBinarySize() == 16) {
return new UuidCodec().decode(reader, DecoderContext.builder().build());
}
BsonBinary binary = reader.readBinaryData();
if (binarySubType == BINARY.getValue() || binarySubType == OLD_BINARY.getValue()) {
return binary.getData();
} else {
return new Binary(binary.getType(), binary.getData());
}
case NULL:
reader.readNull();
return null;
case UNDEFINED:
reader.readUndefined();
return null;
case OBJECT_ID:
return reader.readObjectId();
case BOOLEAN:
return reader.readBoolean();
case DATE_TIME:
return new Date(reader.readDateTime());
case REGULAR_EXPRESSION:
BsonRegularExpression regularExpression = reader.readRegularExpression();
return Pattern.compile(regularExpression.getPattern(), BSON.regexFlags(regularExpression.getOptions()));
case DB_POINTER:
BsonDbPointer dbPointer = reader.readDBPointer();
return callback.createDBRef(dbPointer.getNamespace(), dbPointer.getId());
case JAVASCRIPT:
return new Code(reader.readJavaScript());
case SYMBOL:
return new Symbol(reader.readSymbol());
case JAVASCRIPT_WITH_SCOPE:
return new CodeWScope(reader.readJavaScriptWithScope(), (BSONObject) readJavaScriptWithScopeDocument(reader));
case INT32:
return reader.readInt32();
case TIMESTAMP:
BsonTimestamp timestamp = reader.readTimestamp();
return new BSONTimestamp(timestamp.getTime(), timestamp.getInc());
case INT64:
return reader.readInt64();
case DECIMAL128:
return reader.readDecimal128();
case MIN_KEY:
reader.readMinKey();
return new MinKey();
case MAX_KEY:
reader.readMaxKey();
return new MaxKey();
default:
throw new IllegalArgumentException("unhandled BSON type: " + reader.getCurrentBsonType());
}
}
use of org.bson.types.CodeWScope in project mongo-java-driver by mongodb.
the class JSONSerializersTest method testSerializationByAncestry.
@Test
public void testSerializationByAncestry() {
ClassMapBasedObjectSerializer serializer = new ClassMapBasedObjectSerializer();
// by superclass
serializer.addObjectSerializer(Object.class, new AbstractObjectSerializer() {
@Override
public void serialize(final Object obj, final StringBuilder buf) {
buf.append("serialized as Object class");
}
});
// interface
serializer.addObjectSerializer(java.util.List.class, new AbstractObjectSerializer() {
@Override
public void serialize(final Object obj, final StringBuilder buf) {
buf.append(obj.toString());
}
});
ArrayList<String> list = new ArrayList<String>();
list.add("val1");
StringBuilder buf = new StringBuilder();
serializer.serialize(list, buf);
assertEquals("[val1]", buf.toString());
CodeWScope code = new CodeWScope("code_test", null);
buf = new StringBuilder();
serializer.serialize(code, buf);
assertEquals("serialized as Object class", buf.toString());
}
use of org.bson.types.CodeWScope in project mongo-java-driver by mongodb.
the class JSONSerializersTest method testLegacySerialization.
@Test
public void testLegacySerialization() {
ObjectSerializer serializer = JSONSerializers.getLegacy();
BasicDBObject testObj = new BasicDBObject();
// test ARRAY
BasicDBObject[] a = { new BasicDBObject("object1", "value1"), new BasicDBObject("object2", "value2") };
testObj.put("array", a);
StringBuilder buf = new StringBuilder();
serializer.serialize(a, buf);
assertEquals("[ { \"object1\" : \"value1\"} , { \"object2\" : \"value2\"}]", buf.toString());
// test BINARY
byte[] b = { 1, 2, 3, 4 };
testObj = new BasicDBObject("binary", new org.bson.types.Binary(b));
buf = new StringBuilder();
serializer.serialize(testObj, buf);
assertEquals("{ \"binary\" : <Binary Data>}", buf.toString());
// test BOOLEAN
testObj = new BasicDBObject("boolean", new Boolean(true));
buf = new StringBuilder();
serializer.serialize(testObj, buf);
assertEquals(buf.toString(), "{ \"boolean\" : true}");
// test BSON_TIMESTAMP,
testObj = new BasicDBObject("timestamp", new BSONTimestamp());
buf = new StringBuilder();
serializer.serialize(testObj, buf);
assertEquals("{ \"timestamp\" : { \"$ts\" : 0 , \"$inc\" : 0}}", buf.toString());
// test BYTE_ARRAY
testObj = new BasicDBObject("byte_array", b);
buf = new StringBuilder();
serializer.serialize(testObj, buf);
assertEquals("{ \"byte_array\" : <Binary Data>}", buf.toString());
// test CODE
testObj = new BasicDBObject("code", new Code("test code"));
buf = new StringBuilder();
serializer.serialize(testObj, buf);
assertEquals("{ \"code\" : { \"$code\" : \"test code\"}}", buf.toString());
// test CODE_W_SCOPE
testObj = new BasicDBObject("scope", "scope of code");
CodeWScope codewscope = new CodeWScope("test code", testObj);
buf = new StringBuilder();
serializer.serialize(codewscope, buf);
assertEquals("{ \"$code\" : \"test code\" , \"$scope\" : { \"scope\" : \"scope of code\"}}", buf.toString());
// test DATE
Date d = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setCalendar(new GregorianCalendar(new SimpleTimeZone(0, "GMT")));
buf = new StringBuilder();
serializer.serialize(d, buf);
assertEquals("{ \"$date\" : \"" + format.format(d) + "\"}", buf.toString());
// test DB_OBJECT implicit in preceding tests
// test DB_REF_BASE
DBRef dbref = new com.mongodb.DBRef("test.test", "4d83ab59a39562db9c1ae2af");
buf = new StringBuilder();
serializer.serialize(dbref, buf);
assertEquals("{ \"$ref\" : \"test.test\" , \"$id\" : \"4d83ab59a39562db9c1ae2af\"}", buf.toString());
DBRef dbrefWithDatabaseName = new com.mongodb.DBRef("mydb", "test.test", "4d83ab59a39562db9c1ae2af");
buf = new StringBuilder();
serializer.serialize(dbrefWithDatabaseName, buf);
assertEquals("{ \"$ref\" : \"test.test\" , \"$id\" : \"4d83ab59a39562db9c1ae2af\" , \"$db\" : \"mydb\"}", buf.toString());
// test ITERABLE
BasicBSONList testList = new BasicBSONList();
testList.add(new BasicDBObject("key1", "val1"));
testList.add(new BasicDBObject("key2", "val2"));
buf = new StringBuilder();
serializer.serialize(testList, buf);
assertEquals("[ { \"key1\" : \"val1\"} , { \"key2\" : \"val2\"}]", buf.toString());
// test MAP
Map<String, String> testMap = new TreeMap<String, String>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
buf = new StringBuilder();
serializer.serialize(testMap, buf);
assertEquals("{ \"key1\" : \"val1\" , \"key2\" : \"val2\"}", buf.toString());
// test MAXKEY
buf = new StringBuilder();
serializer.serialize(new MaxKey(), buf);
assertEquals("{ \"$maxKey\" : 1}", buf.toString());
// test MINKEY
buf = new StringBuilder();
serializer.serialize(new MinKey(), buf);
assertEquals("{ \"$minKey\" : 1}", buf.toString());
// test NULL
buf = new StringBuilder();
serializer.serialize(null, buf);
assertEquals(" null ", buf.toString());
// test NUMBER
Random rand = new Random();
long val = rand.nextLong();
Long longVal = new Long(val);
buf = new StringBuilder();
serializer.serialize(longVal, buf);
assertEquals(String.valueOf(val), buf.toString());
// test OBJECT_ID
buf = new StringBuilder();
serializer.serialize(new ObjectId("4d83ab3ea39562db9c1ae2ae"), buf);
assertEquals("{ \"$oid\" : \"4d83ab3ea39562db9c1ae2ae\"}", buf.toString());
// test PATTERN
buf = new StringBuilder();
serializer.serialize(Pattern.compile("test"), buf);
assertEquals("{ \"$regex\" : \"test\"}", buf.toString());
// test STRING
buf = new StringBuilder();
serializer.serialize("test string", buf);
assertEquals("\"test string\"", buf.toString());
// test UUID;
UUID uuid = UUID.randomUUID();
buf = new StringBuilder();
serializer.serialize(uuid, buf);
assertEquals("{ \"$uuid\" : \"" + uuid.toString() + "\"}", buf.toString());
// test Decimal128
Decimal128 decimal128 = Decimal128.parse("3.140");
buf = new StringBuilder();
serializer.serialize(decimal128, buf);
assertEquals("{ \"$numberDecimal\" : \"3.140\"}", buf.toString());
}
use of org.bson.types.CodeWScope in project bson4jackson by michel-kraemer.
the class BsonParserTest method parseCode.
/**
* Test if {@link JavaScript} objects can be deserialized
* @throws Exception if something goes wrong
*/
@Test
public void parseCode() throws Exception {
BSONObject scope = new BasicBSONObject();
scope.put("Int32", 5);
BSONObject o = new BasicBSONObject();
o.put("Code1", new CodeWScope("alert('test');", scope));
o.put("Code2", new Code("alert('Hello');"));
Map<?, ?> data = parseBsonObject(o);
assertEquals(2, data.size());
JavaScript c1 = (JavaScript) data.get("Code1");
JavaScript c2 = (JavaScript) data.get("Code2");
assertEquals("alert('test');", c1.getCode());
assertEquals("alert('Hello');", c2.getCode());
Map<String, Object> c1scope = c1.getScope();
assertEquals(5, c1scope.get("Int32"));
}
use of org.bson.types.CodeWScope in project bson4jackson by michel-kraemer.
the class BsonDeserializersTest method javascript.
/**
* Tests if {@code JavaScript} objects can be deserialized
* @throws Exception if something goes wrong
*/
@Test
public void javascript() throws Exception {
Code code = new Code("code");
TC.J obj = generateAndParse(code, TC.J.class);
assertEquals(code.getCode(), obj.obj.getCode());
CodeWScope codews = new CodeWScope("code", new BasicBSONObject("key", "value"));
obj = generateAndParse(codews, TC.J.class);
assertEquals(code.getCode(), obj.obj.getCode());
assertEquals(codews.getScope().toMap(), obj.obj.getScope());
}
Aggregations