From d0ff6c8be26557ebc1a24c7be007e926e0296181 Mon Sep 17 00:00:00 2001 From: David Montag Date: Mon, 21 Mar 2011 15:59:45 -0700 Subject: [PATCH] Made relationship type attribute of RelatedTo optional, defaulting to the field name (modulo useShortNames). --- .../data/graph/annotation/RelatedTo.java | 13 +++++++------ .../NodeRelationshipFieldAccessorFactory.java | 4 ++++ .../OneToNRelationshipFieldAccessorFactory.java | 2 +- ...dOnlyOneToNRelationshipFieldAccessorFactory.java | 2 +- .../SingleRelationshipFieldAccessorFactory.java | 3 +-- .../org/springframework/data/graph/neo4j/Group.java | 2 +- .../springframework/data/graph/neo4j/Person.java | 2 +- .../neo4j/support/NodeEntityRelationshipTest.java | 2 +- 8 files changed, 17 insertions(+), 13 deletions(-) diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/annotation/RelatedTo.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/annotation/RelatedTo.java index 0069041f3..315a81ba7 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/annotation/RelatedTo.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/annotation/RelatedTo.java @@ -16,14 +16,14 @@ package org.springframework.data.graph.annotation; +import org.springframework.data.graph.core.Direction; +import org.springframework.data.graph.core.NodeBacked; + import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import org.springframework.data.graph.core.Direction; -import org.springframework.data.graph.core.NodeBacked; - /** * Annotation for {@link org.springframework.data.graph.annotation.NodeEntity} fields that relate to other entities via * relationships. Works for one-to-one and one-to-many relationships. It is optionally possible to define the relationship type, @@ -31,10 +31,11 @@ import org.springframework.data.graph.core.NodeBacked; * * Collection based one-to-many relationships return managed collections that reflect addition and removal to the underlying relationships. * + * Examples: *
- * @RelatedTo([type="friends"], elementClass=Person.class)
+ * @RelatedTo(elementClass=Person.class)
  * Collection<Person> friends;
- * @RelatedTo([type="spouse"], [elementClass=Person.class])
+ * @RelatedTo(type="partner")
  * Person spouse;
  * 
@@ -47,7 +48,7 @@ public @interface RelatedTo { /** * @return name of the relationship type, optional, can be inferred from the field name */ - String type(); + String type() default ""; /** * @return direction for the relationship, by default outgoing diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/NodeRelationshipFieldAccessorFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/NodeRelationshipFieldAccessorFactory.java index 825cc9ce8..f3303f71c 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/NodeRelationshipFieldAccessorFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/NodeRelationshipFieldAccessorFactory.java @@ -58,6 +58,10 @@ abstract class NodeRelationshipFieldAccessorFactory implements FieldAccessorFact return DynamicRelationshipType.withName(relAnnotation.type()); } + protected DynamicRelationshipType typeFrom(Field field, RelatedTo relAnnotation) { + return "".equals(relAnnotation.type()) ? typeFrom(field) : typeFrom(relAnnotation); + } + protected RelatedTo getRelationshipAnnotation(Field field) { return field.getAnnotation(RelatedTo.class); } diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/OneToNRelationshipFieldAccessorFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/OneToNRelationshipFieldAccessorFactory.java index 94b274c34..f085d7b19 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/OneToNRelationshipFieldAccessorFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/OneToNRelationshipFieldAccessorFactory.java @@ -44,7 +44,7 @@ public class OneToNRelationshipFieldAccessorFactory extends NodeRelationshipFiel @Override public FieldAccessor forField(final Field field) { final RelatedTo relAnnotation = getRelationshipAnnotation(field); - return new OneToNRelationshipFieldAccessor(typeFrom(relAnnotation), dirFrom(relAnnotation), targetFrom(relAnnotation), graphDatabaseContext); + return new OneToNRelationshipFieldAccessor(typeFrom(field, relAnnotation), dirFrom(relAnnotation), targetFrom(relAnnotation), graphDatabaseContext); } public static class OneToNRelationshipFieldAccessor extends NodeToNodesRelationshipFieldAccessor { diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/ReadOnlyOneToNRelationshipFieldAccessorFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/ReadOnlyOneToNRelationshipFieldAccessorFactory.java index 70e3c1ace..8c4379108 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/ReadOnlyOneToNRelationshipFieldAccessorFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/ReadOnlyOneToNRelationshipFieldAccessorFactory.java @@ -39,7 +39,7 @@ public class ReadOnlyOneToNRelationshipFieldAccessorFactory extends NodeRelation @Override public FieldAccessor forField(final Field field) { final RelatedTo relAnnotation = getRelationshipAnnotation(field); - return new ReadOnlyOneToNRelationshipFieldAccessor(typeFrom(relAnnotation), dirFrom(relAnnotation), targetFrom(relAnnotation), graphDatabaseContext); + return new ReadOnlyOneToNRelationshipFieldAccessor(typeFrom(field, relAnnotation), dirFrom(relAnnotation), targetFrom(relAnnotation), graphDatabaseContext); } public static class ReadOnlyOneToNRelationshipFieldAccessor extends OneToNRelationshipFieldAccessorFactory.OneToNRelationshipFieldAccessor { diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/SingleRelationshipFieldAccessorFactory.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/SingleRelationshipFieldAccessorFactory.java index 54ae107bd..7d97b2565 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/SingleRelationshipFieldAccessorFactory.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/fieldaccess/SingleRelationshipFieldAccessorFactory.java @@ -24,7 +24,6 @@ import org.springframework.data.graph.core.NodeBacked; import org.springframework.data.graph.neo4j.support.GraphDatabaseContext; import java.lang.reflect.Field; -import java.util.Collection; import java.util.Collections; import java.util.Set; @@ -46,7 +45,7 @@ public class SingleRelationshipFieldAccessorFactory extends NodeRelationshipFiel final RelatedTo relAnnotation = getRelationshipAnnotation(field); if (relAnnotation == null) return new SingleRelationshipFieldAccessor(typeFrom(field), Direction.OUTGOING, targetFrom(field), graphDatabaseContext); - return new SingleRelationshipFieldAccessor(typeFrom(relAnnotation), dirFrom(relAnnotation), targetFrom(field), graphDatabaseContext); + return new SingleRelationshipFieldAccessor(typeFrom(field, relAnnotation), dirFrom(relAnnotation), targetFrom(field), graphDatabaseContext); } public static class SingleRelationshipFieldAccessor extends NodeToNodesRelationshipFieldAccessor { diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Group.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Group.java index a5511d84b..db7ecadf3 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Group.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Group.java @@ -26,7 +26,7 @@ public class Group { public final static String OTHER_NAME_INDEX="other_name"; public static final String SEARCH_GROUPS_INDEX = "search-groups"; - @RelatedTo(type = "persons", direction = Direction.OUTGOING, elementClass = Person.class) + @RelatedTo(direction = Direction.OUTGOING, elementClass = Person.class) private Collection persons; @RelatedTo(type = "persons", elementClass = Person.class) diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Person.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Person.java index b250a2ae2..c7c33ff62 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Person.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/Person.java @@ -44,7 +44,7 @@ public class Person { private Car car; - @RelatedTo(type = "mother", direction = Direction.OUTGOING) + @RelatedTo private Person mother; @RelatedTo(type = "boss", direction = Direction.INCOMING) 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 e1b022667..2f77f4bb4 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 @@ -61,7 +61,7 @@ public class NodeEntityRelationshipTest { Person p = persistedPerson("Michael", 35); Person mother = persistedPerson("Gabi", 60); p.setMother(mother); - Node motherNode = p.getPersistentState().getSingleRelationship(DynamicRelationshipType.withName("mother"), Direction.OUTGOING).getEndNode(); + Node motherNode = p.getPersistentState().getSingleRelationship(DynamicRelationshipType.withName("Person.mother"), Direction.OUTGOING).getEndNode(); assertEquals(mother.getPersistentState(), motherNode); assertEquals(mother, p.getMother()); }