From e2f749db91aea5c02e28c92b3da20e98ed0f3852 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Thu, 28 Apr 2011 11:16:22 +0200 Subject: [PATCH] more efficient support for mutating operations of managed relationship set --- .../fieldaccess/ManagedFieldAccessorSet.java | 35 ++++++++++++++++++- .../support/NodeEntityRelationshipTest.java | 31 ++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/ManagedFieldAccessorSet.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/ManagedFieldAccessorSet.java index f2b4a1d1e..199bddd2d 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/ManagedFieldAccessorSet.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/ManagedFieldAccessorSet.java @@ -24,11 +24,11 @@ import org.springframework.data.graph.neo4j.support.DoReturn; import java.lang.reflect.Field; import java.util.AbstractSet; +import java.util.Collection; import java.util.Iterator; import java.util.Set; /** - * TODO handle all mutating methods * @param */ public class ManagedFieldAccessorSet extends AbstractSet { @@ -99,4 +99,37 @@ public class ManagedFieldAccessorSet extends AbstractSet { if (res) update(); return res; } + + @Override + public boolean removeAll(Collection c) { + if (delegate.removeAll(c)) { + update(); + return true; + } + return false; + } + + @Override + public boolean remove(Object o) { + if (delegate.remove(o)) { + update(); + return true; + } + return false; + } + + @Override + public boolean retainAll(Collection c) { + if (delegate.retainAll(c)) { + update(); + return true; + } + return false; + } + + @Override + public void clear() { + delegate.clear(); + update(); + } } \ No newline at end of file diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityRelationshipTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityRelationshipTest.java index 30e261cd9..9dc1f7d8c 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityRelationshipTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/NodeEntityRelationshipTest.java @@ -181,6 +181,37 @@ public class NodeEntityRelationshipTest { group.getPersons().remove(david); assertEquals(Collections.singleton(michael), group.getPersons()); } + @Test + @Transactional + public void testRemoveAllFromOneToManyRelationship() { + Person michael = persistedPerson("Michael", 35); + Person david = persistedPerson("David", 25); + Group group = new Group().persist(); + group.setPersons(new HashSet(Arrays.asList(michael, david))); + group.getPersons().removeAll(Collections.singleton(david)); + assertEquals(Collections.singleton(michael), group.getPersons()); + } + @Test + @Transactional + public void testRetainAllFromOneToManyRelationship() { + Person michael = persistedPerson("Michael", 35); + Person david = persistedPerson("David", 25); + Group group = new Group().persist(); + group.setPersons(new HashSet(Arrays.asList(michael, david))); + group.getPersons().retainAll(Collections.singleton(david)); + assertEquals(Collections.singleton(david), group.getPersons()); + } + @Test + @Transactional + public void testClearFromOneToManyRelationship() { + Person michael = persistedPerson("Michael", 35); + Person david = persistedPerson("David", 25); + Group group = new Group().persist(); + group.setPersons(new HashSet(Arrays.asList(michael, david))); + group.getPersons().clear(); + assertEquals(Collections.emptySet(), group.getPersons()); + } + @Test @Transactional