public <R> R copyPropertiesFrom( final BeanWrapper<Neo4jPersistentEntity<R>, R> wrapper, S source, Neo4jPersistentEntity<R> persistentEntity, final MappingPolicy mappingPolicy, final Neo4jTemplate template) { final R entity = wrapper.getBean(); final EntityState<S> entityState = entityStateFactory.getEntityState(entity, false, template); entityState.setPersistentState(source); persistentEntity.doWithProperties( new PropertyHandler<Neo4jPersistentProperty>() { @Override public void doWithPersistentProperty(Neo4jPersistentProperty property) { copyEntityStatePropertyValue( property, entityState, wrapper, property.getMappingPolicy()); // TODO intelligent // mappingPolicy.combineWith(property.getMappingPolicy()) } }); persistentEntity.doWithAssociations( new AssociationHandler<Neo4jPersistentProperty>() { @Override public void doWithAssociation(Association<Neo4jPersistentProperty> association) { final Neo4jPersistentProperty property = association.getInverse(); copyEntityStatePropertyValue( property, entityState, wrapper, property.getMappingPolicy()); // TODO intelligent // mappingPolicy.combineWith(property.getMappingPolicy()) } }); return entity; }
public <R> void copyPropertiesTo( final BeanWrapper<Neo4jPersistentEntity<R>, R> wrapper, S target, Neo4jPersistentEntity<R> persistentEntity, MappingPolicy mappingPolicy, final Neo4jTemplate template) { final Transaction tx = template.getGraphDatabase().beginTx(); try { final EntityState<S> entityState = entityStateFactory.getEntityState(wrapper.getBean(), false, template); entityState.setPersistentState(target); entityState.persist(); // todo take mapping policies for attributes into account persistentEntity.doWithProperties( new PropertyHandler<Neo4jPersistentProperty>() { @Override public void doWithPersistentProperty(Neo4jPersistentProperty property) { setEntityStateValue(property, entityState, wrapper, property.getMappingPolicy()); } }); // todo take mapping policies for relationships into account persistentEntity.doWithAssociations( new AssociationHandler<Neo4jPersistentProperty>() { @Override public void doWithAssociation(Association<Neo4jPersistentProperty> association) { final Neo4jPersistentProperty property = association.getInverse(); setEntityStateValue(property, entityState, wrapper, property.getMappingPolicy()); } }); tx.success(); } catch (Throwable t) { tx.failure(); if (t instanceof Error) throw (Error) t; if (t instanceof RuntimeException) throw (RuntimeException) t; throw new org.springframework.data.neo4j.core.UncategorizedGraphStoreException( "Error copying properties from " + persistentEntity + " to " + target, t); } finally { tx.close(); } }