@Override protected DBRef asReference(Object constant) { Key<?> key = morphia.getMapper().getKey(constant); return morphia.getMapper().keyToDBRef(key); }
@Override protected DBRef asReferenceKey(Class<?> entity, Object id) { String collection = morphia.getMapper().getCollectionName(entity); Key<?> key = new Key<Object>(entity, collection, id); return morphia.getMapper().keyToDBRef(key); } }
@Override public Object encode(final Object t, final MappedField optionalExtraInfo) { if (t == null) { return null; } return getMapper().keyToDBRef((Key) t); }
private Object getDBRefs(final MappedField field, final Iterable value) { final List<Object> refs = new ArrayList<Object>(); Reference annotation = field.getAnnotation(Reference.class); boolean idOnly = annotation != null && annotation.idOnly(); for (final Object o : value) { Key<?> key = (o instanceof Key) ? (Key<?>) o : getKey(o); refs.add(idOnly ? key.getId() : keyToDBRef(key)); } return refs; }
private void addValue(final List values, final Object o, final Mapper mapper, final boolean idOnly) { if (o == null && mapper.getOptions().isStoreNulls()) { values.add(null); return; } final Key key = o instanceof Key ? (Key) o : getKey(o, mapper); values.add(idOnly ? mapper.keyToId(key) : mapper.keyToDBRef(key)); }
private void writeMap(final MappedField mf, final DBObject dbObject, final String name, final Object fieldValue, final Reference refAnn, final Mapper mapper) { final Map<Object, Object> map = (Map<Object, Object>) fieldValue; if ((map != null)) { final Map values = mapper.getOptions().getObjectFactory().createMap(mf); if (ProxyHelper.isProxy(map) && ProxyHelper.isUnFetched(map)) { final ProxiedEntityReferenceMap proxy = (ProxiedEntityReferenceMap) map; final Map<Object, Key<?>> refMap = proxy.__getReferenceMap(); for (final Map.Entry<Object, Key<?>> entry : refMap.entrySet()) { final Object key = entry.getKey(); values.put(key, refAnn.idOnly() ? mapper.keyToId(entry.getValue()) : mapper.keyToDBRef(entry.getValue())); } } else { for (final Map.Entry<Object, Object> entry : map.entrySet()) { final String strKey = mapper.getConverters().encode(entry.getKey()).toString(); values.put(strKey, refAnn.idOnly() ? mapper.keyToId(getKey(entry.getValue(), mapper)) : mapper.keyToDBRef(getKey(entry.getValue(), mapper))); } } if (!values.isEmpty() || mapper.getOptions().isStoreEmpties()) { dbObject.put(name, values); } } }
private void writeSingle(final DBObject dbObject, final String name, final Object fieldValue, final Reference refAnn, final Mapper mapper) { if (fieldValue == null) { if (mapper.getOptions().isStoreNulls()) { dbObject.put(name, null); } } else { Key<?> key = getKey(fieldValue, mapper); if (refAnn.idOnly()) { Object id = mapper.keyToId(key); if (id != null && mapper.isMapped(id.getClass())) { id = mapper.toMongoObject(id, true); } dbObject.put(name, id); } else { dbObject.put(name, mapper.keyToDBRef(key)); } } }
mappedValue = refAnn.idOnly() ? keyToId(key) : keyToDBRef(key); mappedValue = keyToDBRef(valueIsIdType ? createKey(mf.getSubClass(), value) : value instanceof Key ? (Key<?>) value : getKey(value));