Skip to content

Commit 08f1882

Browse files
committed
Remove interface definition for UDC.
Signed-off-by: Gerrit Meier <[email protected]>
1 parent aa999a2 commit 08f1882

File tree

7 files changed

+39
-194
lines changed

7 files changed

+39
-194
lines changed

src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@
8888
import org.springframework.data.neo4j.core.mapping.callback.EventSupport;
8989
import org.springframework.data.neo4j.core.schema.TargetNode;
9090
import org.springframework.data.neo4j.core.support.UserDefinedChangeEvaluator;
91-
import org.springframework.data.neo4j.core.support.UserDefinedChangeSupport;
9291
import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager;
9392
import org.springframework.data.neo4j.repository.NoResultException;
9493
import org.springframework.data.neo4j.repository.query.QueryFragments;
@@ -456,7 +455,6 @@ private <T> T saveImpl(T instance, @Nullable Collection<PropertyFilter.Projected
456455
@Nullable NestedRelationshipProcessingStateMachine stateMachine) {
457456

458457
if ((stateMachine != null && stateMachine.hasProcessedValue(instance))
459-
|| (instance instanceof UserDefinedChangeSupport udcs && !udcs.needsUpdate())
460458
|| (this.userDefinedChangeEvaluators.containsKey(instance.getClass()) && !this.userDefinedChangeEvaluators.get(instance.getClass()).needsUpdate(instance))) {
461459
return instance;
462460
}
@@ -983,20 +981,16 @@ private <T> T processNestedRelations(Neo4jPersistentEntity<?> sourceEntity,
983981
Neo4jPersistentEntity<?> targetEntity = this.neo4jMappingContext
984982
.getRequiredPersistentEntity(relatedObjectBeforeCallbacksApplied.getClass());
985983
var isNewEntity = targetEntity.isNew(relatedObjectBeforeCallbacksApplied);
986-
var skipUpdateOfEntity = false;
987-
if (relatedValueToStore instanceof UserDefinedChangeSupport udcs) {
988-
skipUpdateOfEntity = !isNewEntity && !udcs.needsUpdate();
989-
}
984+
var skipUpdateOfEntity = !isNewEntity;
990985
if (relatedValueToStore instanceof MappingSupport.RelationshipPropertiesWithEntityHolder rpweh) {
991986
var relatedEntity = rpweh.getRelatedEntity();
992-
if (relatedEntity instanceof UserDefinedChangeSupport udcs) {
993-
skipUpdateOfEntity = !isNewEntity && !udcs.needsUpdate();
994-
}
987+
skipUpdateOfEntity &= this.userDefinedChangeEvaluators.containsKey(relatedEntity.getClass())
988+
&& !this.userDefinedChangeEvaluators.get(relatedEntity.getClass()).needsUpdate(relatedEntity);
995989
}
996-
else if (!skipUpdateOfEntity) {
997-
skipUpdateOfEntity = this.userDefinedChangeEvaluators.containsKey(relatedValueToStore.getClass());
990+
else {
991+
skipUpdateOfEntity &= this.userDefinedChangeEvaluators.containsKey(relatedValueToStore.getClass())
992+
&& !this.userDefinedChangeEvaluators.get(relatedValueToStore.getClass()).needsUpdate(relatedValueToStore);
998993
}
999-
1000994
Object newRelatedObject = stateMachine.hasProcessedValue(relatedObjectBeforeCallbacksApplied)
1001995
? stateMachine.getProcessedAs(relatedObjectBeforeCallbacksApplied)
1002996
: skipUpdateOfEntity

src/main/java/org/springframework/data/neo4j/core/support/UserDefinedChangeSupport.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/test/java/org/springframework/data/neo4j/integration/imperative/UserDefinedChangesIT.java

Lines changed: 31 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.springframework.data.neo4j.core.transaction.Neo4jBookmarkManager;
3030
import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager;
3131
import org.springframework.data.neo4j.integration.shared.common.UserDefinedChangeEntityA;
32-
import org.springframework.data.neo4j.integration.shared.common.UserDefinedChangeEntityWithBeanA;
32+
import org.springframework.data.neo4j.integration.shared.common.UserDefinedChangeEntityB;
3333
import org.springframework.data.neo4j.repository.Neo4jRepository;
3434
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
3535
import org.springframework.data.neo4j.test.BookmarkCapture;
@@ -70,10 +70,6 @@ protected void setupData() {
7070
CREATE (a:UserDefinedChangeEntityB)<-[:PROPERTY]-(b:UserDefinedChangeEntityA)-[:DIRECT]->(c:UserDefinedChangeEntityB)
7171
SET a.name= 'viaProperty', b.name = 'changeMeIfYouCan', c.name = 'direct'
7272
""").consume();
73-
transaction.run("""
74-
CREATE (a:UserDefinedChangeEntityWithBeanB)<-[:PROPERTY]-(b:UserDefinedChangeEntityWithBeanA)-[:DIRECT]->(c:UserDefinedChangeEntityWithBeanB)
75-
SET a.name= 'viaProperty', b.name = 'changeMeIfYouCan', c.name = 'direct'
76-
""").consume();
7773
transaction.commit();
7874
}
7975
this.bookmarkCapture.seedWith(session.lastBookmarks());
@@ -83,8 +79,7 @@ protected void setupData() {
8379
@Test
8480
void entityShouldBeUpdated(@Autowired UserDefinedChangeARepository repository, @Autowired Driver driver) {
8581
var entity = repository.findByName("changeMeIfYouCan");
86-
entity.name = "updatedName";
87-
entity.needsUpdate = true;
82+
entity.name = "please update me";
8883
repository.save(entity);
8984

9085
try (var session = this.driver.session(this.bookmarkCapture.createSessionConfig())) {
@@ -93,15 +88,14 @@ void entityShouldBeUpdated(@Autowired UserDefinedChangeARepository repository, @
9388
var node = result.get(0).get("n").asNode();
9489
assertThat(node.labels()).hasSize(1);
9590
assertThat(node.keys()).hasSize(1);
96-
assertThat(node.get("name").asString()).isEqualTo("updatedName");
91+
assertThat(node.get("name").asString()).isEqualTo("please update me");
9792
}
9893
}
9994

10095
@Test
10196
void entityShouldNotBeUpdated(@Autowired UserDefinedChangeARepository repository, @Autowired Driver driver) {
10297
var entity = repository.findByName("changeMeIfYouCan");
10398
entity.name = "updatedName";
104-
entity.needsUpdate = false;
10599
repository.save(entity);
106100

107101
try (var session = this.driver.session(this.bookmarkCapture.createSessionConfig())) {
@@ -118,9 +112,8 @@ void entityShouldNotBeUpdated(@Autowired UserDefinedChangeARepository repository
118112
void directRelatedEntityShouldBeUpdated(@Autowired UserDefinedChangeARepository repository, @Autowired Driver driver) {
119113
var entity = repository.findByName("changeMeIfYouCan");
120114
var firstB = entity.bs.get(0);
121-
firstB.name = "changed";
122-
entity.needsUpdate = true;
123-
firstB.needsUpdate = true;
115+
entity.name = "please update me";
116+
firstB.name = "please update me";
124117
repository.save(entity);
125118

126119
try (var session = this.driver.session(this.bookmarkCapture.createSessionConfig())) {
@@ -129,17 +122,16 @@ void directRelatedEntityShouldBeUpdated(@Autowired UserDefinedChangeARepository
129122
var node = result.get(0).get("n").asNode();
130123
assertThat(node.labels()).hasSize(1);
131124
assertThat(node.keys()).hasSize(1);
132-
assertThat(node.get("name").asString()).isEqualTo("changed");
125+
assertThat(node.get("name").asString()).isEqualTo("please update me");
133126
}
134127
}
135128

136129
@Test
137130
void directRelatedEntityShouldNotBeUpdated(@Autowired UserDefinedChangeARepository repository, @Autowired Driver driver) {
138131
var entity = repository.findByName("changeMeIfYouCan");
139132
var firstB = entity.bs.get(0);
133+
entity.name = "please update me";
140134
firstB.name = "changed";
141-
entity.needsUpdate = true;
142-
firstB.needsUpdate = false;
143135
repository.save(entity);
144136

145137
try (var session = this.driver.session(this.bookmarkCapture.createSessionConfig())) {
@@ -156,9 +148,8 @@ void directRelatedEntityShouldNotBeUpdated(@Autowired UserDefinedChangeAReposito
156148
void relationshipPropertyRelatedEntityShouldBeUpdated(@Autowired UserDefinedChangeARepository repository, @Autowired Driver driver) {
157149
var entity = repository.findByName("changeMeIfYouCan");
158150
var firstB = entity.relationshipProperties.get(0).target;
159-
firstB.name = "changed";
160-
entity.needsUpdate = true;
161-
firstB.needsUpdate = true;
151+
entity.name = "please update me";
152+
firstB.name = "please update me";
162153
repository.save(entity);
163154

164155
try (var session = this.driver.session(this.bookmarkCapture.createSessionConfig())) {
@@ -167,17 +158,16 @@ void relationshipPropertyRelatedEntityShouldBeUpdated(@Autowired UserDefinedChan
167158
var node = result.get(0).get("n").asNode();
168159
assertThat(node.labels()).hasSize(1);
169160
assertThat(node.keys()).hasSize(1);
170-
assertThat(node.get("name").asString()).isEqualTo("changed");
161+
assertThat(node.get("name").asString()).isEqualTo("please update me");
171162
}
172163
}
173164

174165
@Test
175166
void relationshipPropertyRelatedEntityShouldNotBeUpdated(@Autowired UserDefinedChangeARepository repository, @Autowired Driver driver) {
176167
var entity = repository.findByName("changeMeIfYouCan");
177168
var firstB = entity.relationshipProperties.get(0).target;
169+
entity.name = "please update me";
178170
firstB.name = "changed";
179-
entity.needsUpdate = true;
180-
firstB.needsUpdate = false;
181171
repository.save(entity);
182172

183173
try (var session = this.driver.session(this.bookmarkCapture.createSessionConfig())) {
@@ -190,46 +180,10 @@ void relationshipPropertyRelatedEntityShouldNotBeUpdated(@Autowired UserDefinedC
190180
}
191181
}
192182

193-
@Test
194-
void beanControlledEntityShouldBeUpdated(@Autowired UserDefinedChangeWithBeanARepository repository, @Autowired Driver driver) {
195-
var entity = repository.findByName("changeMeIfYouCan");
196-
entity.name = "please update me";
197-
repository.save(entity);
198-
199-
try (var session = this.driver.session(this.bookmarkCapture.createSessionConfig())) {
200-
var result = session.run("MATCH (n:UserDefinedChangeEntityWithBeanA) return n").list();
201-
assertThat(result.size()).isEqualTo(1);
202-
var node = result.get(0).get("n").asNode();
203-
assertThat(node.labels()).hasSize(1);
204-
assertThat(node.keys()).hasSize(1);
205-
assertThat(node.get("name").asString()).isEqualTo("please update me");
206-
}
207-
}
208-
209-
@Test
210-
void beanControlledEntityShouldNotBeUpdated(@Autowired UserDefinedChangeWithBeanARepository repository, @Autowired Driver driver) {
211-
var entity = repository.findByName("changeMeIfYouCan");
212-
entity.name = "updatedName";
213-
repository.save(entity);
214-
215-
try (var session = this.driver.session(this.bookmarkCapture.createSessionConfig())) {
216-
var result = session.run("MATCH (n:UserDefinedChangeEntityWithBeanA) return n").list();
217-
assertThat(result.size()).isEqualTo(1);
218-
var node = result.get(0).get("n").asNode();
219-
assertThat(node.labels()).hasSize(1);
220-
assertThat(node.keys()).hasSize(1);
221-
assertThat(node.get("name").asString()).isEqualTo("changeMeIfYouCan");
222-
}
223-
}
224-
225183
interface UserDefinedChangeARepository extends Neo4jRepository<UserDefinedChangeEntityA, String> {
226184
UserDefinedChangeEntityA findByName(String name);
227185
}
228186

229-
interface UserDefinedChangeWithBeanARepository extends Neo4jRepository<UserDefinedChangeEntityWithBeanA, String> {
230-
UserDefinedChangeEntityWithBeanA findByName(String name);
231-
}
232-
233187
@Configuration
234188
@EnableNeo4jRepositories(considerNestedRepositories = true)
235189
@EnableTransactionManagement
@@ -256,16 +210,31 @@ public PlatformTransactionManager transactionManager(Driver driver,
256210
}
257211

258212
@Bean
259-
public UserDefinedChangeEvaluator<UserDefinedChangeEntityWithBeanA> udceForUdcewba() {
260-
return new UserDefinedChangeEvaluator<UserDefinedChangeEntityWithBeanA>() {
213+
UserDefinedChangeEvaluator<UserDefinedChangeEntityA> udceForUdcewba() {
214+
return new UserDefinedChangeEvaluator<UserDefinedChangeEntityA>() {
215+
@Override
216+
public boolean needsUpdate(UserDefinedChangeEntityA instance) {
217+
return instance.name.equals("please update me");
218+
}
219+
220+
@Override
221+
public Class<UserDefinedChangeEntityA> getEvaluatingClass() {
222+
return UserDefinedChangeEntityA.class;
223+
}
224+
};
225+
}
226+
227+
@Bean
228+
UserDefinedChangeEvaluator<UserDefinedChangeEntityB> udceForUdcewbb() {
229+
return new UserDefinedChangeEvaluator<UserDefinedChangeEntityB>() {
261230
@Override
262-
public boolean needsUpdate(UserDefinedChangeEntityWithBeanA instance) {
231+
public boolean needsUpdate(UserDefinedChangeEntityB instance) {
263232
return instance.name.equals("please update me");
264233
}
265234

266235
@Override
267-
public Class<UserDefinedChangeEntityWithBeanA> getEvaluatingClass() {
268-
return UserDefinedChangeEntityWithBeanA.class;
236+
public Class<UserDefinedChangeEntityB> getEvaluatingClass() {
237+
return UserDefinedChangeEntityB.class;
269238
}
270239
};
271240
}

src/test/java/org/springframework/data/neo4j/integration/shared/common/UserDefinedChangeEntityA.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,16 @@
1717

1818
import java.util.List;
1919

20-
import org.springframework.data.annotation.Transient;
2120
import org.springframework.data.neo4j.core.schema.GeneratedValue;
2221
import org.springframework.data.neo4j.core.schema.Id;
2322
import org.springframework.data.neo4j.core.schema.Node;
2423
import org.springframework.data.neo4j.core.schema.Relationship;
25-
import org.springframework.data.neo4j.core.support.UserDefinedChangeSupport;
2624

2725
/**
2826
* @author Gerrit Meier
2927
*/
3028
@Node
31-
public class UserDefinedChangeEntityA implements UserDefinedChangeSupport {
29+
public class UserDefinedChangeEntityA {
3230

3331
@Id
3432
@GeneratedValue
@@ -42,15 +40,8 @@ public class UserDefinedChangeEntityA implements UserDefinedChangeSupport {
4240
@Relationship("PROPERTY")
4341
public List<UserDefinedChangeRelationshipProperty> relationshipProperties;
4442

45-
@Transient
46-
public boolean needsUpdate;
47-
4843
public UserDefinedChangeEntityA(String name) {
4944
this.name = name;
5045
}
5146

52-
@Override
53-
public boolean needsUpdate() {
54-
return this.needsUpdate;
55-
}
5647
}

src/test/java/org/springframework/data/neo4j/integration/shared/common/UserDefinedChangeEntityB.java

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,23 @@
1515
*/
1616
package org.springframework.data.neo4j.integration.shared.common;
1717

18-
import org.springframework.data.annotation.Transient;
1918
import org.springframework.data.neo4j.core.schema.GeneratedValue;
2019
import org.springframework.data.neo4j.core.schema.Id;
2120
import org.springframework.data.neo4j.core.schema.Node;
22-
import org.springframework.data.neo4j.core.support.UserDefinedChangeSupport;
2321

2422
/**
2523
* @author Gerrit Meier
2624
*/
2725
@Node
28-
public class UserDefinedChangeEntityB implements UserDefinedChangeSupport {
26+
public class UserDefinedChangeEntityB {
2927

3028
@Id
3129
@GeneratedValue
3230
String id;
3331

3432
public String name;
3533

36-
@Transient
37-
public boolean needsUpdate;
38-
3934
public UserDefinedChangeEntityB(String name) {
4035
this.name = name;
4136
}
42-
43-
@Override
44-
public boolean needsUpdate() {
45-
return this.needsUpdate;
46-
}
4737
}

src/test/java/org/springframework/data/neo4j/integration/shared/common/UserDefinedChangeEntityWithBeanA.java

Lines changed: 0 additions & 47 deletions
This file was deleted.

0 commit comments

Comments
 (0)