use of com.mongodb.DBObject in project mongo-java-driver by mongodb.
the class JSONTest method testIllegalEscape.
// This is not correct behavior, but adding the test here to document it. It should probably throw a JSONParseException due to the
// illegal escape of \m.
@Test
public void testIllegalEscape() {
DBObject obj = (DBObject) JSON.parse("{ 'x' : '\\m' }");
assertEquals("m", obj.get("x"));
}
use of com.mongodb.DBObject in project mongo-java-driver by mongodb.
the class JSONTest method testRegexNoOptions.
@Test
public void testRegexNoOptions() {
String x = "^Hello$";
String serializedPattern = "{ \"$regex\" : \"" + x + "\"}";
Pattern pattern = Pattern.compile(x);
assertEquals(JSON.serialize(pattern), serializedPattern);
BasicDBObject a = new BasicDBObject("x", pattern);
assertEquals(a.toString(), "{ \"x\" : " + serializedPattern + "}");
DBObject b = (DBObject) JSON.parse(a.toString());
assertEquals(Pattern.class, b.get("x").getClass());
assertEquals(b.toString(), a.toString());
}
use of com.mongodb.DBObject in project mongo-java-driver by mongodb.
the class JSONCallbackTest method encodingHooks.
@Test
public void encodingHooks() {
BSON.addDecodingHook(Date.class, new Transformer() {
@Override
public Object transform(final Object o) {
return ((Date) o).getTime();
}
});
try {
Date now = new Date();
Object parsedDate = JSON.parse("{ \"$date\" : " + now.getTime() + "}");
assertEquals(Long.class, parsedDate.getClass());
DBObject doc = (DBObject) JSON.parse("{ date : { \"$date\" : " + now.getTime() + "} }");
assertEquals(Long.class, doc.get("date").getClass());
} finally {
BSON.removeDecodingHooks(Date.class);
}
}
use of com.mongodb.DBObject in project morphia by mongodb.
the class GeometryConverter method decode.
@Override
public Object decode(final Class<?> targetClass, final Object fromDBObject, final MappedField optionalExtraInfo) {
DBObject dbObject = (DBObject) fromDBObject;
String type = (String) dbObject.get("type");
return getMapper().getConverters().decode(GeoJsonType.fromString(type).getTypeClass(), fromDBObject, optionalExtraInfo);
}
use of com.mongodb.DBObject in project morphia by mongodb.
the class Mapper method toMongoObject.
/**
* Converts a java object to a mongo-compatible object (possibly a DBObject for complex mappings). Very similar to {@link
* Mapper#toDBObject}. Used (mainly) by query/update operations.
*
* @param mf the MappedField for this value
* @param mc the MappedClass for this value
* @param value the value to convert
* @return the MongoDB compatible object
*/
@SuppressWarnings("deprecation")
public Object toMongoObject(final MappedField mf, final MappedClass mc, final Object value) {
if (value == null) {
return null;
}
Object mappedValue = value;
if (value instanceof Query) {
mappedValue = ((QueryImpl) value).getQueryObject();
} else if (isAssignable(mf, value) || isEntity(mc)) {
//convert the value to Key (DBRef) if the field is @Reference or type is Key/DBRef, or if the destination class is an @Entity
try {
if (value instanceof Iterable) {
MappedClass mapped = getMappedClass(mf.getSubClass());
if (mapped != null && (Key.class.isAssignableFrom(mapped.getClazz()) || mapped.getEntityAnnotation() != null)) {
mappedValue = getDBRefs(mf, (Iterable) value);
} else {
if (mf.hasAnnotation(Reference.class)) {
mappedValue = getDBRefs(mf, (Iterable) value);
} else {
mappedValue = toMongoObject(value, false);
}
}
} else {
if (mf != null) {
Reference refAnn = mf.getAnnotation(Reference.class);
Class<?> idType = null;
if (!mf.getType().equals(Key.class) && isMapped(mf.getType())) {
idType = getMappedClass(mf.getType()).getMappedIdField().getType();
}
boolean valueIsIdType = mappedValue.getClass().equals(idType);
if (refAnn != null) {
if (!valueIsIdType) {
Key<?> key = value instanceof Key ? (Key<?>) value : getKey(value);
if (key != null) {
mappedValue = refAnn.idOnly() ? keyToId(key) : keyToDBRef(key);
}
}
} else if (mf.getType().equals(Key.class)) {
mappedValue = keyToDBRef(valueIsIdType ? createKey(mf.getSubClass(), value) : value instanceof Key ? (Key<?>) value : getKey(value));
if (mappedValue == value) {
throw new ValidationException("cannot map to Key<T> field: " + value);
}
}
}
if (mappedValue == value) {
mappedValue = toMongoObject(value, false);
}
}
} catch (Exception e) {
LOG.error("Error converting value(" + value + ") to reference.", e);
mappedValue = toMongoObject(value, false);
}
} else if (mf != null && mf.hasAnnotation(Serialized.class)) {
//serialized
try {
mappedValue = Serializer.serialize(value, !mf.getAnnotation(Serialized.class).disableCompression());
} catch (IOException e) {
throw new RuntimeException(e);
}
} else if (value instanceof DBObject) {
//pass-through
mappedValue = value;
} else {
mappedValue = toMongoObject(value, EmbeddedMapper.shouldSaveClassName(value, mappedValue, mf));
if (mappedValue instanceof BasicDBList) {
final BasicDBList list = (BasicDBList) mappedValue;
if (list.size() != 0) {
if (!EmbeddedMapper.shouldSaveClassName(extractFirstElement(value), list.get(0), mf)) {
for (Object o : list) {
if (o instanceof DBObject) {
((DBObject) o).removeField(CLASS_NAME_FIELDNAME);
}
}
}
}
} else if (mappedValue instanceof DBObject && !EmbeddedMapper.shouldSaveClassName(value, mappedValue, mf)) {
((DBObject) mappedValue).removeField(CLASS_NAME_FIELDNAME);
}
}
return mappedValue;
}
Aggregations