diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoCollectionUtils.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoCollectionUtils.java new file mode 100644 index 000000000..e2e28bddd --- /dev/null +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoCollectionUtils.java @@ -0,0 +1,49 @@ +/* + * Copyright 2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.data.document.mongodb; + + +/** + * Helper class featuring helper methods for working with MongoDb collections. + *

+ *

+ * Mainly intended for internal use within the framework. + * + * @author Thomas Risberg + * @since 1.0 + */ +public abstract class MongoCollectionUtils { + + /** + * Private constructor to prevent instantiation. + */ + private MongoCollectionUtils() { + + } + + /** + * Obtains the collection name to use for the provided class + * + * @param entityClass + * The class to determine the preferred collection name for + * @return The preferred collection name + */ + public static String getPreferredCollectionName(Class entityClass) { + return entityClass.getSimpleName(); + } + +} diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbUtils.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbUtils.java index 3d589bd2e..1d83a6cf2 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbUtils.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbUtils.java @@ -16,7 +16,6 @@ package org.springframework.data.document.mongodb; -import com.mongodb.CommandResult; import com.mongodb.DB; import com.mongodb.Mongo; import org.apache.commons.logging.Log; diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java index b7f347859..9e539978b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java @@ -604,7 +604,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App String collection = dbref.collection(); if ("".equals(collection)) { - collection = targetEntity.getType().getSimpleName().toLowerCase(); + collection = targetEntity.getCollection(); } String dbname = dbref.db(); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/BasicMongoPersistentEntity.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/BasicMongoPersistentEntity.java index 529e3d070..6fbd4d157 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/BasicMongoPersistentEntity.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/BasicMongoPersistentEntity.java @@ -16,6 +16,7 @@ package org.springframework.data.document.mongodb.mapping; +import org.springframework.data.document.mongodb.MongoCollectionUtils; import org.springframework.data.mapping.BasicPersistentEntity; import org.springframework.data.mapping.model.MappingException; import org.springframework.data.mapping.model.PersistentEntity; @@ -46,7 +47,7 @@ public class BasicMongoPersistentEntity extends BasicPersistentEntity rawType = typeInformation.getType(); - String fallback = rawType.getSimpleName().toLowerCase(); + String fallback = MongoCollectionUtils.getPreferredCollectionName(rawType); if (rawType.isAnnotationPresent(Document.class)) { Document d = rawType.getAnnotation(Document.class); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/SimpleMongoMappingContext.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/SimpleMongoMappingContext.java index 1aa76afe6..0e16f74ec 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/SimpleMongoMappingContext.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/SimpleMongoMappingContext.java @@ -20,6 +20,7 @@ import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; +import org.springframework.data.document.mongodb.MongoCollectionUtils; import org.springframework.data.mapping.AbstractMappingContext; import org.springframework.data.mapping.BasicPersistentEntity; import org.springframework.data.mapping.AbstractPersistentProperty; @@ -103,7 +104,7 @@ public class SimpleMongoMappingContext extends * @see org.springframework.data.document.mongodb.mapping.MongoPersistentEntity#getCollection() */ public String getCollection() { - return getType().getSimpleName(); + return MongoCollectionUtils.getPreferredCollectionName(getType()); } } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java index dc8ebe433..8b1a6e147 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java @@ -40,8 +40,10 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.dao.DataAccessException; import org.springframework.data.document.mongodb.CollectionCallback; +import org.springframework.data.document.mongodb.MongoCollectionUtils; import org.springframework.data.document.mongodb.MongoDbUtils; import org.springframework.data.document.mongodb.MongoTemplate; +import org.springframework.data.document.mongodb.convert.CustomConvertersUnitTests.Foo; import org.springframework.data.document.mongodb.query.Criteria; import org.springframework.data.document.mongodb.query.Query; @@ -51,9 +53,17 @@ import org.springframework.data.document.mongodb.query.Query; public class MappingTests { private static final Log LOGGER = LogFactory.getLog(MongoDbUtils.class); - private final String[] collectionsToDrop = new String[] { "foobar", "person", "personmapproperty", "personpojo", - "personcustomidname", "personmultidimarrays", "personmulticollection", "personwithdbref", "personnullproperties", - "person1", "person2", "account" }; + private final String[] collectionsToDrop = new String[] { + MongoCollectionUtils.getPreferredCollectionName(Person.class), + MongoCollectionUtils.getPreferredCollectionName(PersonMapProperty.class), + MongoCollectionUtils.getPreferredCollectionName(PersonPojo.class), + MongoCollectionUtils.getPreferredCollectionName(PersonCustomIdName.class), + MongoCollectionUtils.getPreferredCollectionName(PersonMultiDimArrays.class), + MongoCollectionUtils.getPreferredCollectionName(PersonMultiCollection.class), + MongoCollectionUtils.getPreferredCollectionName(PersonWithDbRef.class), + MongoCollectionUtils.getPreferredCollectionName(PersonNullProperties.class), + MongoCollectionUtils.getPreferredCollectionName(Account.class), + "foobar", "geolocation", "person1", "person2", "account" }; ApplicationContext applicationContext; MongoTemplate template; @@ -163,14 +173,14 @@ public class MappingTests { Person p = new Person(123456789, "John", "Doe", 37, addr); p.setAccounts(accounts); - template.insert("person", p); + template.insert("Person", p); Account newAcct = new Account(); newAcct.setBalance(10000.00f); template.insert("account", newAcct); accounts.add(newAcct); - template.save("person", p); + template.save("Person", p); assertNotNull(p.getId()); @@ -243,7 +253,7 @@ public class MappingTests { DetectedCollectionWithIndex dcwi = new DetectedCollectionWithIndex("test"); template.insert(dcwi); - assertTrue(template.execute(DetectedCollectionWithIndex.class.getSimpleName().toLowerCase(), + assertTrue(template.execute(MongoCollectionUtils.getPreferredCollectionName(DetectedCollectionWithIndex.class), new CollectionCallback() { public Boolean doInCollection(DBCollection collection) throws MongoException, DataAccessException { List indexes = collection.getIndexInfo();