package org.springframework.data.cloudant.config; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Configuration; import org.springframework.core.type.filter.AnnotationTypeFilter; import org.springframework.data.annotation.Persistent; import org.springframework.data.cloudant.core.CloudantFactoryBean; import org.springframework.data.cloudant.core.mapping.Document; //import org.springframework.test.context.ContextConfiguration; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import org.springframework.data.mapping.model.CamelCaseAbbreviatingFieldNamingStrategy; import org.springframework.data.mapping.model.FieldNamingStrategy; import org.springframework.data.mapping.model.PropertyNameFieldNamingStrategy; import java.util.Set; import java.util.HashSet; import java.util.Properties; /** * Created by justinsaul on 6/9/15. */ //@Configuration public abstract class AbstractCloudantConfiguration { // // protected abstract String getUsername(); // // protected abstract String getPassword(); // protected abstract String getDatabase(); // protected abstract String getAccount(); // protected abstract int getMaxConnections(); // protected abstract int getConnectionTimeout(); // @Bean // public CloudantClient cloudantClient() throws Exception { // // setLoggerProperty(cloudantLogger()); // ConnectOptions connectOptions = new ConnectOptions().setConnectionTimeout(getConnectionTimeout()).setMaxConnections(getMaxConnections()); // return new CloudantClient(getAccount(),getUsername(),getPassword(),connectOptions); // } // // protected String cloudantLogger() { // return CloudantFactoryBean.DEFAULT_LOGGER_PROPERTY; // } // // protected static void setLoggerProperty(final String logger) { // Properties systemProperties = System.getProperties(); // systemProperties.setProperty("net.spy.log.LoggerImp", logger); // System.setProperties(systemProperties); // } // // @Bean // public CloudantTemplate cloudantTemplate() throws Exception { // return new CloudantTemplate(cloudantClient(), getDatabase()); // } // // private void mappingCloudantConverter() { // } // // protected Set<Class<?>> getInitialEntitySet() throws ClassNotFoundException { // String basePackage = getMappingBasePackage(); // Set<Class<?>> initialEntitySet = new HashSet<Class<?>>(); // // if (StringUtils.hasText(basePackage)) { // ClassPathScanningCandidateComponentProvider componentProvider = new ClassPathScanningCandidateComponentProvider(false); // componentProvider.addIncludeFilter(new AnnotationTypeFilter(Document.class)); //not needed? // componentProvider.addExcludeFilter(new AnnotationTypeFilter(Persistent.class)); // for (BeanDefinition candidate : componentProvider.findCandidateComponents(basePackage)) { // initialEntitySet.add(ClassUtils.forName(candidate.getBeanClassName(),AbstractCloudantConfiguration.class.getClassLoader())); // } // } // return initialEntitySet; // } // // protected String getMappingBasePackage() { // return getClass().getPackage().getName(); // } // // protected boolean abbreviateFieldNames() { // return false; // } // // protected FieldNamingStrategy fieldNamingStrategy() { // return abbreviateFieldNames() ? new CamelCaseAbbreviatingFieldNamingStrategy() : PropertyNameFieldNamingStrategy.INSTANCE; // } }