added IndexSpecification to support creating GeospatialIndex

This commit is contained in:
Thomas Risberg
2011-02-12 16:23:12 -05:00
parent c47c7deeeb
commit bccd302b50
6 changed files with 34 additions and 15 deletions

View File

@@ -18,7 +18,7 @@ package org.springframework.data.document.mongodb;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.springframework.data.document.mongodb.query.Index; import org.springframework.data.document.mongodb.query.IndexSpecification;
import org.springframework.data.document.mongodb.query.Query; import org.springframework.data.document.mongodb.query.Query;
import org.springframework.data.document.mongodb.query.Update; import org.springframework.data.document.mongodb.query.Update;
@@ -207,21 +207,21 @@ public interface MongoOperations {
MongoReader<T> reader); MongoReader<T> reader);
/** /**
* Ensure that an index for the specified {@link Index} specification exists for the default collection. * Ensure that an index for the provided {@link IndexSpecification} exists for the default collection.
* If not is will be created. * If not it will be created.
* *
* @param index * @param index
*/ */
void ensureIndex(Index index); void ensureIndex(IndexSpecification indexSpecification);
/** /**
* Ensure that an index for the specified {@link Index} specification exists. If not is will be * Ensure that an index for the provided {@link IndexSpecification} exists. If not it will be
* created. * created.
* *
* @param collectionName * @param collectionName
* @param index * @param index
*/ */
void ensureIndex(String collectionName, Index index); void ensureIndex(String collectionName, IndexSpecification indexSpecification);
/** /**
* Map the results of an ad-hoc query on the default MongoDB collection to a List of the specified type. * Map the results of an ad-hoc query on the default MongoDB collection to a List of the specified type.

View File

@@ -30,7 +30,7 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.document.mongodb.MongoPropertyDescriptors.MongoPropertyDescriptor; import org.springframework.data.document.mongodb.MongoPropertyDescriptors.MongoPropertyDescriptor;
import org.springframework.data.document.mongodb.query.Index; import org.springframework.data.document.mongodb.query.IndexSpecification;
import org.springframework.data.document.mongodb.query.Query; import org.springframework.data.document.mongodb.query.Query;
import org.springframework.data.document.mongodb.query.Update; import org.springframework.data.document.mongodb.query.Update;
import org.springframework.jca.cci.core.ConnectionCallback; import org.springframework.jca.cci.core.ConnectionCallback;
@@ -409,19 +409,19 @@ public class MongoTemplate implements InitializingBean, MongoOperations {
// Indexing methods // Indexing methods
public void ensureIndex(Index index) { public void ensureIndex(IndexSpecification indexSpecification) {
ensureIndex(getDefaultCollectionName(), index); ensureIndex(getDefaultCollectionName(), indexSpecification);
} }
public void ensureIndex(String collectionName, final Index index) { public void ensureIndex(String collectionName, final IndexSpecification indexSpecification) {
execute(new CollectionCallback<Object>() { execute(new CollectionCallback<Object>() {
public Object doInCollection(DBCollection collection) throws MongoException, DataAccessException { public Object doInCollection(DBCollection collection) throws MongoException, DataAccessException {
DBObject indexOptions = index.getIndexOptions(); DBObject indexOptions = indexSpecification.getIndexOptions();
if (indexOptions != null) { if (indexOptions != null) {
collection.ensureIndex(index.getIndexObject(), indexOptions); collection.ensureIndex(indexSpecification.getIndexObject(), indexOptions);
} }
else { else {
collection.ensureIndex(index.getIndexObject()); collection.ensureIndex(indexSpecification.getIndexObject());
} }
return null; return null;
} }

View File

@@ -19,7 +19,7 @@ import com.mongodb.BasicDBObject;
import com.mongodb.DBObject; import com.mongodb.DBObject;
public class GeospatialIndex { public class GeospatialIndex implements IndexSpecification {
private String keyField; private String keyField;

View File

@@ -22,7 +22,7 @@ import com.mongodb.BasicDBObject;
import com.mongodb.DBObject; import com.mongodb.DBObject;
public class Index { public class Index implements IndexSpecification {
public enum Duplicates { public enum Duplicates {
RETAIN, RETAIN,

View File

@@ -0,0 +1,11 @@
package org.springframework.data.document.mongodb.query;
import com.mongodb.DBObject;
public interface IndexSpecification {
DBObject getIndexObject();
DBObject getIndexOptions();
}

View File

@@ -48,4 +48,12 @@ public class IndexTests {
Assert.assertEquals("{ \"name\" : 1}", i.getIndexObject().toString()); Assert.assertEquals("{ \"name\" : 1}", i.getIndexObject().toString());
Assert.assertEquals("{ \"unique\" : true , \"drop_dups\" : true}", i.getIndexOptions().toString()); Assert.assertEquals("{ \"unique\" : true , \"drop_dups\" : true}", i.getIndexOptions().toString());
} }
@Test
public void testGeospatialIndex() {
GeospatialIndex i = new GeospatialIndex("location").withMin(0);
Assert.assertEquals("{ \"location\" : \"2d\"}", i.getIndexObject().toString());
Assert.assertEquals("{ \"min\" : 0}", i.getIndexOptions().toString());
}
} }