diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RestRelationshipIndex.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RestRelationshipIndex.java index bf817329c..6c10d608b 100644 --- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RestRelationshipIndex.java +++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RestRelationshipIndex.java @@ -22,13 +22,13 @@ public class RestRelationshipIndex extends RestIndex implements Re return Relationship.class; } - public void remove(Relationship entity, String key) { - throw new UnsupportedOperationException(); - } - - public void remove(Relationship entity) { - throw new UnsupportedOperationException(); - } +// public void remove(Relationship entity, String key) { +// throw new UnsupportedOperationException(); +// } +// +// public void remove(Relationship entity) { +// throw new UnsupportedOperationException(); +// } protected Relationship createEntity( Map item ) { return new RestRelationship( (Map) item, restGraphDatabase ); diff --git a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestEntityPropertyValidationTest.java b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestEntityPropertyValidationTest.java index cb50843f9..0c3e7760d 100644 --- a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestEntityPropertyValidationTest.java +++ b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestEntityPropertyValidationTest.java @@ -24,20 +24,20 @@ import org.springframework.test.context.transaction.TransactionalTestExecutionLi @TestExecutionListeners({CleanContextCacheTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) public class RestEntityPropertyValidationTest extends EntityPropertyValidationTest { -@BeforeClass -public static void startDb() throws Exception { - RestTestBase.startDb(); -} + @BeforeClass + public static void startDb() throws Exception { + RestTestBase.startDb(); + } -@Before -public void cleanDb() { - RestTestBase.cleanDb(); -} + @Before + public void cleanDb() { + RestTestBase.cleanDb(); + } -@AfterClass -public static void shutdownDb() { - RestTestBase.shutdownDb(); - -} + @AfterClass + public static void shutdownDb() { + RestTestBase.shutdownDb(); + + } } diff --git a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestFinderTest.java b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestFinderTest.java index 93de0d159..14c9200c7 100644 --- a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestFinderTest.java +++ b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestFinderTest.java @@ -23,20 +23,20 @@ import org.springframework.test.context.transaction.TransactionalTestExecutionLi @TestExecutionListeners({CleanContextCacheTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) public class RestFinderTest extends GraphRepositoryTest { -@BeforeClass -public static void startDb() throws Exception { - RestTestBase.startDb(); -} + @BeforeClass + public static void startDb() throws Exception { + RestTestBase.startDb(); + } -@Before -public void cleanDb() { - RestTestBase.cleanDb(); -} + @Before + public void cleanDb() { + RestTestBase.cleanDb(); + } -@AfterClass -public static void shutdownDb() { - RestTestBase.shutdownDb(); - -} + @AfterClass + public static void shutdownDb() { + RestTestBase.shutdownDb(); + + } } diff --git a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestNodeEntityRelationshipTest.java b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestNodeEntityRelationshipTest.java index 9b0e4f934..005eef546 100644 --- a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestNodeEntityRelationshipTest.java +++ b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestNodeEntityRelationshipTest.java @@ -27,20 +27,20 @@ import java.net.NoRouteToHostException; @TestExecutionListeners({CleanContextCacheTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) public class RestNodeEntityRelationshipTest extends NodeEntityRelationshipTest { -@BeforeClass -public static void startDb() throws Exception { - RestTestBase.startDb(); -} + @BeforeClass + public static void startDb() throws Exception { + RestTestBase.startDb(); + } -@Before -public void cleanDb() { - RestTestBase.cleanDb(); -} + @Before + public void cleanDb() { + RestTestBase.cleanDb(); + } -@AfterClass -public static void shutdownDb() { - RestTestBase.shutdownDb(); - -} + @AfterClass + public static void shutdownDb() { + RestTestBase.shutdownDb(); + + } } diff --git a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestProjectionTest.java b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestProjectionTest.java index 5fb6117fe..c251b427c 100644 --- a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestProjectionTest.java +++ b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestProjectionTest.java @@ -6,7 +6,6 @@ import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.neo4j.rest.graphdb.RestTestBase; import org.springframework.data.graph.neo4j.support.ProjectionTest; -import org.springframework.data.graph.neo4j.support.RelationshipEntityTest; import org.springframework.test.context.CleanContextCacheTestExecutionListener; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestExecutionListeners; @@ -24,20 +23,20 @@ import org.springframework.test.context.transaction.TransactionalTestExecutionLi @TestExecutionListeners({CleanContextCacheTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) public class RestProjectionTest extends ProjectionTest { -@BeforeClass -public static void startDb() throws Exception { -RestTestBase.startDb(); -} + @BeforeClass + public static void startDb() throws Exception { + RestTestBase.startDb(); + } -@Before -public void cleanDb() { -RestTestBase.cleanDb(); -} + @Before + public void cleanDb() { + RestTestBase.cleanDb(); + } -@AfterClass -public static void shutdownDb() { -RestTestBase.shutdownDb(); - -} + @AfterClass + public static void shutdownDb() { + RestTestBase.shutdownDb(); + + } } diff --git a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestPropertyTest.java b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestPropertyTest.java index a26152a29..94c78e11b 100644 --- a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestPropertyTest.java +++ b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestPropertyTest.java @@ -24,20 +24,20 @@ import org.springframework.test.context.transaction.TransactionalTestExecutionLi @TestExecutionListeners({CleanContextCacheTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) public class RestPropertyTest extends PropertyTest { -@BeforeClass -public static void startDb() throws Exception { -RestTestBase.startDb(); -} + @BeforeClass + public static void startDb() throws Exception { + RestTestBase.startDb(); + } -@Before -public void cleanDb() { -RestTestBase.cleanDb(); -} + @Before + public void cleanDb() { + RestTestBase.cleanDb(); + } -@AfterClass -public static void shutdownDb() { -RestTestBase.shutdownDb(); - -} + @AfterClass + public static void shutdownDb() { + RestTestBase.shutdownDb(); + + } } diff --git a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestRelationshipEntityTest.java b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestRelationshipEntityTest.java index 43706ddb5..fb69ae869 100644 --- a/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestRelationshipEntityTest.java +++ b/spring-data-neo4j-rest/src/test/java/org/springframework/data/graph/neo4j/rest/RestRelationshipEntityTest.java @@ -24,20 +24,20 @@ import org.springframework.test.context.transaction.TransactionalTestExecutionLi @TestExecutionListeners({CleanContextCacheTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) public class RestRelationshipEntityTest extends RelationshipEntityTest { -@BeforeClass -public static void startDb() throws Exception { -RestTestBase.startDb(); -} + @BeforeClass + public static void startDb() throws Exception { + RestTestBase.startDb(); + } -@Before -public void cleanDb() { -RestTestBase.cleanDb(); -} + @Before + public void cleanDb() { + RestTestBase.cleanDb(); + } -@AfterClass -public static void shutdownDb() { -RestTestBase.shutdownDb(); - -} + @AfterClass + public static void shutdownDb() { + RestTestBase.shutdownDb(); + + } } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/TypeRepresentationStrategy.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/TypeRepresentationStrategy.java index 861ad5c9a..2cb502d65 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/TypeRepresentationStrategy.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/core/TypeRepresentationStrategy.java @@ -31,9 +31,10 @@ import org.neo4j.graphdb.PropertyContainer; */ public interface TypeRepresentationStrategy> { /** - * callback on entity creation for setting up type representation - * @param state - * @param type + * Callback for setting up and/or storing type information after creation. + * + * @param state Backing state of entity being created + * @param type Type of entity being created */ void postEntityCreation(S state, Class type); @@ -57,10 +58,12 @@ public interface TypeRepresentationStrategy Class getJavaType(S state); /** - * callback for lifecycle management before node entity removal - * @param entity + * Callback for cleaning up type information before removal. If state does not have any + * state associated, doesn't do anything. + * + * @param state Backing state of entity being removed */ - void preEntityRemoval(T entity); + void preEntityRemoval(S state); /** * Instantiate the entity given its state. The type of the entity is inferred by the strategy diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/GraphDatabaseContext.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/GraphDatabaseContext.java index e59256a93..3fcfd3e1d 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/GraphDatabaseContext.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/GraphDatabaseContext.java @@ -116,18 +116,10 @@ public class GraphDatabaseContext { } - /** - * removes the entity by cleaning the relationships first and then removing the node - * it removes all of them from all indexes in advance - * the entity and relationship are still accessible after removal but before transaction commit - * but all modifications will throw an exception - * @param entity to remove - */ - // TODO: What about connected relationship entities? public void removeNodeEntity(NodeBacked entity) { Node node = entity.getPersistentState(); - if (node==null) return; - nodeTypeRepresentationStrategy.preEntityRemoval(entity); + if (node == null) return; + nodeTypeRepresentationStrategy.preEntityRemoval(node); for (Relationship relationship : node.getRelationships()) { removeRelationship(relationship); } @@ -135,6 +127,18 @@ public class GraphDatabaseContext { node.delete(); } + public void removeRelationshipEntity(RelationshipBacked entity) { + Relationship relationship = entity.getPersistentState(); + if (relationship == null) return; + removeRelationship(relationship); + } + + private void removeRelationship(Relationship relationship) { + relationshipTypeRepresentationStrategy.preEntityRemoval(relationship); + removeFromIndexes(relationship); + relationship.delete(); + } + private void removeFromIndexes(Node node) { IndexManager indexManager = getIndexManager(); for (String indexName : indexManager.nodeIndexNames()) { @@ -142,18 +146,6 @@ public class GraphDatabaseContext { } } - // - public void removeRelationshipEntity(RelationshipBacked entity) { - Relationship relationship = entity.getPersistentState(); - if (relationship==null) return; - removeRelationship(relationship); - } - - private void removeRelationship(Relationship relationship) { - removeFromIndexes(relationship); - relationship.delete(); - } - private void removeFromIndexes(Relationship relationship) { IndexManager indexManager = getIndexManager(); for (String indexName : indexManager.relationshipIndexNames()) { diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/IndexingNodeTypeRepresentationStrategy.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/IndexingNodeTypeRepresentationStrategy.java index f1af715f5..6e6bd9fd3 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/IndexingNodeTypeRepresentationStrategy.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/IndexingNodeTypeRepresentationStrategy.java @@ -84,7 +84,6 @@ public class IndexingNodeTypeRepresentationStrategy implements NodeTypeRepresent return count; } - @Override public Class getJavaType(Node node) { if (node == null) throw new IllegalArgumentException("Node is null"); @@ -112,8 +111,8 @@ public class IndexingNodeTypeRepresentationStrategy implements NodeTypeRepresent } @Override - public void preEntityRemoval(NodeBacked entity) { - getNodeTypesIndex().remove(entity.getPersistentState()); + public void preEntityRemoval(Node state) { + getNodeTypesIndex().remove(state); } @Override diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/IndexingRelationshipTypeRepresentationStrategy.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/IndexingRelationshipTypeRepresentationStrategy.java index 2cd60b633..3134d2216 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/IndexingRelationshipTypeRepresentationStrategy.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/IndexingRelationshipTypeRepresentationStrategy.java @@ -116,10 +116,11 @@ public class IndexingRelationshipTypeRepresentationStrategy implements Relations } } + @Override - public void preEntityRemoval(RelationshipBacked entity) { - getRelTypesIndex().remove(entity.getPersistentState()); - } + public void preEntityRemoval(Relationship state) { + getRelTypesIndex().remove(state); + } @Override @SuppressWarnings("unchecked") diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/NoopTypeRepresentationStrategy.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/NoopTypeRepresentationStrategy.java index 55d1025b0..e37f28af9 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/NoopTypeRepresentationStrategy.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/NoopTypeRepresentationStrategy.java @@ -16,26 +16,26 @@ public class NoopTypeRepresentationStrategy { @Override public Iterable findAll(Class clazz) { - throw new UnsupportedOperationException("findAll not supported by NoopTypeRepresentationStrategy."); + throw new UnsupportedOperationException("findAll not supported."); } @Override public long count(Class entityClass) { - throw new UnsupportedOperationException("count not supported by NoopTypeRepresentationStrategy."); + throw new UnsupportedOperationException("count not supported."); + } + + @Override + public void preEntityRemoval(Node state) { } @Override public Class getJavaType(Node state) { - throw new UnsupportedOperationException("getJavaType not supported by NoopTypeRepresentationStrategy."); - } - - @Override - public void preEntityRemoval(NodeBacked entity) { + throw new UnsupportedOperationException("getJavaType not supported."); } @Override public U createEntity(Node state) { - throw new UnsupportedOperationException("Creation with stored type not supported by NoopTypeRepresentationStrategy."); + throw new UnsupportedOperationException("Creation with stored type not supported."); } @Override @@ -57,26 +57,26 @@ public class NoopTypeRepresentationStrategy { @Override public Iterable findAll(Class clazz) { - throw new UnsupportedOperationException("findAll not supported by NoopTypeRepresentationStrategy."); + throw new UnsupportedOperationException("findAll not supported."); } @Override public long count(Class entityClass) { - throw new UnsupportedOperationException("count not supported by NoopTypeRepresentationStrategy."); + throw new UnsupportedOperationException("count not supported."); + } + + @Override + public void preEntityRemoval(Relationship state) { } @Override public Class getJavaType(Relationship state) { - throw new UnsupportedOperationException("getJavaType not supported by NoopTypeRepresentationStrategy."); - } - - @Override - public void preEntityRemoval(RelationshipBacked entity) { + throw new UnsupportedOperationException("getJavaType not supported."); } @Override public U createEntity(Relationship state) { - throw new UnsupportedOperationException("Creation with stored type not supported by NoopTypeRepresentationStrategy."); + throw new UnsupportedOperationException("Creation with stored type not supported."); } @Override diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeRepresentationStrategy.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeRepresentationStrategy.java index 1125a4817..edc507edc 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeRepresentationStrategy.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeRepresentationStrategy.java @@ -100,34 +100,6 @@ public class SubReferenceNodeTypeRepresentationStrategy implements NodeTypeRepre updateSuperClassSubrefs(type, subReference); } - /** - * removes instanceof relationship and decrements instance counters for type nodes - * @param entity - */ - @Override - public void preEntityRemoval(NodeBacked entity) { - Class clazz = entity.getClass(); - - final Node subReference = obtainSubreferenceNode(clazz); - Node subRefNode = entity.getPersistentState(); - Relationship instanceOf = subRefNode.getSingleRelationship(INSTANCE_OF_RELATIONSHIP_TYPE, Direction.OUTGOING); - instanceOf.delete(); - if (log.isDebugEnabled()) log.debug("Removed link to subref node: " + subReference + " with type: " + clazz.getName()); - TraversalDescription traversal = Traversal.description().depthFirst().relationships(SUBCLASS_OF_RELATIONSHIP_TYPE, Direction.OUTGOING); - for (Node node : traversal.traverse(subReference).nodes()) { - Integer count = (Integer) node.getProperty(SUBREFERENCE_NODE_COUNTER_KEY); - Integer newCount = decrementAndGetCounter(node, SUBREFERENCE_NODE_COUNTER_KEY, 0); - if (log.isDebugEnabled()) log.debug("count on ref " + node + " was " + count + " new " + newCount); - } - } - -// @Override -// public Class confirmType(Node node, Class type) { -// Class nodeType = this.getJavaType(node); -// if (type.isAssignableFrom(nodeType)) return nodeType; -// throw new IllegalArgumentException(String.format("%s does not correspond to the node type %s of node %s",type,nodeType,node)); -// } - private void updateSuperClassSubrefs(Class clazz, Node subReference) { Class superClass = clazz.getSuperclass(); if (superClass != null) { @@ -165,7 +137,24 @@ public class SubReferenceNodeTypeRepresentationStrategy implements NodeTypeRepre } } - @Override + @Override + public void preEntityRemoval(Node state) { + Class clazz = getJavaType(state); + if (clazz == null) return; + final Node subReference = obtainSubreferenceNode(clazz); + Relationship instanceOf = state.getSingleRelationship(INSTANCE_OF_RELATIONSHIP_TYPE, Direction.OUTGOING); + instanceOf.delete(); + if (log.isDebugEnabled()) + log.debug("Removed link to subref node: " + subReference + " with type: " + clazz.getName()); + TraversalDescription traversal = Traversal.description().depthFirst().relationships(SUBCLASS_OF_RELATIONSHIP_TYPE, Direction.OUTGOING); + for (Node node : traversal.traverse(subReference).nodes()) { + Integer count = (Integer) node.getProperty(SUBREFERENCE_NODE_COUNTER_KEY); + Integer newCount = decrementAndGetCounter(node, SUBREFERENCE_NODE_COUNTER_KEY, 0); + if (log.isDebugEnabled()) log.debug("count on ref " + node + " was " + count + " new " + newCount); + } + } + + @Override public Iterable findAll(final Class clazz) { final Node subrefNode = findSubreferenceNode(clazz); if (log.isDebugEnabled()) log.debug("Subref: " + subrefNode); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexingNodeTypeRepresentationStrategyTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexingNodeTypeRepresentationStrategyTest.java index 0ab684bda..17e9fcc29 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexingNodeTypeRepresentationStrategyTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexingNodeTypeRepresentationStrategyTest.java @@ -78,7 +78,7 @@ public class IndexingNodeTypeRepresentationStrategyTest { Transaction tx = graphDatabaseService.beginTx(); try { - nodeTypeRepresentationStrategy.preEntityRemoval(thing); + nodeTypeRepresentationStrategy.preEntityRemoval(node(thing)); tx.success(); } finally @@ -92,9 +92,8 @@ public class IndexingNodeTypeRepresentationStrategyTest { assertEquals(node(subThing), subThingHits.getSingle()); tx = graphDatabaseService.beginTx(); - try - { - nodeTypeRepresentationStrategy.preEntityRemoval(subThing); + try { + nodeTypeRepresentationStrategy.preEntityRemoval(node(subThing)); tx.success(); } finally diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexingRelationshipTypeRepresentationStrategyTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexingRelationshipTypeRepresentationStrategyTest.java index aab76f805..4f2cef42f 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexingRelationshipTypeRepresentationStrategyTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexingRelationshipTypeRepresentationStrategyTest.java @@ -74,7 +74,7 @@ public class IndexingRelationshipTypeRepresentationStrategyTest { Transaction tx = graphDatabaseService.beginTx(); try { - relationshipTypeRepresentationStrategy.preEntityRemoval(link); + relationshipTypeRepresentationStrategy.preEntityRemoval(rel(link)); tx.success(); } finally diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/RelationshipEntityTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/RelationshipEntityTest.java index 3f6f537d4..ab712c1f6 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/RelationshipEntityTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/RelationshipEntityTest.java @@ -8,7 +8,10 @@ import org.neo4j.graphdb.*; import org.neo4j.helpers.collection.IteratorUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.graph.neo4j.Friendship; +import org.springframework.data.graph.neo4j.FriendshipRepository; import org.springframework.data.graph.neo4j.Person; + +import static org.junit.Assert.assertFalse; import static org.springframework.data.graph.neo4j.Person.persistedPerson; import org.springframework.data.graph.neo4j.repository.DirectGraphRepositoryFactory; @@ -30,6 +33,10 @@ public class RelationshipEntityTest { @Autowired private GraphDatabaseContext graphDatabaseContext; + @Autowired + private GraphDatabaseService graphDatabaseService; + @Autowired + private FriendshipRepository friendshipRepository; @Autowired private DirectGraphRepositoryFactory graphRepositoryFactory; @@ -97,6 +104,64 @@ public class RelationshipEntityTest { Person p = persistedPerson("Michael", 35); Person p2 = persistedPerson("David", 25); Friendship f = p.knows(p2); - assertEquals(f,p.getRelationshipTo(p2,Friendship.class, "knows")); + assertEquals(f,p.getRelationshipTo(p2, Friendship.class, "knows")); + } + + @Test + public void testRemoveRelationshipEntity() { + cleanDb(); + Friendship f; + Transaction tx = graphDatabaseService.beginTx(); + try + { + Person p = persistedPerson("Michael", 35); + Person p2 = persistedPerson("David", 25); + f = p.knows(p2); + tx.success(); + } + finally + { + tx.finish(); + } + Transaction tx2 = graphDatabaseService.beginTx(); + try + { + f.remove(); + tx2.success(); + } + finally + { + tx2.finish(); + } + assertFalse("Unexpected relationship entity found.", friendshipRepository.findAll().iterator().hasNext()); + } + + @Test + public void testRemoveRelationshipEntityIfNodeEntityIsRemoved() { + cleanDb(); + Person p; + Transaction tx = graphDatabaseService.beginTx(); + try + { + p = persistedPerson("Michael", 35); + Person p2 = persistedPerson("David", 25); + p.knows(p2); + tx.success(); + } + finally + { + tx.finish(); + } + Transaction tx2 = graphDatabaseService.beginTx(); + try + { + p.remove(); + tx2.success(); + } + finally + { + tx2.finish(); + } + assertFalse("Unexpected relationship entity found.", friendshipRepository.findAll().iterator().hasNext()); } } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeRepresentationStrategyTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeRepresentationStrategyTest.java index 99bfaafbc..ead00fcf2 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeRepresentationStrategyTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeRepresentationStrategyTest.java @@ -113,11 +113,11 @@ public class SubReferenceNodeTypeRepresentationStrategyTest { @Transactional public void testPreEntityRemoval() throws Exception { Node typeNode = getInstanceofRelationship(thingNode).getOtherNode(thingNode); - nodeTypeRepresentationStrategy.preEntityRemoval(thing); + nodeTypeRepresentationStrategy.preEntityRemoval(node(thing)); assertNull("instanceof relationship was removed", getInstanceofRelationship(thingNode)); assertNotNull("instanceof relationship was removed", getInstanceofRelationship(subThingNode)); assertEquals("no things left after removal", 1, typeNode.getProperty(SubReferenceNodeTypeRepresentationStrategy.SUBREFERENCE_NODE_COUNTER_KEY)); - nodeTypeRepresentationStrategy.preEntityRemoval(subThing); + nodeTypeRepresentationStrategy.preEntityRemoval(node(subThing)); assertNull("instanceof relationship was removed", getInstanceofRelationship(subThingNode)); assertEquals("no things left after removal", 0, typeNode.getProperty(SubReferenceNodeTypeRepresentationStrategy.SUBREFERENCE_NODE_COUNTER_KEY));