From 5f78e01aa35e1ce3e9a7c17560c1c16968d7d10b Mon Sep 17 00:00:00 2001 From: Thomas Risberg Date: Wed, 15 Dec 2010 12:37:03 -0500 Subject: [PATCH] DATADOC-18 extracted common MongoTemplate methods into MongoOperations interface --- .../document/mongodb/MongoOperations.java | 131 ++++++++++++++++ .../data/document/mongodb/MongoTemplate.java | 143 +++++++++++++++--- 2 files changed, 251 insertions(+), 23 deletions(-) create mode 100644 spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoOperations.java diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoOperations.java new file mode 100644 index 000000000..5d8eab572 --- /dev/null +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoOperations.java @@ -0,0 +1,131 @@ +package org.springframework.data.document.mongodb; + +import java.util.List; + +import com.mongodb.DBCollection; +import com.mongodb.DBObject; + +public interface MongoOperations { + + String getDefaultCollectionName(); + + /** + * @return The default collection used by this template + */ + DBCollection getDefaultCollection(); + + void executeCommand(String jsonCommand); + + void executeCommand(DBObject command); + + /** + * Executes a {@link DBCallback} translating any exceptions as necessary + * + * @param The return type + * @param action The action to execute + * + * @return The return value of the {@link DBCallback} + */ + T execute(DBCallback action); + + /** + * Executes the given {@link CollectionCallback} on the default collection. + * + * @param + * @param callback + * @return + */ + T execute(CollectionCallback callback); + + /** + * Executes the given {@link CollectionCallback} on the collection of the given name. + * + * @param + * @param callback + * @param collectionName + * @return + */ + T execute(CollectionCallback callback, String collectionName); + + T executeInSession(DBCallback action); + + DBCollection createCollection(String collectionName); + + void createCollection(String collectionName, + CollectionOptions collectionOptions); + + DBCollection getCollection(String collectionName); + + boolean collectionExists(String collectionName); + + void dropCollection(String collectionName); + + void insert(Object objectToSave); + + void insert(String collectionName, Object objectToSave); + + void insert(String collectionName, T objectToSave, MongoWriter writer); + + void insertList(List listToSave); + + void insertList(String collectionName, List listToSave); + + void insertList(String collectionName, List listToSave, + MongoWriter writer); + + void save(Object objectToSave); + + void save(String collectionName, Object objectToSave); + + void save(String collectionName, T objectToSave, MongoWriter writer); + + void updateFirst(DBObject queryDoc, DBObject updateDoc); + + void updateFirst(String collectionName, DBObject queryDoc, + DBObject updateDoc); + + void updateMulti(DBObject queryDoc, DBObject updateDoc); + + void updateMulti(String collectionName, DBObject queryDoc, + DBObject updateDoc); + + void remove(DBObject queryDoc); + + void remove(String collectionName, DBObject queryDoc); + + List getCollection(Class targetClass); + + List getCollection(String collectionName, Class targetClass); + + List getCollection(String collectionName, Class targetClass, + MongoReader reader); + + List queryUsingJavaScript(String query, Class targetClass); + + List queryUsingJavaScript(String query, Class targetClass, + MongoReader reader); + + List queryUsingJavaScript(String collectionName, String query, + Class targetClass); + + List queryUsingJavaScript(String collectionName, String query, + Class targetClass, MongoReader reader); + + List query(DBObject query, Class targetClass); + + List query(DBObject query, Class targetClass, + CursorPreparer preparer); + + List query(DBObject query, Class targetClass, + MongoReader reader); + + List query(String collectionName, DBObject query, + Class targetClass); + + List query(String collectionName, DBObject query, + Class targetClass, CursorPreparer preparer); + + List query(String collectionName, DBObject query, + Class targetClass, MongoReader reader); + +} \ No newline at end of file diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java index 121f7ac49..91fe9bff1 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java @@ -40,7 +40,7 @@ import com.mongodb.MongoException; import com.mongodb.WriteResult; import com.mongodb.util.JSON; -public class MongoTemplate implements InitializingBean { +public class MongoTemplate implements InitializingBean, MongoOperations { private String defaultCollectionName; @@ -104,21 +104,30 @@ public class MongoTemplate implements InitializingBean { this.databaseName = databaseName; } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#getDefaultCollectionName() + */ public String getDefaultCollectionName() { return defaultCollectionName; } - /** - * @return The default collection used by this template + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#getDefaultCollection() */ public DBCollection getDefaultCollection() { return getDb().getCollection(getDefaultCollectionName()); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#executeCommand(java.lang.String) + */ public void executeCommand(String jsonCommand) { executeCommand((DBObject)JSON.parse(jsonCommand)); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#executeCommand(com.mongodb.DBObject) + */ public void executeCommand(DBObject command) { CommandResult cr = getDb().command(command); String err = cr.getErrorMessage(); @@ -128,13 +137,8 @@ public class MongoTemplate implements InitializingBean { } } - /** - * Executes a {@link DBCallback} translating any exceptions as necessary - * - * @param The return type - * @param action The action to execute - * - * @return The return value of the {@link DBCallback} + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#execute(org.springframework.data.document.mongodb.DBCallback) */ public T execute(DBCallback action) { DB db = getDb(); @@ -146,24 +150,15 @@ public class MongoTemplate implements InitializingBean { } } - /** - * Executes the given {@link CollectionCallback} on the default collection. - * - * @param - * @param callback - * @return + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#execute(org.springframework.data.document.mongodb.CollectionCallback) */ public T execute(CollectionCallback callback) { return execute(callback, defaultCollectionName); } - /** - * Executes the given {@link CollectionCallback} on the collection of the given name. - * - * @param - * @param callback - * @param collectionName - * @return + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#execute(org.springframework.data.document.mongodb.CollectionCallback, java.lang.String) */ public T execute(CollectionCallback callback, String collectionName) { @@ -174,6 +169,9 @@ public class MongoTemplate implements InitializingBean { } } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#executeInSession(org.springframework.data.document.mongodb.DBCallback) + */ public T executeInSession(DBCallback action) { DB db = getDb(); db.requestStart(); @@ -186,6 +184,9 @@ public class MongoTemplate implements InitializingBean { } } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#createCollection(java.lang.String) + */ public DBCollection createCollection(String collectionName) { try { return getDb().createCollection(collectionName, null); @@ -194,6 +195,9 @@ public class MongoTemplate implements InitializingBean { } } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#createCollection(java.lang.String, org.springframework.data.document.mongodb.CollectionOptions) + */ public void createCollection(String collectionName, CollectionOptions collectionOptions) { try { getDb().createCollection(collectionName, convertToDbObject(collectionOptions)); @@ -202,6 +206,9 @@ public class MongoTemplate implements InitializingBean { } } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#getCollection(java.lang.String) + */ public DBCollection getCollection(String collectionName) { try { return getDb().getCollection(collectionName); @@ -211,6 +218,9 @@ public class MongoTemplate implements InitializingBean { } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#collectionExists(java.lang.String) + */ public boolean collectionExists(String collectionName) { try { return getDb().collectionExists(collectionName); @@ -219,6 +229,9 @@ public class MongoTemplate implements InitializingBean { } } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#dropCollection(java.lang.String) + */ public void dropCollection(String collectionName) { getDb().getCollection(collectionName) .drop(); @@ -235,14 +248,23 @@ public class MongoTemplate implements InitializingBean { } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#insert(java.lang.Object) + */ public void insert(Object objectToSave) { insert(getRequiredDefaultCollectionName(), objectToSave); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#insert(java.lang.String, java.lang.Object) + */ public void insert(String collectionName, Object objectToSave) { insert(collectionName, objectToSave, this.mongoConverter); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#insert(java.lang.String, T, org.springframework.data.document.mongodb.MongoWriter) + */ public void insert(String collectionName, T objectToSave, MongoWriter writer) { BasicDBObject dbDoc = new BasicDBObject(); writer.write(objectToSave, dbDoc); @@ -250,14 +272,23 @@ public class MongoTemplate implements InitializingBean { populateIdIfNecessary(objectToSave, _id); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#insertList(java.util.List) + */ public void insertList(List listToSave) { insertList(getRequiredDefaultCollectionName(), listToSave); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#insertList(java.lang.String, java.util.List) + */ public void insertList(String collectionName, List listToSave) { insertList(collectionName, listToSave, this.mongoConverter); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#insertList(java.lang.String, java.util.List, org.springframework.data.document.mongodb.MongoWriter) + */ public void insertList(String collectionName, List listToSave, MongoWriter writer) { List dbObjectList = new ArrayList(); for (T o : listToSave) { @@ -272,14 +303,23 @@ public class MongoTemplate implements InitializingBean { } } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#save(java.lang.Object) + */ public void save(Object objectToSave) { save(getRequiredDefaultCollectionName(), objectToSave); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#save(java.lang.String, java.lang.Object) + */ public void save(String collectionName, Object objectToSave) { save(collectionName, objectToSave, this.mongoConverter); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#save(java.lang.String, T, org.springframework.data.document.mongodb.MongoWriter) + */ public void save(String collectionName, T objectToSave, MongoWriter writer) { BasicDBObject dbDoc = new BasicDBObject(); writer.write(objectToSave, dbDoc); @@ -337,10 +377,16 @@ public class MongoTemplate implements InitializingBean { } } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#updateFirst(com.mongodb.DBObject, com.mongodb.DBObject) + */ public void updateFirst(DBObject queryDoc, DBObject updateDoc) { updateFirst(getRequiredDefaultCollectionName(), queryDoc, updateDoc); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#updateFirst(java.lang.String, com.mongodb.DBObject, com.mongodb.DBObject) + */ public void updateFirst(String collectionName, DBObject queryDoc, DBObject updateDoc) { WriteResult wr = null; try { @@ -350,10 +396,16 @@ public class MongoTemplate implements InitializingBean { } } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#updateMulti(com.mongodb.DBObject, com.mongodb.DBObject) + */ public void updateMulti(DBObject queryDoc, DBObject updateDoc) { updateMulti(getRequiredDefaultCollectionName(), queryDoc, updateDoc); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#updateMulti(java.lang.String, com.mongodb.DBObject, com.mongodb.DBObject) + */ public void updateMulti(String collectionName, DBObject queryDoc, DBObject updateDoc) { WriteResult wr = null; try { @@ -363,10 +415,16 @@ public class MongoTemplate implements InitializingBean { } } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#remove(com.mongodb.DBObject) + */ public void remove(DBObject queryDoc) { remove(getRequiredDefaultCollectionName(), queryDoc); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#remove(java.lang.String, com.mongodb.DBObject) + */ public void remove(String collectionName, DBObject queryDoc) { WriteResult wr = null; try { @@ -377,6 +435,9 @@ public class MongoTemplate implements InitializingBean { } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#getCollection(java.lang.Class) + */ public List getCollection(Class targetClass) { List results = new ArrayList(); @@ -391,6 +452,9 @@ public class MongoTemplate implements InitializingBean { return results; } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#getCollection(java.lang.String, java.lang.Class) + */ public List getCollection(String collectionName, Class targetClass) { List results = new ArrayList(); @@ -405,6 +469,9 @@ public class MongoTemplate implements InitializingBean { return results; } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#getCollection(java.lang.String, java.lang.Class, org.springframework.data.document.mongodb.MongoReader) + */ public List getCollection(String collectionName, Class targetClass, MongoReader reader) { List results = new ArrayList(); DBCollection collection = getDb().getCollection(collectionName); @@ -416,18 +483,30 @@ public class MongoTemplate implements InitializingBean { // Queries that take JavaScript to express the query. + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#queryUsingJavaScript(java.lang.String, java.lang.Class) + */ public List queryUsingJavaScript(String query, Class targetClass) { return query(getDefaultCollectionName(), (DBObject)JSON.parse(query), targetClass); // } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#queryUsingJavaScript(java.lang.String, java.lang.Class, org.springframework.data.document.mongodb.MongoReader) + */ public List queryUsingJavaScript(String query, Class targetClass, MongoReader reader) { return query(getDefaultCollectionName(), (DBObject)JSON.parse(query), targetClass, reader); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#queryUsingJavaScript(java.lang.String, java.lang.String, java.lang.Class) + */ public List queryUsingJavaScript(String collectionName, String query, Class targetClass) { return query(collectionName, (DBObject)JSON.parse(query), targetClass); // } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#queryUsingJavaScript(java.lang.String, java.lang.String, java.lang.Class, org.springframework.data.document.mongodb.MongoReader) + */ public List queryUsingJavaScript(String collectionName, String query, Class targetClass, MongoReader reader) { return query(collectionName, (DBObject)JSON.parse(query), targetClass, reader); } @@ -435,22 +514,37 @@ public class MongoTemplate implements InitializingBean { // Queries that take DBObject to express the query + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#query(com.mongodb.DBObject, java.lang.Class) + */ public List query(DBObject query, Class targetClass) { return query(getDefaultCollectionName(), query, targetClass); // } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#query(com.mongodb.DBObject, java.lang.Class, org.springframework.data.document.mongodb.CursorPreparer) + */ public List query(DBObject query, Class targetClass, CursorPreparer preparer) { return query(getDefaultCollectionName(), query, targetClass, preparer); // } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#query(com.mongodb.DBObject, java.lang.Class, org.springframework.data.document.mongodb.MongoReader) + */ public List query(DBObject query, Class targetClass, MongoReader reader) { return query(getDefaultCollectionName(), query, targetClass, reader); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#query(java.lang.String, com.mongodb.DBObject, java.lang.Class) + */ public List query(String collectionName, DBObject query, Class targetClass) { return query(collectionName, query, targetClass, (CursorPreparer) null); } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#query(java.lang.String, com.mongodb.DBObject, java.lang.Class, org.springframework.data.document.mongodb.CursorPreparer) + */ public List query(String collectionName, DBObject query, Class targetClass, CursorPreparer preparer) { DBCollection collection = getDb().getCollection(collectionName); List results = new ArrayList(); @@ -468,6 +562,9 @@ public class MongoTemplate implements InitializingBean { return results; } + /* (non-Javadoc) + * @see org.springframework.data.document.mongodb.MongoOperations#query(java.lang.String, com.mongodb.DBObject, java.lang.Class, org.springframework.data.document.mongodb.MongoReader) + */ public List query(String collectionName, DBObject query, Class targetClass, MongoReader reader) { DBCollection collection = getDb().getCollection(collectionName); List results = new ArrayList();