DATAES-93 Make fully ApplicationContextAware, allows bean resolvers.

This commit is contained in:
gpanthe 2014-05-27 19:48:18 +02:00 committed by Artur Konczak
parent a92af0e3e5
commit 873dcca561
3 changed files with 36 additions and 7 deletions

View File

@ -71,6 +71,9 @@ import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
@ -95,7 +98,7 @@ import org.springframework.util.Assert;
* @author Artur Konczak
*/
public class ElasticsearchTemplate implements ElasticsearchOperations {
public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware {
private static final Logger logger = LoggerFactory.getLogger(ElasticsearchTemplate.class);
private Client client;
@ -120,8 +123,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
public ElasticsearchTemplate(Client client, ElasticsearchConverter elasticsearchConverter, ResultsMapper resultsMapper) {
this.client = client;
this.elasticsearchConverter = (elasticsearchConverter == null) ? new MappingElasticsearchConverter(
new SimpleElasticsearchMappingContext()) : elasticsearchConverter;
this.elasticsearchConverter = (elasticsearchConverter == null) ? new MappingElasticsearchConverter(
new SimpleElasticsearchMappingContext()) : elasticsearchConverter;
this.resultsMapper = (resultsMapper == null) ? new DefaultResultMapper(this.elasticsearchConverter.getMappingContext()) : resultsMapper;
}
@ -873,7 +876,14 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
return ids;
}
private static String[] toArray(List<String> values) {
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
if(elasticsearchConverter instanceof ApplicationContextAware){
((ApplicationContextAware)elasticsearchConverter).setApplicationContext(context);
}
}
private static String[] toArray(List<String> values) {
String[] valuesAsArray = new String[values.size()];
return values.toArray(valuesAsArray);
}

View File

@ -61,5 +61,8 @@ public class MappingElasticsearchConverter implements ElasticsearchConverter, Ap
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
if(mappingContext instanceof ApplicationContextAware){
((ApplicationContextAware)mappingContext).setApplicationContext(applicationContext);
}
}
}

View File

@ -18,6 +18,9 @@ package org.springframework.data.elasticsearch.core.mapping;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.mapping.context.AbstractMappingContext;
import org.springframework.data.mapping.model.SimpleTypeHolder;
import org.springframework.data.util.TypeInformation;
@ -30,11 +33,19 @@ import org.springframework.data.util.TypeInformation;
*/
public class SimpleElasticsearchMappingContext extends
AbstractMappingContext<SimpleElasticsearchPersistentEntity<?>, ElasticsearchPersistentProperty> {
AbstractMappingContext<SimpleElasticsearchPersistentEntity<?>, ElasticsearchPersistentProperty> implements ApplicationContextAware{
@Override
private ApplicationContext context;
@Override
protected <T> SimpleElasticsearchPersistentEntity<?> createPersistentEntity(TypeInformation<T> typeInformation) {
return new SimpleElasticsearchPersistentEntity<T>(typeInformation);
final SimpleElasticsearchPersistentEntity<T> persistentEntity =
new SimpleElasticsearchPersistentEntity<T>(typeInformation);
if(context != null)
{
persistentEntity.setApplicationContext(context);
}
return persistentEntity;
}
@Override
@ -42,4 +53,9 @@ public class SimpleElasticsearchMappingContext extends
SimpleElasticsearchPersistentEntity<?> owner, SimpleTypeHolder simpleTypeHolder) {
return new SimpleElasticsearchPersistentProperty(field, descriptor, owner, simpleTypeHolder);
}
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
this.context = context;
}
}