From e47ddf4bf27285f0da146401039b72a992f20d19 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 13 Jun 2011 13:23:33 -0700 Subject: [PATCH] Polished MonogoPersistentEntityIndexCreator. Fixed generics warnings and the index key being set to the field name in any case now. setting the index name is now only affecting the name. --- .../MongoPersistentEntityIndexCreator.java | 34 +++++++++++-------- .../event/MongoMappingEventPublisher.java | 7 ++-- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntityIndexCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntityIndexCreator.java index 3e1730e75..b37b1b217 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntityIndexCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntityIndexCreator.java @@ -36,7 +36,6 @@ import org.springframework.data.document.mongodb.index.Indexed; import org.springframework.data.document.mongodb.query.GeospatialIndex; import org.springframework.data.mapping.PropertyHandler; import org.springframework.data.mapping.event.MappingContextEvent; -import org.springframework.data.mapping.model.PersistentProperty; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -47,14 +46,19 @@ import org.springframework.util.StringUtils; * @author Jon Brisbin * @author Oliver Gierke */ -public class MongoPersistentEntityIndexCreator implements ApplicationListener { +public class MongoPersistentEntityIndexCreator implements ApplicationListener, MongoPersistentProperty>> { private static final Log log = LogFactory.getLog(MongoPersistentEntityIndexCreator.class); - private Set> classesSeen = Collections.newSetFromMap(new ConcurrentHashMap, Boolean>()); - + private final Set> classesSeen = Collections.newSetFromMap(new ConcurrentHashMap, Boolean>()); private final MongoDbFactory mongoDbFactory; + /** + * Creats a new {@link MongoPersistentEntityIndexCreator} for the given {@link MongoMappingContext} and {@link MongoDbFactory}. + * + * @param mappingContext must not be {@@iteral null} + * @param mongoDbFactory must not be {@@iteral null} + */ public MongoPersistentEntityIndexCreator(MongoMappingContext mappingContext, MongoDbFactory mongoDbFactory) { Assert.notNull(mongoDbFactory); @@ -66,11 +70,12 @@ public class MongoPersistentEntityIndexCreator implements ApplicationListener) event.getPersistentEntity()); + /* + * (non-Javadoc) + * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent) + */ + public void onApplicationEvent(MappingContextEvent, MongoPersistentProperty> event) { + checkForIndexes(event.getPersistentEntity()); } protected void checkForIndexes(final MongoPersistentEntity entity) { @@ -96,13 +101,13 @@ public class MongoPersistentEntityIndexCreator implements ApplicationListener() { + public void doWithPersistentProperty(MongoPersistentProperty persistentProperty) { Field field = persistentProperty.getField(); if (field.isAnnotationPresent(Indexed.class)) { Indexed index = field.getAnnotation(Indexed.class); String name = index.name(); - if ("".equals(name)) { + if (!StringUtils.hasText(name)) { name = field.getName(); } else { if (!name.equals(field.getName()) && index.unique() && !index.sparse()) { @@ -122,9 +127,9 @@ public class MongoPersistentEntityIndexCreator implements ApplicationListener) event); + indexCreator + .onApplicationEvent((MappingContextEvent, MongoPersistentProperty>) event); } } - }