Skip to content

Commit

Permalink
cyclic dependency cleanup, now passing in neo4j-template to some of t…
Browse files Browse the repository at this point in the history
…he inner classes on method call
  • Loading branch information
jexp committed Apr 23, 2012
1 parent 1767e52 commit 2cc97c6
Show file tree
Hide file tree
Showing 36 changed files with 197 additions and 180 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ public privileged aspect Neo4jNodeBacking { // extends AbstractTypeAnnotatingMix
log.error("entityStateFactory not set, not creating accessors for " + entity.getClass());
} else {
if (entity.entityState != null) return;
entity.entityState = entityStateFactory.getEntityState(entity, true);
entity.entityState = entityStateFactory.getEntityState(entity, true, template);
}
}

Expand All @@ -135,7 +135,7 @@ public privileged aspect Neo4jNodeBacking { // extends AbstractTypeAnnotatingMix

public void NodeBacked.setPersistentState(Node n) {
if (this.entityState == null) {
this.entityState = Neo4jNodeBacking.aspectOf().entityStateFactory.getEntityState(this, false);
this.entityState = Neo4jNodeBacking.aspectOf().entityStateFactory.getEntityState(this, false, getTemplate());
}
this.entityState.setPersistentState(n);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public aspect Neo4jRelationshipBacking {
log.error("entityStateFactory not set, not creating accessors for " + entity.getClass());
} else {
if (entity.entityState != null) return;
entity.entityState = entityStateFactory.getEntityState(entity, true);
entity.entityState = entityStateFactory.getEntityState(entity, true, template);
}
}

Expand Down Expand Up @@ -107,7 +107,7 @@ public aspect Neo4jRelationshipBacking {

public void RelationshipBacked.setPersistentState(Relationship r) {
if (this.entityState == null) {
this.entityState = Neo4jRelationshipBacking.aspectOf().entityStateFactory.getEntityState(this, true);
this.entityState = Neo4jRelationshipBacking.aspectOf().entityStateFactory.getEntityState(this, true, getTemplate());
}
this.entityState.setPersistentState(r);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void shouldConvertNodePathToEntityPath() throws Exception {
Person michael = persist(new Person("Michael", 36));
Node node = getNodeState(michael);
NodePath path = new NodePath(node);
EntityPath<Person, Person> entityPath = new ConvertingEntityPath<Person, Person>(neo4jTemplate, path);
EntityPath<Person, Person> entityPath = new ConvertingEntityPath<Person, Person>(path, neo4jTemplate);

Assert.assertEquals("start entity",michael, entityPath.startEntity());
Assert.assertEquals("start node",node, path.startNode());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public class QueryEngineTest extends EntityTestBase {
public void setUp() throws Exception {
GraphDatabase graphDatabase = createGraphDatabase();
graphDatabase.setConversionService(conversionService);
entityResultConverter = new EntityResultConverter(conversionService, neo4jTemplate);
entityResultConverter = new EntityResultConverter(conversionService);
testTeam.createSDGTeam();
queryEngine = graphDatabase.queryEngineFor(QueryType.Cypher);
michael = testTeam.michael;
Expand Down Expand Up @@ -104,7 +104,7 @@ public void testQueryListOfTypeNode() throws Exception {
@Test
public void testQueryListOfTypePerson() throws Exception {
final String queryString = "start person=node:`name-index`(name={name}) match (person) <-[:boss]- (boss) return boss";
final Collection<Person> result = IteratorUtil.asCollection(queryEngine.query(queryString, michaelsName()).to(Person.class, new EntityResultConverter(conversionService, template)));
final Collection<Person> result = IteratorUtil.asCollection(queryEngine.query(queryString, michaelsName()).to(Person.class, new EntityResultConverter(conversionService)));

assertEquals(asList(testTeam.emil),result);
}
Expand All @@ -116,7 +116,7 @@ private Map<String, Object> michaelsName() {
@Test
public void testQuerySingleOfTypePerson() throws Exception {
final String queryString = "start person=node:`name-index`(name={name}) match (person) <-[:boss]- (boss) return boss";
final Person result = queryEngine.query(queryString, michaelsName()).to(Person.class, new EntityResultConverter<Map<String,Object>,Person>(conversionService, template)).single();
final Person result = queryEngine.query(queryString, michaelsName()).to(Person.class, new EntityResultConverter<Map<String,Object>,Person>(conversionService)).single();

assertEquals(testTeam.emil,result);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
<constructor-arg ref="template"/>
</bean>
</property>
<property name="template" ref="template"/>
<!--property name="template" ref="template"/-->
<property name="mappingContext" ref="mappingContext"/>
</bean>

Expand All @@ -95,7 +95,7 @@
<constructor-arg ref="template"/>
</bean>
</property>
<property name="template" ref="template"/>
<!--property name="template" ref="template"/-->
<property name="mappingContext" ref="mappingContext"/>
</bean>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.aspects.config.Neo4jAspectConfiguration;
import org.springframework.data.neo4j.cross_store.support.node.CrossStoreNodeEntityInstantiator;
import org.springframework.data.neo4j.cross_store.support.node.CrossStoreNodeEntityState;
import org.springframework.data.neo4j.cross_store.support.node.CrossStoreNodeEntityStateFactory;
import org.springframework.data.neo4j.fieldaccess.DelegatingFieldAccessorFactory;
import org.springframework.data.neo4j.mapping.EntityInstantiator;
import org.springframework.data.neo4j.support.node.NodeEntityInstantiator;
import org.springframework.data.neo4j.support.node.NodeEntityStateFactory;
Expand Down Expand Up @@ -77,6 +79,13 @@ public PlatformTransactionManager neo4jTransactionManager() {
}
}

@Override
public DelegatingFieldAccessorFactory nodeDelegatingFieldAccessorFactory() throws Exception {
final CrossStoreNodeEntityState.CrossStoreNodeDelegatingFieldAccessorFactory nodeDelegatingFieldAccessorFactory = new CrossStoreNodeEntityState.CrossStoreNodeDelegatingFieldAccessorFactory(neo4jTemplate());
nodeEntityStateFactory().setNodeDelegatingFieldAccessorFactory(nodeDelegatingFieldAccessorFactory);
return nodeDelegatingFieldAccessorFactory;
}

@Bean
public NodeEntityStateFactory nodeEntityStateFactory() throws Exception {
final CrossStoreNodeEntityStateFactory nodeEntityStateFactory = new CrossStoreNodeEntityStateFactory();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public class CrossStoreNodeEntityState<ENTITY extends NodeBacked> extends Defaul
private final Neo4jTemplate template;
private PersistenceUnitUtil persistenceUnitUtil;

public CrossStoreNodeEntityState(final Node underlyingState, final ENTITY entity, final Class<? extends ENTITY> type, final Neo4jTemplate template, PersistenceUnitUtil persistenceUnitUtil, final CrossStoreNodeDelegatingFieldAccessorFactory delegatingFieldAccessorFactory, final Neo4jPersistentEntity persistentEntity) {
public CrossStoreNodeEntityState(final Node underlyingState, final NodeBacked entity, final Class<? extends NodeBacked> type, final Neo4jTemplate template, PersistenceUnitUtil persistenceUnitUtil, final DelegatingFieldAccessorFactory delegatingFieldAccessorFactory, final Neo4jPersistentEntity persistentEntity) {
super(underlyingState, entity, type, delegatingFieldAccessorFactory, persistentEntity);
this.template = template;
this.persistenceUnitUtil = persistenceUnitUtil;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,15 @@
* @since 30.09.11
*/
public class CrossStoreNodeEntityStateFactory extends NodeEntityStateFactory {
private CrossStoreNodeEntityState.CrossStoreNodeDelegatingFieldAccessorFactory delegatingFieldAccessorFactory;
private EntityManagerFactory entityManagerFactory;

public EntityState<Node> getEntityState(final Object entity, boolean detachable) {
public EntityState<Node> getEntityState(final Object entity, boolean detachable, Neo4jTemplate template) {
final Class<?> entityType = entity.getClass();
if (isPartial(entityType)) {
final Neo4jPersistentEntity<?> persistentEntity = mappingContext.getPersistentEntity(entityType);
@SuppressWarnings("unchecked") final CrossStoreNodeEntityState<NodeBacked> partialNodeEntityState =
new CrossStoreNodeEntityState<NodeBacked>(null, (NodeBacked)entity, (Class<? extends NodeBacked>) entityType,
template, getPersistenceUnitUtils(), delegatingFieldAccessorFactory,
template, getPersistenceUnitUtils(), nodeDelegatingFieldAccessorFactory,
persistentEntity);
if (!detachable) return partialNodeEntityState;
return new DetachedEntityState<Node>(partialNodeEntityState, template) {
Expand All @@ -51,7 +50,7 @@ protected boolean isDetached() {
}
};
} else {
return super.getEntityState(entity,detachable);
return super.getEntityState(entity,detachable, template);
}
}

Expand All @@ -68,11 +67,4 @@ private PersistenceUnitUtil getPersistenceUnitUtils() {
public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
}

@Override
public void setTemplate(Neo4jTemplate template) {
super.setTemplate(template);
this.delegatingFieldAccessorFactory = new CrossStoreNodeEntityState.CrossStoreNodeDelegatingFieldAccessorFactory(template);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,10 @@

<bean id="nodeEntityStateFactory" class="org.springframework.data.neo4j.cross_store.support.node.CrossStoreNodeEntityStateFactory">
<property name="nodeDelegatingFieldAccessorFactory">
<bean class="org.springframework.data.neo4j.fieldaccess.NodeDelegatingFieldAccessorFactory">
<bean class="org.springframework.data.neo4j.cross_store.support.node.CrossStoreNodeEntityState$CrossStoreNodeDelegatingFieldAccessorFactory">
<constructor-arg ref="neo4jTemplate"/>
</bean>
</property>
<property name="template" ref="neo4jTemplate"/>
<property name="entityManagerFactory" ref="entityManagerFactory"/>
<property name="mappingContext" ref="mappingContext"/>
</bean>
Expand All @@ -121,7 +120,6 @@
<constructor-arg ref="neo4jTemplate"/>
</bean>
</property>
<property name="template" ref="neo4jTemplate"/>
<property name="mappingContext" ref="mappingContext"/>
</bean>

Expand Down
2 changes: 1 addition & 1 deletion spring-data-neo4j-examples/cineasts-aspects/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.7.2</version>
<version>1.8.3</version>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.neo4j.cineasts.movieimport;


import org.codehaus.jackson.map.ObjectMapper;

import java.net.URL;
Expand Down
2 changes: 1 addition & 1 deletion spring-data-neo4j-examples/cineasts-rest/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.7.2</version>
<version>1.8.3</version>
</dependency>

<dependency>
Expand Down
2 changes: 1 addition & 1 deletion spring-data-neo4j-examples/cineasts/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.7.2</version>
<version>1.8.3</version>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,7 @@ public MappingInfrastructure mappingInfrastructure() throws Exception {

@Bean(initMethod="postConstruct")
public Neo4jTemplate neo4jTemplate() throws Exception {
final Neo4jTemplate neo4jTemplate = new Neo4jTemplate();
neo4jTemplate.setInfrastructure(mappingInfrastructure());
nodeEntityStateFactory().setTemplate(neo4jTemplate);
relationshipEntityStateFactory().setTemplate(neo4jTemplate);
return neo4jTemplate;
return new Neo4jTemplate(mappingInfrastructure());
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,21 +78,21 @@ protected Object doConvert(Object value, Class<?> sourceType, Class type, Mappin
return null;
}

protected Path toPath(Object value, Class<?> sourceType) {
public Path toPath(Object value, Class<?> sourceType) {
if (Node.class.isAssignableFrom(sourceType)) return new NodePath((Node) value);
if (Relationship.class.isAssignableFrom(sourceType)) return new RelationshipPath((Relationship) value);
if (Path.class.isAssignableFrom(sourceType)) return (Path) value;
return null;
}

protected Relationship toRelationship(Object value, Class<?> sourceType) {
public Relationship toRelationship(Object value, Class<?> sourceType) {
if (Relationship.class.isAssignableFrom(sourceType)) return ((Relationship) value);
if (Path.class.isAssignableFrom(sourceType)) return ((Path) value).lastRelationship();
if (Node.class.isAssignableFrom(sourceType)) return ((Node) value).getRelationships().iterator().next();
return null;
}

protected Node toNode(Object value, Class<?> sourceType) {
public Node toNode(Object value, Class<?> sourceType) {
if (Node.class.isAssignableFrom(sourceType)) return (Node)value;
if (Path.class.isAssignableFrom(sourceType)) return ((Path) value).endNode();
if (Relationship.class.isAssignableFrom(sourceType)) return ((Relationship) value).getEndNode();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,19 @@
package org.springframework.data.neo4j.mapping;

import org.neo4j.graphdb.PropertyContainer;
import org.springframework.data.neo4j.support.Neo4jTemplate;

/**
* @author mh
* @since 17.10.11
*/
public interface EntityPersister {

<T> T projectTo(Object entity, Class<T> targetType);
<T> T projectTo(Object entity, Class<T> targetType, MappingPolicy mappingPolicy);
<S extends PropertyContainer, T> T createEntityFromState(S state, Class<T> type, MappingPolicy mappingPolicy);
<S extends PropertyContainer, T> T createEntityFromStoredType(S state, MappingPolicy mappingPolicy);
<S extends PropertyContainer, T> T createEntityFromStoredType(S state);
<T> T projectTo(Object entity, Class<T> targetType, final Neo4jTemplate template);
<T> T projectTo(Object entity, Class<T> targetType, MappingPolicy mappingPolicy, final Neo4jTemplate template);
<S extends PropertyContainer, T> T createEntityFromState(S state, Class<T> type, MappingPolicy mappingPolicy, final Neo4jTemplate template);
<S extends PropertyContainer, T> T createEntityFromStoredType(S state, MappingPolicy mappingPolicy, final Neo4jTemplate template);
<S extends PropertyContainer, T> T createEntityFromStoredType(S state, final Neo4jTemplate template);
boolean isNodeEntity(Class<?> targetType);
boolean isRelationshipEntity(Class<?> targetType);
MappingPolicy getMappingPolicy(Class<?> targetType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,17 @@
import org.neo4j.graphdb.PropertyContainer;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.mapping.context.MappingContext;
import org.springframework.data.neo4j.support.Neo4jTemplate;
import org.springframework.data.neo4j.support.mapping.Neo4jPersistentEntityImpl;

/**
* @author mh
* @since 27.09.11
*/
public interface Neo4jEntityConverter<T, S extends PropertyContainer> {
<R extends T> R read(Class<R> type, S source, MappingPolicy mappingPolicy);
void write(T source, S sink, MappingPolicy mappingPolicy);
<R extends T> R read(Class<R> type, S source, MappingPolicy mappingPolicy, final Neo4jTemplate template);
void write(T source, S sink, MappingPolicy mappingPolicy, final Neo4jTemplate template);
MappingContext<? extends Neo4jPersistentEntity<?>, Neo4jPersistentProperty> getMappingContext();
ConversionService getConversionService();
<R extends T> R loadEntity(R entity, S source, MappingPolicy mappingPolicy, Neo4jPersistentEntityImpl<R> persistentEntity);
<R extends T> R loadEntity(R entity, S source, MappingPolicy mappingPolicy, Neo4jPersistentEntityImpl<R> persistentEntity, final Neo4jTemplate template);
}
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public void postConstruct() {
this.entityPersister = new Neo4jEntityPersister(conversionService, nodeEntityTools, relationshipEntityTools, mappingContext, entityStateHandler);
this.entityRemover = new EntityRemover(this.entityStateHandler, nodeTypeRepresentationStrategy, relationshipTypeRepresentationStrategy, graphDatabase);
if (this.resultConverter==null) {
this.resultConverter = new EntityResultConverter<Object, Object>(conversionService,entityPersister);
this.resultConverter = new EntityResultConverter<Object, Object>(conversionService);
}
this.graphDatabase.setResultConverter(resultConverter);
this.cypherQueryExecutor = new CypherQueryExecutor(graphDatabase.queryEngineFor(QueryType.Cypher, resultConverter));
Expand Down
Loading

0 comments on commit 2cc97c6

Please sign in to comment.