From 69a9240aeccdcc836da92ca9ae6424ffbaa25040 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Wed, 8 Sep 2010 21:38:21 +0200 Subject: [PATCH] added property indexing annotation --- .../graph/api/GraphEntityProperty.java | 19 +++++++++++++++++++ .../graph/neo4j/spi/node/Neo4jNodeBacking.aj | 6 ++++-- .../datastore/graph/neo4j/Person.java | 8 +++----- .../neo4j/spi/Neo4jGraphPersistenceTest.java | 8 ++++++++ 4 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/springframework/datastore/graph/api/GraphEntityProperty.java diff --git a/src/main/java/org/springframework/datastore/graph/api/GraphEntityProperty.java b/src/main/java/org/springframework/datastore/graph/api/GraphEntityProperty.java new file mode 100644 index 000000000..7cb783194 --- /dev/null +++ b/src/main/java/org/springframework/datastore/graph/api/GraphEntityProperty.java @@ -0,0 +1,19 @@ +package org.springframework.datastore.graph.api; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Michael Hunger + * @since 27.08.2010 + * indexing true by default + * implies automatic conversion + * TODO support for custom converter class + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface GraphEntityProperty { + boolean index() default true; +} diff --git a/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj b/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj index 4ac54de8f..da8123696 100644 --- a/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj +++ b/src/main/java/org/springframework/datastore/graph/neo4j/spi/node/Neo4jNodeBacking.aj @@ -17,6 +17,7 @@ import org.neo4j.kernel.EmbeddedGraphDatabase; import org.neo4j.util.GraphDatabaseUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.InvalidDataAccessResourceUsageException; +import org.springframework.datastore.graph.api.GraphEntityProperty; import org.springframework.datastore.graph.api.NodeBacked; import org.springframework.datastore.graph.api.RelationshipBacked; @@ -390,8 +391,9 @@ public aspect Neo4jNodeBacking extends AbstractTypeAnnotatingMixinFields { diff --git a/src/test/java/org/springframework/datastore/graph/neo4j/Person.java b/src/test/java/org/springframework/datastore/graph/neo4j/Person.java index 322cfd149..333b4a5d2 100644 --- a/src/test/java/org/springframework/datastore/graph/neo4j/Person.java +++ b/src/test/java/org/springframework/datastore/graph/neo4j/Person.java @@ -2,17 +2,15 @@ package org.springframework.datastore.graph.neo4j; import org.neo4j.graphdb.DynamicRelationshipType; import org.neo4j.graphdb.Relationship; -import org.springframework.datastore.graph.api.Direction; -import org.springframework.datastore.graph.api.GraphEntity; -import org.springframework.datastore.graph.api.GraphEntityRelationship; -import org.springframework.datastore.graph.api.GraphEntityRelationshipEntity; +import org.springframework.datastore.graph.api.*; @GraphEntity(useShortNames = false) public class Person { private Long id; - + + @GraphEntityProperty(index = true) private String name; private int age; diff --git a/src/test/java/org/springframework/datastore/graph/neo4j/spi/Neo4jGraphPersistenceTest.java b/src/test/java/org/springframework/datastore/graph/neo4j/spi/Neo4jGraphPersistenceTest.java index 849a76516..adf02150b 100644 --- a/src/test/java/org/springframework/datastore/graph/neo4j/spi/Neo4jGraphPersistenceTest.java +++ b/src/test/java/org/springframework/datastore/graph/neo4j/spi/Neo4jGraphPersistenceTest.java @@ -425,6 +425,14 @@ public class Neo4jGraphPersistenceTest { final Collection result = IteratorUtil.addToCollection(found.iterator(), new HashSet()); Assert.assertEquals(new HashSet(Arrays.asList(group,group2)), result); } + @Test + @Transactional + public void testFindAllPersonByIndexOnAnnotatedField() { + Person person = new Person("Michael",35); + final Finder finder = finderFactory.getFinderForClass(Person.class); + final Person found = finder.findByPropertyValue("Person.name", "Michael"); + Assert.assertEquals(person, found); + } @Test @Transactional public void testTraverseFromGroupToPeople() {