diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/Neo4jConfiguration.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/Neo4jConfiguration.java index 2f6ddbde3..debdca5d1 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/Neo4jConfiguration.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/config/Neo4jConfiguration.java @@ -16,6 +16,9 @@ package org.springframework.data.neo4j.config; +import javax.persistence.EntityManagerFactory; +import javax.validation.Validator; + import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; @@ -33,6 +36,7 @@ import org.springframework.data.neo4j.core.RelationshipBacked; import org.springframework.data.neo4j.fieldaccess.DelegatingFieldAccessorFactory; import org.springframework.data.neo4j.fieldaccess.Neo4jConversionServiceFactoryBean; import org.springframework.data.neo4j.fieldaccess.NodeDelegatingFieldAccessorFactory; +import org.springframework.data.neo4j.fieldaccess.RelationshipDelegatingFieldAccessorFactory; import org.springframework.data.neo4j.repository.DirectGraphRepositoryFactory; import org.springframework.data.neo4j.support.GraphDatabaseContext; import org.springframework.data.neo4j.support.node.Neo4jNodeBacking; @@ -51,9 +55,6 @@ import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.jta.JtaTransactionManager; import org.springframework.transaction.jta.UserTransactionAdapter; -import javax.persistence.EntityManagerFactory; -import javax.validation.Validator; - /** * Abstract base class for code based configuration of Spring managed Neo4j infrastructure. *

Subclasses are required to provide an implementation of graphDbService .... @@ -149,6 +150,7 @@ public class Neo4jConfiguration { public RelationshipEntityStateFactory relationshipEntityStateFactory() throws Exception { RelationshipEntityStateFactory entityStateFactory = new RelationshipEntityStateFactory(); entityStateFactory.setGraphDatabaseContext(graphDatabaseContext()); + entityStateFactory.setRelationshipDelegatingFieldAccessorFactory(relationshipDelegatingFieldAccessorFactory()); return entityStateFactory; } @@ -175,6 +177,11 @@ public class Neo4jConfiguration { public DelegatingFieldAccessorFactory nodeDelegatingFieldAccessorFactory() throws Exception { return new NodeDelegatingFieldAccessorFactory(graphDatabaseContext()); } + + @Bean + public DelegatingFieldAccessorFactory relationshipDelegatingFieldAccessorFactory() throws Exception { + return new RelationshipDelegatingFieldAccessorFactory(graphDatabaseContext()); + } @Bean public PlatformTransactionManager transactionManager() { diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/fieldaccess/RelationshipDelegatingFieldAccessorFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/fieldaccess/RelationshipDelegatingFieldAccessorFactory.java new file mode 100644 index 000000000..6a9d2f080 --- /dev/null +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/fieldaccess/RelationshipDelegatingFieldAccessorFactory.java @@ -0,0 +1,49 @@ +/** + * Copyright 2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.neo4j.fieldaccess; + +import java.util.Arrays; +import java.util.Collection; + +import org.springframework.data.neo4j.core.NodeBacked; +import org.springframework.data.neo4j.core.RelationshipBacked; +import org.springframework.data.neo4j.support.GraphDatabaseContext; + +public class RelationshipDelegatingFieldAccessorFactory extends DelegatingFieldAccessorFactory { + public RelationshipDelegatingFieldAccessorFactory(GraphDatabaseContext graphDatabaseContext) { + super(graphDatabaseContext); + } + + @Override + protected Collection> createListenerFactories() { + return Arrays.>asList( + new IndexingPropertyFieldAccessorListenerFactory( + graphDatabaseContext, + new PropertyFieldAccessorFactory(graphDatabaseContext.getConversionService()), + new ConvertingNodePropertyFieldAccessorFactory(graphDatabaseContext.getConversionService()) + )); + } + + @Override + protected Collection> createAccessorFactories() { + return Arrays.>asList( + new TransientFieldAccessorFactory(), + new RelationshipNodeFieldAccessorFactory(graphDatabaseContext), + new PropertyFieldAccessorFactory(graphDatabaseContext.getConversionService()), + new ConvertingNodePropertyFieldAccessorFactory(graphDatabaseContext.getConversionService()) + ); + } +} \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/node/NodeEntityStateFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/node/NodeEntityStateFactory.java index f304c58d6..02873f613 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/node/NodeEntityStateFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/node/NodeEntityStateFactory.java @@ -16,6 +16,10 @@ package org.springframework.data.neo4j.support.node; +import javax.annotation.PostConstruct; +import javax.persistence.EntityManagerFactory; +import javax.persistence.PersistenceUnitUtil; + import org.neo4j.graphdb.Node; import org.springframework.data.neo4j.annotation.NodeEntity; import org.springframework.data.neo4j.core.EntityState; @@ -24,10 +28,6 @@ import org.springframework.data.neo4j.fieldaccess.DelegatingFieldAccessorFactory import org.springframework.data.neo4j.fieldaccess.DetachedEntityState; import org.springframework.data.neo4j.support.GraphDatabaseContext; -import javax.annotation.PostConstruct; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceUnitUtil; - public class NodeEntityStateFactory { private GraphDatabaseContext graphDatabaseContext; @@ -61,7 +61,7 @@ public class NodeEntityStateFactory { } public void setNodeDelegatingFieldAccessorFactory( - DelegatingFieldAccessorFactory nodeDelegatingFieldAccessorFactory) { + DelegatingFieldAccessorFactory nodeDelegatingFieldAccessorFactory) { this.nodeDelegatingFieldAccessorFactory = nodeDelegatingFieldAccessorFactory; } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/relationship/RelationshipEntityState.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/relationship/RelationshipEntityState.java index 9862afc20..ff578b4bd 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/relationship/RelationshipEntityState.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/relationship/RelationshipEntityState.java @@ -23,8 +23,6 @@ import org.springframework.data.neo4j.core.RelationshipBacked; import org.springframework.data.neo4j.fieldaccess.*; import org.springframework.data.neo4j.support.GraphDatabaseContext; -import java.util.Arrays; -import java.util.Collection; /** * @author Michael Hunger @@ -34,7 +32,7 @@ public class RelationshipEntityState extends private final GraphDatabaseContext graphDatabaseContext; - public RelationshipEntityState(final Relationship underlyingState, final ENTITY entity, final Class type, final GraphDatabaseContext graphDatabaseContext, final RelationshipStateDelegatingFieldAccessorFactory delegatingFieldAccessorFactory) { + public RelationshipEntityState(final Relationship underlyingState, final ENTITY entity, final Class type, final GraphDatabaseContext graphDatabaseContext, final DelegatingFieldAccessorFactory delegatingFieldAccessorFactory) { super(underlyingState, entity, type, delegatingFieldAccessorFactory); this.graphDatabaseContext = graphDatabaseContext; } @@ -65,30 +63,4 @@ public class RelationshipEntityState extends createAndAssignState(); return entity; } - - public static class RelationshipStateDelegatingFieldAccessorFactory extends DelegatingFieldAccessorFactory { - public RelationshipStateDelegatingFieldAccessorFactory(GraphDatabaseContext graphDatabaseContext) { - super(graphDatabaseContext); - } - - @Override - protected Collection> createListenerFactories() { - return Arrays.>asList( - new IndexingPropertyFieldAccessorListenerFactory( - graphDatabaseContext, - new PropertyFieldAccessorFactory(graphDatabaseContext.getConversionService()), - new ConvertingNodePropertyFieldAccessorFactory(graphDatabaseContext.getConversionService()) - )); - } - - @Override - protected Collection> createAccessorFactories() { - return Arrays.>asList( - new TransientFieldAccessorFactory(), - new RelationshipNodeFieldAccessorFactory(graphDatabaseContext), - new PropertyFieldAccessorFactory(graphDatabaseContext.getConversionService()), - new ConvertingNodePropertyFieldAccessorFactory(graphDatabaseContext.getConversionService()) - ); - } - } } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/relationship/RelationshipEntityStateFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/relationship/RelationshipEntityStateFactory.java index 25a0734ca..609eaba44 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/relationship/RelationshipEntityStateFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/support/relationship/RelationshipEntityStateFactory.java @@ -19,27 +19,25 @@ package org.springframework.data.neo4j.support.relationship; import org.neo4j.graphdb.Relationship; import org.springframework.data.neo4j.core.EntityState; import org.springframework.data.neo4j.core.RelationshipBacked; +import org.springframework.data.neo4j.fieldaccess.DelegatingFieldAccessorFactory; import org.springframework.data.neo4j.support.GraphDatabaseContext; -import javax.annotation.PostConstruct; - public class RelationshipEntityStateFactory { private GraphDatabaseContext graphDatabaseContext; - private RelationshipEntityState.RelationshipStateDelegatingFieldAccessorFactory delegatingFieldAccessorFactory; + private DelegatingFieldAccessorFactory relationshipDelegatingFieldAccessorFactory; public EntityState getEntityState(final RelationshipBacked entity) { - return new RelationshipEntityState(null,entity,entity.getClass(), graphDatabaseContext, delegatingFieldAccessorFactory); + return new RelationshipEntityState(null,entity,entity.getClass(), graphDatabaseContext, relationshipDelegatingFieldAccessorFactory); } public void setGraphDatabaseContext(GraphDatabaseContext graphDatabaseContext) { this.graphDatabaseContext = graphDatabaseContext; } - @PostConstruct - private void setUp() { - this.delegatingFieldAccessorFactory = new RelationshipEntityState.RelationshipStateDelegatingFieldAccessorFactory(graphDatabaseContext); - } - + public void setRelationshipDelegatingFieldAccessorFactory( + DelegatingFieldAccessorFactory delegatingFieldAccessorFactory) { + this.relationshipDelegatingFieldAccessorFactory = delegatingFieldAccessorFactory; + } }