SGF-448 - GemfireRepositoryConfigurationExtension needs to override the RepositoryConfigurationExtensionSupport postProcess(:BeanDefinitionBuilder, :AnnotationRepositoryConfigurationSource) method.
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* This package provides classes and components for configuring GemFire using Spring Data GemFire's XML namespace
|
||||
* support. See more details here...
|
||||
*
|
||||
* <a href="http://docs.spring.io/spring-data-gemfire/docs/current/reference/html/#_spring_data_gemfire_core_schema_gfe">Spring Data GemFire Core Schema (gfe)</a>
|
||||
*/
|
||||
package org.springframework.data.gemfire.config;
|
||||
@@ -17,11 +17,11 @@ package org.springframework.data.gemfire.repository.config;
|
||||
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.data.gemfire.repository.support.GemfireRepositoryFactoryBean;
|
||||
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
|
||||
import org.springframework.data.repository.config.RepositoryConfigurationExtension;
|
||||
import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport;
|
||||
import org.springframework.data.repository.config.XmlRepositoryConfigurationSource;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
* {@link RepositoryConfigurationExtension} implementation to add Gemfire
|
||||
@@ -29,10 +29,13 @@ import org.w3c.dom.Element;
|
||||
* configuration.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author John Blum
|
||||
*/
|
||||
public class GemfireRepositoryConfigurationExtension extends RepositoryConfigurationExtensionSupport {
|
||||
|
||||
private static final String MAPPING_CONTEXT_REF = "mapping-context-ref";
|
||||
private static final String ANNOTATION_MAPPING_CONTEXT_REF = "mappingContextRef";
|
||||
private static final String MAPPING_CONTEXT_PROPERTY_NAME = "gemfireMappingContext";
|
||||
private static final String XML_MAPPING_CONTEXT_REF = "mapping-context-ref";
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
@@ -57,24 +60,33 @@ public class GemfireRepositoryConfigurationExtension extends RepositoryConfigura
|
||||
return "gemfire";
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport
|
||||
* #postProcess(BeanDefinitionBuilder, AnnotationRepositoryConfigurationSource)
|
||||
*/
|
||||
@Override
|
||||
public void postProcess(BeanDefinitionBuilder builder, AnnotationRepositoryConfigurationSource config) {
|
||||
String mappingContextRef = config.getAttribute(ANNOTATION_MAPPING_CONTEXT_REF);
|
||||
|
||||
if (StringUtils.hasText(mappingContextRef)) {
|
||||
builder.addPropertyReference(MAPPING_CONTEXT_PROPERTY_NAME, mappingContextRef);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.springframework.data.repository.config.
|
||||
* RepositoryConfigurationExtensionSupport
|
||||
* #postProcess(org.springframework.beans
|
||||
* .factory.support.BeanDefinitionBuilder,
|
||||
* org.springframework.data.repository
|
||||
* .config.XmlRepositoryConfigurationSource)
|
||||
*
|
||||
* @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport
|
||||
* #postProcess(BeanDefinitionBuilder, XmlRepositoryConfigurationSource)
|
||||
*/
|
||||
@Override
|
||||
public void postProcess(BeanDefinitionBuilder builder, XmlRepositoryConfigurationSource config) {
|
||||
|
||||
Element element = config.getElement();
|
||||
String mappingContextRef = element.getAttribute(MAPPING_CONTEXT_REF);
|
||||
String mappingContextRef = config.getElement().getAttribute(XML_MAPPING_CONTEXT_REF);
|
||||
|
||||
if (StringUtils.hasText(mappingContextRef)) {
|
||||
builder.addPropertyReference("gemfireMappingContext", mappingContextRef);
|
||||
builder.addPropertyReference(MAPPING_CONTEXT_PROPERTY_NAME, mappingContextRef);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,139 @@
|
||||
package org.springframework.data.gemfire.repository.config;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.CoreMatchers.instanceOf;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.hamcrest.CoreMatchers.nullValue;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.config.RuntimeBeanReference;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.data.gemfire.repository.support.GemfireRepositoryFactoryBean;
|
||||
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
|
||||
import org.springframework.data.repository.config.XmlRepositoryConfigurationSource;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
* The GemfireRepositoryConfigurationExtensionTest class is a test suite of test cases testing the contract
|
||||
* and functionality of the GemfireRepositoryConfigurationExtension class.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.junit.Test
|
||||
* @see org.mockito.Mockito
|
||||
* @see org.springframework.data.gemfire.repository.config.GemfireRepositoryConfigurationExtension
|
||||
* @since 1.6.3
|
||||
*/
|
||||
public class GemfireRepositoryConfigurationExtensionTest {
|
||||
|
||||
private GemfireRepositoryConfigurationExtension repositoryConfigurationExtension;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
repositoryConfigurationExtension = new GemfireRepositoryConfigurationExtension();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void repositoryFactoryClassNameIsGemfireRepositoryFactoryBean() {
|
||||
assertThat(repositoryConfigurationExtension.getRepositoryFactoryClassName(),
|
||||
is(equalTo(GemfireRepositoryFactoryBean.class.getName())));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void modulePrefixIsGemFire() {
|
||||
assertThat(repositoryConfigurationExtension.getModulePrefix(), is(equalTo("gemfire")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void postProcessWithAnnotationRepositoryConfigurationSource() {
|
||||
AnnotationRepositoryConfigurationSource mockRepositoryConfigurationSource =
|
||||
mock(AnnotationRepositoryConfigurationSource.class);
|
||||
|
||||
when(mockRepositoryConfigurationSource.getAttribute(eq("mappingContextRef"))).thenReturn("testMappingContext");
|
||||
|
||||
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition();
|
||||
|
||||
repositoryConfigurationExtension.postProcess(beanDefinitionBuilder, mockRepositoryConfigurationSource);
|
||||
|
||||
Object mappingContextRef = beanDefinitionBuilder.getRawBeanDefinition().getPropertyValues()
|
||||
.getPropertyValue("gemfireMappingContext").getValue();
|
||||
|
||||
assertThat(mappingContextRef, is(instanceOf(RuntimeBeanReference.class)));
|
||||
assertThat(((RuntimeBeanReference) mappingContextRef).getBeanName(), is(equalTo("testMappingContext")));
|
||||
|
||||
verify(mockRepositoryConfigurationSource, times(1)).getAttribute(eq("mappingContextRef"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void postProcessWithAnnotationRepositoryConfigurationSourceHaingNoMappingContextRefAttribute() {
|
||||
AnnotationRepositoryConfigurationSource mockRepositoryConfigurationSource =
|
||||
mock(AnnotationRepositoryConfigurationSource.class);
|
||||
|
||||
when(mockRepositoryConfigurationSource.getAttribute(eq("mappingContextRef"))).thenReturn(" ");
|
||||
|
||||
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition();
|
||||
|
||||
repositoryConfigurationExtension.postProcess(beanDefinitionBuilder, mockRepositoryConfigurationSource);
|
||||
|
||||
Object mappingContextRef = beanDefinitionBuilder.getRawBeanDefinition().getPropertyValues()
|
||||
.getPropertyValue("gemfireMappingContext");
|
||||
|
||||
assertThat(mappingContextRef, is(nullValue()));
|
||||
|
||||
verify(mockRepositoryConfigurationSource, times(1)).getAttribute(eq("mappingContextRef"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void postProcessWithXmlRepositoryConfigurationSourceHavingNoMappingContextRefAttribute() {
|
||||
Element mockElement = mock(Element.class);
|
||||
|
||||
XmlRepositoryConfigurationSource mockRepositoryConfigurationSource =
|
||||
mock(XmlRepositoryConfigurationSource.class);
|
||||
|
||||
when(mockRepositoryConfigurationSource.getElement()).thenReturn(mockElement);
|
||||
when(mockElement.getAttribute(eq("mapping-context-ref"))).thenReturn(null);
|
||||
|
||||
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition();
|
||||
|
||||
repositoryConfigurationExtension.postProcess(beanDefinitionBuilder, mockRepositoryConfigurationSource);
|
||||
|
||||
Object mappingContextRef = beanDefinitionBuilder.getRawBeanDefinition().getPropertyValues()
|
||||
.getPropertyValue("gemfireMappingContext");
|
||||
|
||||
assertThat(mappingContextRef, is(nullValue()));
|
||||
|
||||
verify(mockRepositoryConfigurationSource, times(1)).getElement();
|
||||
verify(mockElement, times(1)).getAttribute(eq("mapping-context-ref"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void postProcessWithXmlRepositoryConfigurationSourceWith() {
|
||||
Element mockElement = mock(Element.class);
|
||||
|
||||
XmlRepositoryConfigurationSource mockRepositoryConfigurationSource =
|
||||
mock(XmlRepositoryConfigurationSource.class);
|
||||
|
||||
when(mockRepositoryConfigurationSource.getElement()).thenReturn(mockElement);
|
||||
when(mockElement.getAttribute(eq("mapping-context-ref"))).thenReturn("testMappingContext");
|
||||
|
||||
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition();
|
||||
|
||||
repositoryConfigurationExtension.postProcess(beanDefinitionBuilder, mockRepositoryConfigurationSource);
|
||||
|
||||
Object mappingContextRef = beanDefinitionBuilder.getRawBeanDefinition().getPropertyValues()
|
||||
.getPropertyValue("gemfireMappingContext").getValue();
|
||||
|
||||
assertThat(mappingContextRef, is(instanceOf(RuntimeBeanReference.class)));
|
||||
assertThat(((RuntimeBeanReference) mappingContextRef).getBeanName(), is(equalTo("testMappingContext")));
|
||||
|
||||
verify(mockRepositoryConfigurationSource, times(1)).getElement();
|
||||
verify(mockElement, times(1)).getAttribute(eq("mapping-context-ref"));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user