List of usage examples for org.springframework.data.mongodb.core.mapping MongoPersistentProperty getType
Class<?> getType();
From source file:io.github.carlomicieli.springbooks.test.AbstractMongoDbTests.java
protected void ensureDocumentId(Object savedObject, Object id) { ConversionService conversionService = mongoTemplate.getConverter().getConversionService(); MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext = mongoTemplate .getConverter().getMappingContext(); MongoPersistentEntity<?> persistentEntity = mappingContext.getPersistentEntity(savedObject.getClass()); MongoPersistentProperty idProp = persistentEntity == null ? null : persistentEntity.getIdProperty(); if (idProp == null) { return;/* w w w . j a v a2 s. c o m*/ } BeanWrapper<PersistentEntity<Object, ?>, Object> wrapper = BeanWrapper.create(savedObject, conversionService); Object idValue = wrapper.getProperty(idProp, idProp.getType(), true); if (idValue != null) { return; } wrapper.setProperty(idProp, id); }
From source file:org.oasis.datacore.sdk.data.spring.DatacoreMappingMongoConverter.java
protected void writeInternal(Object obj, final DBObject dbo, MongoPersistentEntity<?> entity) { if (obj == null) { return;//from ww w . j a v a2 s.c om } if (null == entity) { throw new MappingException("No mapping metadata found for entity of type " + obj.getClass().getName()); } final BeanWrapper<MongoPersistentEntity<Object>, Object> wrapper = BeanWrapper.create(obj, conversionService); final MongoPersistentProperty idProperty = entity.getIdProperty(); if (!dbo.containsField("_id") && null != idProperty) { boolean fieldAccessOnly = idProperty.usePropertyAccess() ? false : useFieldAccessOnly; try { Object id = wrapper.getProperty(idProperty, Object.class, fieldAccessOnly); dbo.put("_id", idMapper.convertId(id)); } catch (ConversionException ignored) { } } // Write the properties entity.doWithProperties(new PropertyHandler<MongoPersistentProperty>() { public void doWithPersistentProperty(MongoPersistentProperty prop) { if (prop.equals(idProperty)) { return; } boolean fieldAccessOnly = prop.usePropertyAccess() ? false : useFieldAccessOnly; Object propertyObj = wrapper.getProperty(prop, prop.getType(), fieldAccessOnly); //if (null != propertyObj) { // [Ozwillo] HACK to allow unset / set to null at save if (/*[Ozwillo] HACK*/null != propertyObj && /*[Ozwillo] END*/!conversions.isSimpleType(propertyObj.getClass())) { writePropertyInternal(propertyObj, dbo, prop); } else { writeSimpleInternal(propertyObj, dbo, prop.getFieldName()); } //} // [Ozwillo] HACK } }); entity.doWithAssociations(new AssociationHandler<MongoPersistentProperty>() { public void doWithAssociation(Association<MongoPersistentProperty> association) { MongoPersistentProperty inverseProp = association.getInverse(); Class<?> type = inverseProp.getType(); Object propertyObj = wrapper.getProperty(inverseProp, type, useFieldAccessOnly); //if (null != propertyObj) { // [Ozwillo] HACK to allow unset / set to null at save writePropertyInternal(propertyObj, dbo, inverseProp); //} // [Ozwillo] HACK } }); // [Ozwillo] HACK to persist Datacore model fields at root level NOT FOR NOW /*if ("DCEntity".equals(entity.getName())) { DCEntity dcEntity = (DCEntity) object; DCModel dcModel = dcModelService.getModel(dcEntity.getType()); for (DCField dcField : dcModel.getAllFields()) { } }*/ }
From source file:org.springframework.data.mongodb.core.convert.MappingMongoConverter.java
protected void writeInternal(Object obj, final DBObject dbo, MongoPersistentEntity<?> entity) { if (obj == null) { return;/* w w w. ja v a 2 s . c o m*/ } if (null == entity) { throw new MappingException("No mapping metadata found for entity of type " + obj.getClass().getName()); } final BeanWrapper<MongoPersistentEntity<Object>, Object> wrapper = BeanWrapper.create(obj, conversionService); // Write the ID final MongoPersistentProperty idProperty = entity.getIdProperty(); if (!dbo.containsField("_id") && null != idProperty) { try { Object id = wrapper.getProperty(idProperty, Object.class, useFieldAccessOnly); dbo.put("_id", idMapper.convertId(id)); } catch (ConversionException ignored) { } } // Write the properties entity.doWithProperties(new PropertyHandler<MongoPersistentProperty>() { public void doWithPersistentProperty(MongoPersistentProperty prop) { if (prop.equals(idProperty)) { return; } Object propertyObj = wrapper.getProperty(prop, prop.getType(), useFieldAccessOnly); if (null != propertyObj) { if (!conversions.isSimpleType(propertyObj.getClass())) { writePropertyInternal(propertyObj, dbo, prop); } else { writeSimpleInternal(propertyObj, dbo, prop.getFieldName()); } } } }); entity.doWithAssociations(new AssociationHandler<MongoPersistentProperty>() { public void doWithAssociation(Association<MongoPersistentProperty> association) { MongoPersistentProperty inverseProp = association.getInverse(); Class<?> type = inverseProp.getType(); Object propertyObj = wrapper.getProperty(inverseProp, type, useFieldAccessOnly); if (null != propertyObj) { writePropertyInternal(propertyObj, dbo, inverseProp); } } }); }
From source file:org.springframework.data.mongodb.core.convert.MappingMongoConverter.java
@SuppressWarnings({ "unchecked" }) protected void writePropertyInternal(Object obj, DBObject dbo, MongoPersistentProperty prop) { if (obj == null) { return;// w w w .j a v a 2 s . c o m } String name = prop.getFieldName(); TypeInformation<?> valueType = ClassTypeInformation.from(obj.getClass()); TypeInformation<?> type = prop.getTypeInformation(); if (valueType.isCollectionLike()) { DBObject collectionInternal = createCollection(asCollection(obj), prop); dbo.put(name, collectionInternal); return; } if (valueType.isMap()) { BasicDBObject mapDbObj = new BasicDBObject(); writeMapInternal((Map<Object, Object>) obj, mapDbObj, type); dbo.put(name, mapDbObj); return; } if (prop.isDbReference()) { DBRef dbRefObj = createDBRef(obj, prop.getDBRef()); if (null != dbRefObj) { dbo.put(name, dbRefObj); return; } } // Lookup potential custom target type Class<?> basicTargetType = conversions.getCustomWriteTarget(obj.getClass(), null); if (basicTargetType != null) { dbo.put(name, conversionService.convert(obj, basicTargetType)); return; } BasicDBObject propDbObj = new BasicDBObject(); addCustomTypeKeyIfNecessary(type, obj, propDbObj); MongoPersistentEntity<?> entity = isSubtype(prop.getType(), obj.getClass()) ? mappingContext.getPersistentEntity(obj.getClass()) : mappingContext.getPersistentEntity(type); writeInternal(obj, propDbObj, entity); dbo.put(name, propDbObj); }
From source file:org.springframework.data.mongodb.core.convert.MappingMongoConverter.java
@SuppressWarnings("unchecked") protected Object getValueInternal(MongoPersistentProperty prop, DBObject dbo, StandardEvaluationContext ctx, String spelExpr) {/*w w w .ja v a 2s . c o m*/ Object o; if (null != spelExpr) { Expression x = spelExpressionParser.parseExpression(spelExpr); o = x.getValue(ctx); } else { Object sourceValue = dbo.get(prop.getFieldName()); if (sourceValue == null) { return null; } Class<?> propertyType = prop.getType(); if (conversions.hasCustomReadTarget(sourceValue.getClass(), propertyType)) { return conversionService.convert(sourceValue, propertyType); } if (sourceValue instanceof DBRef) { sourceValue = ((DBRef) sourceValue).fetch(); } if (sourceValue instanceof DBObject) { if (prop.isMap()) { return readMap(prop.getTypeInformation(), (DBObject) sourceValue); } else if (prop.isArray() && sourceValue instanceof BasicDBObject && ((DBObject) sourceValue).keySet().size() == 0) { // It's empty return Array.newInstance(prop.getComponentType(), 0); } else if (prop.isCollectionLike() && sourceValue instanceof BasicDBList) { return readCollectionOrArray( (TypeInformation<? extends Collection<?>>) prop.getTypeInformation(), (BasicDBList) sourceValue); } TypeInformation<?> toType = typeMapper.readType((DBObject) sourceValue, prop.getTypeInformation()); // It's a complex object, have to read it in if (toType != null) { // TODO: why do we remove the type? // dbo.removeField(CUSTOM_TYPE_KEY); o = read(toType, (DBObject) sourceValue); } else { o = read(mappingContext.getPersistentEntity(prop.getTypeInformation()), (DBObject) sourceValue); } } else { o = sourceValue; } } return o; }
From source file:org.springframework.data.mongodb.core.MongoTemplate.java
private void assertUpdateableIdIfNotSet(Object entity) { MongoPersistentEntity<?> persistentEntity = mappingContext.getPersistentEntity(entity.getClass()); MongoPersistentProperty idProperty = persistentEntity.getIdProperty(); if (idProperty == null) { return;// w w w. ja v a2s . com } ConversionService service = mongoConverter.getConversionService(); Object idValue = BeanWrapper.create(entity, service).getProperty(idProperty, Object.class, true); if (idValue == null && !MongoSimpleTypes.AUTOGENERATED_ID_TYPES.contains(idProperty.getType())) { throw new InvalidDataAccessApiUsageException( String.format("Cannot autogenerate id of type %s for entity of type %s!", idProperty.getType().getName(), entity.getClass().getName())); } }
From source file:org.springframework.data.mongodb.core.MongoTemplate.java
/** * Populates the id property of the saved object, if it's not set already. * /* w ww . j a v a2s. c o m*/ * @param savedObject * @param id */ protected void populateIdIfNecessary(Object savedObject, Object id) { if (id == null) { return; } MongoPersistentProperty idProp = getIdPropertyFor(savedObject.getClass()); if (idProp == null) { return; } ConversionService conversionService = mongoConverter.getConversionService(); BeanWrapper<PersistentEntity<Object, ?>, Object> wrapper = BeanWrapper.create(savedObject, conversionService); try { Object idValue = wrapper.getProperty(idProp, idProp.getType(), true); if (idValue != null) { return; } wrapper.setProperty(idProp, id); } catch (IllegalAccessException e) { throw new MappingException(e.getMessage(), e); } catch (InvocationTargetException e) { throw new MappingException(e.getMessage(), e); } }