diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPICypherImpl.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPICypherImpl.java index a5e524abf..8589c5854 100644 --- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPICypherImpl.java +++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPICypherImpl.java @@ -534,6 +534,7 @@ public class RestAPICypherImpl implements RestAPI { @Override @SuppressWarnings("unchecked") public RestIndex createIndex(Class type, String indexName, Map config) { + resetIndex(type); if (Node.class.isAssignableFrom(type)) { return (RestIndex) index().forNodes( indexName, config); } @@ -543,6 +544,11 @@ public class RestAPICypherImpl implements RestAPI { throw new IllegalArgumentException("Required Node or Relationship types to create index, got " + type); } + @Override + public void resetIndex(Class type) { + restAPI.resetIndex(type); + } + @Override public void close() { restAPI.close(); diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPIImpl.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPIImpl.java index e8909949e..638938e23 100644 --- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPIImpl.java +++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPIImpl.java @@ -243,11 +243,23 @@ public class RestAPIImpl implements RestAPI { data.put("name",indexName); data.put("config",config); restRequest.post("index/" + type, data); + IndexInfo indexInfo = indexInfos.get(type); + if (indexInfo!=null) indexInfo.setExpired(); + } + + public void resetIndex(Class type) { + if (Node.class.isAssignableFrom(type)) { + indexInfo(RestIndexManager.NODE).setExpired(); + } + if (Relationship.class.isAssignableFrom(type)) { + indexInfo(RestIndexManager.RELATIONSHIP).setExpired(); + } } @Override @SuppressWarnings("unchecked") public RestIndex createIndex(Class type, String indexName, Map config) { + resetIndex(type); if (Node.class.isAssignableFrom(type)) { return (RestIndex) index().forNodes( indexName, config); } @@ -576,7 +588,7 @@ public class RestAPIImpl implements RestAPI { public IndexInfo indexInfo(final String indexType) { IndexInfo indexInfo = indexInfos.get(indexType); if (indexInfo != null && !indexInfo.isExpired()) { -// return indexInfo; + return indexInfo; } RequestResult response = restRequest.get("index/" + encode(indexType)); indexInfo = new RetrievedIndexInfo(response); @@ -619,12 +631,14 @@ public class RestAPIImpl implements RestAPI { @Override public void delete(RestIndex index) { deleteIndex(indexPath(index, null, null)); + resetIndex(index.getEntityType()); } @Override public void removeFromIndex(RestIndex index, T entity, String key, Object value) { String indexPath = indexPath(index, key, value); deleteIndex(indexPath(indexPath, entity)); + resetIndex(index.getEntityType()); } protected String indexPath(String indexPath, T restEntity) { @@ -635,6 +649,7 @@ public class RestAPIImpl implements RestAPI { public void removeFromIndex(RestIndex index, T entity, String key) { String indexPath = indexPath(index, key, null); deleteIndex(indexPath(indexPath, entity)); + resetIndex(index.getEntityType()); } private String indexPath(RestIndex index, String key, Object value) { @@ -644,6 +659,7 @@ public class RestAPIImpl implements RestAPI { @Override public void removeFromIndex(RestIndex index, T entity) { deleteIndex(indexPath(indexPath(index, null, null), entity)); + resetIndex(index.getEntityType()); } public String uniqueIndexPath(RestIndex index) { diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPIInternal.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPIInternal.java index 0169e8d91..35cb9daa9 100644 --- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPIInternal.java +++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/RestAPIInternal.java @@ -1,5 +1,6 @@ package org.neo4j.rest.graphdb; +import org.neo4j.graphdb.PropertyContainer; import org.neo4j.rest.graphdb.converter.RestEntityExtractor; import org.neo4j.rest.graphdb.entity.RestEntity; import org.neo4j.rest.graphdb.entity.RestNode; @@ -22,6 +23,8 @@ public interface RestAPIInternal { // todo add to cache or update data in cache RestEntity createRestEntity(Map data); + void resetIndex(Class type); + public enum Load { FromCache, FromServer, diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/IndexInfo.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/IndexInfo.java index a18219a89..dd578c9ac 100644 --- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/IndexInfo.java +++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/IndexInfo.java @@ -35,4 +35,6 @@ public interface IndexInfo { Map getConfig(String name); boolean isExpired(); + + void setExpired(); } diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RestIndex.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RestIndex.java index 096380d69..97ef27ad0 100644 --- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RestIndex.java +++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RestIndex.java @@ -50,7 +50,7 @@ public abstract class RestIndex implements Index return new RestGraphDatabase(restApi); } - private String getTypeName() { + public String getTypeName() { return getEntityType().getSimpleName().toLowerCase(); } diff --git a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RetrievedIndexInfo.java b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RetrievedIndexInfo.java index 44fb370d0..4a790fba6 100644 --- a/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RetrievedIndexInfo.java +++ b/spring-data-neo4j-rest/src/main/java/org/neo4j/rest/graphdb/index/RetrievedIndexInfo.java @@ -82,4 +82,10 @@ public class RetrievedIndexInfo implements IndexInfo { public boolean isExpired() { return System.currentTimeMillis() > expired; } + + @Override + public void setExpired() { + this.expired = 0; + } + }