moved index name out and added @Indexed.name

This commit is contained in:
Michael Hunger
2011-01-11 13:39:36 +01:00
parent 8e4ca3a9d8
commit 2c2e16e021
6 changed files with 32 additions and 30 deletions

View File

@@ -59,10 +59,15 @@ class IndexingNodePropertyFieldAccessorListenerFactory implements FieldAccessorL
@Override
public FieldAccessListener<NodeBacked,?> forField(final Field field) {
return new IndexingNodePropertyFieldAccessorListener(field, graphDatabaseContext);
return new IndexingNodePropertyFieldAccessorListener(field, graphDatabaseContext, getIndexName(field));
}
/**
private String getIndexName(Field field) {
Indexed indexed = field.getAnnotation(Indexed.class);
return indexed != null ? indexed.name() : null;
}
/**
* @author Michael Hunger
* @since 12.09.2010
*/
@@ -72,16 +77,18 @@ class IndexingNodePropertyFieldAccessorListenerFactory implements FieldAccessorL
protected final String indexKey;
private final GraphDatabaseContext graphDatabaseContext;
private String indexName;
public IndexingNodePropertyFieldAccessorListener(final Field field, final GraphDatabaseContext graphDatabaseContext) {
public IndexingNodePropertyFieldAccessorListener(final Field field, final GraphDatabaseContext graphDatabaseContext, final String indexName) {
this.indexKey = DelegatingFieldAccessorFactory.getNeo4jPropertyName(field);
this.graphDatabaseContext = graphDatabaseContext;
}
this.indexName = indexName;
}
@Override
public void valueChanged(final NodeBacked nodeBacked, final Object oldVal, final Object newVal) {
if (newVal==null) graphDatabaseContext.removeIndex(nodeBacked.getUnderlyingState(), indexKey );
else graphDatabaseContext.index(nodeBacked.getUnderlyingState(), indexKey, newVal.toString());
if (newVal==null) graphDatabaseContext.removeIndex(indexName, nodeBacked.getUnderlyingState(), indexKey);
else graphDatabaseContext.index(indexName, nodeBacked.getUnderlyingState(), indexKey, newVal.toString());
}
}

View File

@@ -18,7 +18,6 @@ package org.springframework.data.graph.neo4j.fieldaccess;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.NotInTransactionException;
import org.springframework.core.convert.ConversionService;
import org.springframework.dao.InvalidDataAccessResourceUsageException;
import org.springframework.data.graph.annotation.GraphProperty;
import org.springframework.data.graph.annotation.RelatedTo;
@@ -108,7 +107,7 @@ public class PartialNodeEntityStateAccessors<ENTITY extends NodeBacked> extends
final Object id = getId(entity,type);
if (id == null) return;
final String foreignId = createForeignId(id);
Node node = graphDatabaseContext.getSingleIndexedNode(FOREIGN_ID, foreignId);
Node node = graphDatabaseContext.getSingleIndexedNode("node", FOREIGN_ID, foreignId);
if (node == null) {
node = graphDatabaseContext.createNode();
persistForeignId(node, id);
@@ -129,7 +128,7 @@ public class PartialNodeEntityStateAccessors<ENTITY extends NodeBacked> extends
if (!node.hasProperty(FOREIGN_ID) && id != null) {
final String foreignId = createForeignId(id);
node.setProperty(FOREIGN_ID, id);
graphDatabaseContext.index(node, FOREIGN_ID, foreignId);
graphDatabaseContext.index("node", node, FOREIGN_ID, foreignId);
}
}

View File

@@ -80,7 +80,7 @@ public class Finder<T extends NodeBacked> {
*/
public T findByPropertyValue(final String property, final Object value) {
try {
final Node node = graphDatabaseContext.getSingleIndexedNode(property, value);
final Node node = graphDatabaseContext.getSingleIndexedNode("node", property, value);
if (node == null) return null;
return graphDatabaseContext.createEntityFromState(node, clazz);
} catch (NotFoundException e) {
@@ -97,7 +97,7 @@ public class Finder<T extends NodeBacked> {
*/
public Iterable<T> findAllByPropertyValue(final String property, final Object value) {
try {
final IndexHits<Node> nodes = graphDatabaseContext.getIndexedNodes(property, value);
final IndexHits<Node> nodes = graphDatabaseContext.getIndexedNodes("node", property, value);
if (nodes == null) return Collections.emptyList();
return new IterableWrapper<T, Node>(nodes) {
@Override

View File

@@ -53,8 +53,6 @@ public class GraphDatabaseContext {
public EntityInstantiator<RelationshipBacked, Relationship> relationshipEntityInstantiator;
private IndexManager indexManager;
private ConversionService conversionService;
private NodeTypeStrategy nodeTypeStrategy;
@@ -117,16 +115,16 @@ public class GraphDatabaseContext {
private IndexManager getIndexManager() {
return graphDatabaseService.index();
}
public IndexHits<Node> getIndexedNodes(final String property, final Object value) {
return getNodeIndex().get(property, value.toString());
public IndexHits<Node> getIndexedNodes(final String indexName, final String property, final Object value) {
return getNodeIndex(indexName).get(property, value.toString());
}
private Index<Node> getNodeIndex() {
return getIndexManager().forNodes("node");
private Index<Node> getNodeIndex(final String indexName) {
return getIndexManager().forNodes(indexName);
}
public Node getSingleIndexedNode(final String property, final Object value) {
IndexHits<Node> indexHits = getIndexedNodes(property, value);
public Node getSingleIndexedNode(final String indexName, final String property, final Object value) {
IndexHits<Node> indexHits = getIndexedNodes(indexName, property, value);
return indexHits.hasNext() ? indexHits.next() : null;
}
@@ -172,16 +170,16 @@ public class GraphDatabaseContext {
}
}
public void removeIndex(final Node node, final String propName) {
getNodeIndex().remove(node, propName, null);
public void removeIndex(final String indexName, final Node node, final String propName) {
getNodeIndex(indexName).remove(node, propName, null);
}
public void removeIndex(final String propName) {
removeIndex(null,propName);
public void removeIndex(final String indexName, final String propName) {
removeIndex(indexName, null,propName);
}
public void index(final Node node, final String propName, final Object newVal) {
getNodeIndex().add(node, propName, newVal.toString());
public void index(final String indexName, final Node node, final String propName, final Object newVal) {
getNodeIndex(indexName).add(node, propName, newVal.toString());
}
public boolean canConvert(final Class<?> from, final Class<?> to) {

View File

@@ -33,7 +33,7 @@ public abstract class Neo4jHelper {
}
}
for (String indexField : indexFieldsToRemove) {
graphDatabaseContext.removeIndex(indexField);
graphDatabaseContext.removeIndex("node", indexField);
}
}
}

View File

@@ -10,7 +10,6 @@ import org.junit.runner.RunWith;
import org.neo4j.graphdb.*;
import org.neo4j.graphdb.traversal.TraversalDescription;
import org.neo4j.helpers.collection.IteratorUtil;
import org.neo4j.index.IndexService;
import org.neo4j.kernel.Traversal;
import org.neo4j.kernel.impl.traversal.TraversalDescriptionImpl;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,7 +17,6 @@ import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.data.graph.neo4j.*;
import org.springframework.data.graph.neo4j.finder.Finder;
import org.springframework.data.graph.neo4j.finder.FinderFactory;
import org.springframework.data.graph.neo4j.support.GraphDatabaseContext;
import org.springframework.data.graph.neo4j.support.node.Neo4jHelper;
import org.springframework.data.graph.neo4j.Car;
import org.springframework.data.graph.neo4j.Friendship;
@@ -432,9 +430,9 @@ public class Neo4jGraphPersistenceTest {
Group group = new Group();
group.setName("test");
final Finder<Group> finder = finderFactory.getFinderForClass(Group.class);
graphDatabaseContext.removeIndex(group.getUnderlyingState(), "name");
graphDatabaseContext.removeIndex("node", group.getUnderlyingState(), "name");
final Group found = finder.findByPropertyValue("name", "test");
assertNull("Group.name removed from index",found);
assertNull("Group.name removed from index", found);
}
@Test