package org.springframework.data.cloudant.core.repository; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.data.cloudant.config.BeanNames; import org.springframework.data.cloudant.core.mapping.Document; import org.springframework.data.config.ParsingUtils; import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource; import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport; import org.springframework.data.repository.config.RepositoryConfigurationSource; import org.springframework.data.repository.config.XmlRepositoryConfigurationSource; import org.w3c.dom.Element; import java.lang.annotation.Annotation; import java.util.Collection; import java.util.Collections; /** * Created by kevin on 6/18/15. */ public class CloudantRepositoryConfigurationExtension extends RepositoryConfigurationExtensionSupport { private static final String CLOUDANT_TEMPLATE_REF = "cloud-template-ref"; private boolean fallbackMappingContextCreated = false; /* * (non-Javadoc) * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#getModuleName() */ @Override public String getModuleName() { return "Cloudant"; } /* * (non-Javadoc) * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#getModulePrefix() */ @Override protected String getModulePrefix() { return "cloudant"; } /* * (non-Javadoc) * @see org.springframework.data.repository.config.RepositoryConfigurationExtension#getRepositoryFactoryClassName() */ public String getRepositoryFactoryClassName() { return CloudantRepositoryFactoryBean.class.getName(); } /* * (non-Javadoc) * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#getIdentifyingAnnotations() */ @Override protected Collection<Class<? extends Annotation>> getIdentifyingAnnotations() { return Collections.<Class<? extends Annotation>> singleton(Document.class); } /* * (non-Javadoc) * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#getIdentifyingTypes() */ @Override protected Collection<Class<?>> getIdentifyingTypes() { return Collections.<Class<?>> singleton(CloudantCrudRepository.class); } // /* // * (non-Javadoc) // * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#postProcess(org.springframework.beans.factory.support.BeanDefinitionBuilder, org.springframework.data.repository.config.RepositoryConfigurationSource) // */ // @Override // public void postProcess(BeanDefinitionBuilder builder, RepositoryConfigurationSource source) { // // if (fallbackMappingContextCreated) { //// builder.addPropertyReference("mappingContext", BeanNames.MAPPING_CONTEXT_BEAN_NAME); // } // } // // /* // * (non-Javadoc) // * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#postProcess(org.springframework.beans.factory.support.BeanDefinitionBuilder, org.springframework.data.repository.config.XmlRepositoryConfigurationSource) // */ // @Override // public void postProcess(BeanDefinitionBuilder builder, XmlRepositoryConfigurationSource config) { // //// Element element = config.getElement(); //// //// ParsingUtils.setPropertyReference(builder, element, MONGO_TEMPLATE_REF, "mongoOperations"); //// ParsingUtils.setPropertyValue(builder, element, CREATE_QUERY_INDEXES, "createIndexesForQueryMethods"); // } // // /* // * (non-Javadoc) // * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#postProcess(org.springframework.beans.factory.support.BeanDefinitionBuilder, org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource) // */ // @Override // public void postProcess(BeanDefinitionBuilder builder, AnnotationRepositoryConfigurationSource config) { // // AnnotationAttributes attributes = config.getAttributes(); // //// builder.addPropertyReference("mongoOperations", attributes.getString("mongoTemplateRef")); //// builder.addPropertyValue("createIndexesForQueryMethods", attributes.getBoolean("createIndexesForQueryMethods")); // } // // /* // * (non-Javadoc) // * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#registerBeansForRoot(org.springframework.beans.factory.support.BeanDefinitionRegistry, org.springframework.data.repository.config.RepositoryConfigurationSource) // */ // @Override // public void registerBeansForRoot(BeanDefinitionRegistry registry, RepositoryConfigurationSource configurationSource) { // // super.registerBeansForRoot(registry, configurationSource); // // if (!registry.containsBeanDefinition(BeanNames.MAPPING_CONTEXT_BEAN_NAME)) { // //// RootBeanDefinition definition = new RootBeanDefinition(MongoMappingContext.class); //// definition.setRole(AbstractBeanDefinition.ROLE_INFRASTRUCTURE); //// definition.setSource(configurationSource.getSource()); //// //// registry.registerBeanDefinition(BeanNames.MAPPING_CONTEXT_BEAN_NAME, definition); // } // } }