From 609704a3bf695a4fad0be4426af6bda659c3caad Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 25 Mar 2016 11:51:42 -0700 Subject: [PATCH] Polish --- ...o4jRepositoriesAutoConfigureRegistrar.java | 1 + .../neo4j/Neo4jAutoConfiguration.java | 3 +- .../autoconfigure/neo4j/Neo4jProperties.java | 57 +++++++++++-------- .../neo4j/Neo4jPropertiesTests.java | 2 +- .../AbstractEntityScanBeanPostProcessor.java | 13 +++-- .../scan/AbstractEntityScanRegistrar.java | 27 +++++---- .../boot/neo4j/NodeEntityScan.java | 12 ++-- .../boot/neo4j/NodeEntityScanRegistrar.java | 11 ++-- .../orm/jpa/EntityManagerFactoryBuilder.java | 1 - .../boot/orm/jpa/JpaEntityScanRegistrar.java | 7 ++- .../context/scan/TestEntityScanRegistrar.java | 3 +- .../context/scan/TestEntityScanTests.java | 13 ++++- 12 files changed, 87 insertions(+), 63 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfigureRegistrar.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfigureRegistrar.java index fcf261b39c..fc3585a381 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfigureRegistrar.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfigureRegistrar.java @@ -50,6 +50,7 @@ class Neo4jRepositoriesAutoConfigureRegistrar @EnableNeo4jRepositories private static class EnableNeo4jRepositoriesConfiguration { + } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfiguration.java index 925e9561e7..e22a30c366 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfiguration.java @@ -72,8 +72,7 @@ public class Neo4jAutoConfiguration { @Override public SessionFactory getSessionFactory() { - SessionFactoryProvider provider = this.sessionFactoryProvider.getObject(); - return provider.getSessionFactory(); + return this.sessionFactoryProvider.getObject().getSessionFactory(); } @Bean diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jProperties.java index 56b2adc861..aa23c6c394 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jProperties.java @@ -20,6 +20,7 @@ import java.net.URI; import java.net.URISyntaxException; import org.neo4j.ogm.config.Configuration; +import org.neo4j.ogm.config.DriverConfiguration; import org.springframework.beans.BeansException; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -115,31 +116,31 @@ public class Neo4jProperties implements ApplicationContextAware { */ public Configuration createConfiguration() { Configuration configuration = new Configuration(); - if (this.uri == null) { - if (getEmbedded().isEnabled() - && ClassUtils.isPresent(EMBEDDED_DRIVER, this.classLoader)) { - configuration.driverConfiguration().setDriverClassName(EMBEDDED_DRIVER); - } - else { - configuration.driverConfiguration().setDriverClassName(HTTP_DRIVER); - configuration.driverConfiguration().setURI(DEFAULT_HTTP_URI); - } - } - else { - configuration.driverConfiguration().setDriverClassName(deduceDriverFromUri()); - configuration.driverConfiguration().setURI(this.uri); - } - - if (this.username != null && this.password != null) { - configuration.driverConfiguration().setCredentials(this.username, - this.password); - } + configureDriver(configuration.driverConfiguration()); if (this.compiler != null) { configuration.compilerConfiguration().setCompilerClassName(this.compiler); } return configuration; } + private void configureDriver(DriverConfiguration driverConfiguration) { + if (this.uri != null) { + configureDriverFromUri(driverConfiguration, this.uri); + } + else { + configureDriverWithDefaults(driverConfiguration); + } + if (this.username != null && this.password != null) { + driverConfiguration.setCredentials(this.username, this.password); + } + } + + private void configureDriverFromUri(DriverConfiguration driverConfiguration, + String uri) { + driverConfiguration.setDriverClassName(deduceDriverFromUri()); + driverConfiguration.setURI(uri); + } + private String deduceDriverFromUri() { try { URI uri = new URI(this.uri); @@ -147,13 +148,11 @@ public class Neo4jProperties implements ApplicationContextAware { if (scheme == null || scheme.equals("file")) { return EMBEDDED_DRIVER; } - else if ("http".equals(scheme)) { + if ("http".equals(scheme)) { return HTTP_DRIVER; } - else { - throw new IllegalArgumentException( - "Could not deduce driver to use based on URI '" + uri + "'"); - } + throw new IllegalArgumentException( + "Could not deduce driver to use based on URI '" + uri + "'"); } catch (URISyntaxException ex) { throw new IllegalArgumentException( @@ -161,6 +160,16 @@ public class Neo4jProperties implements ApplicationContextAware { } } + private void configureDriverWithDefaults(DriverConfiguration driverConfiguration) { + if (getEmbedded().isEnabled() + && ClassUtils.isPresent(EMBEDDED_DRIVER, this.classLoader)) { + driverConfiguration.setDriverClassName(EMBEDDED_DRIVER); + return; + } + driverConfiguration.setDriverClassName(HTTP_DRIVER); + driverConfiguration.setURI(DEFAULT_HTTP_URI); + } + public static class Embedded { /** diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jPropertiesTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jPropertiesTests.java index 14715bd16e..d4e5edc65d 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jPropertiesTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jPropertiesTests.java @@ -127,7 +127,7 @@ public class Neo4jPropertiesTests { private static void assertCredentials(Configuration actual, String username, String password) { - Credentials credentials = actual.driverConfiguration().getCredentials(); + Credentials credentials = actual.driverConfiguration().getCredentials(); if (username == null & password == null) { assertThat(credentials).isNull(); } diff --git a/spring-boot/src/main/java/org/springframework/boot/context/scan/AbstractEntityScanBeanPostProcessor.java b/spring-boot/src/main/java/org/springframework/boot/context/scan/AbstractEntityScanBeanPostProcessor.java index 06885ef909..7642f66df8 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/scan/AbstractEntityScanBeanPostProcessor.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/scan/AbstractEntityScanBeanPostProcessor.java @@ -21,15 +21,18 @@ import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.core.Ordered; /** - * A base {@link BeanPostProcessor} implementation that holds the packages to - * use for a given component. An implementation must implement - * {@link #postProcessBeforeInitialization(Object, String)} and update the - * component responsible to manage the packages to scan. + * A base {@link BeanPostProcessor} implementation that holds the packages to use for a + * given component. An implementation must implement + * {@link #postProcessBeforeInitialization(Object, String)} and update the component + * responsible to manage the packages to scan. * + * @author Phillip Webb + * @author Oliver Gierke * @author Stephane Nicoll * @since 1.4.0 */ -public abstract class AbstractEntityScanBeanPostProcessor implements BeanPostProcessor, Ordered { +public abstract class AbstractEntityScanBeanPostProcessor + implements BeanPostProcessor, Ordered { private final String[] packagesToScan; diff --git a/spring-boot/src/main/java/org/springframework/boot/context/scan/AbstractEntityScanRegistrar.java b/spring-boot/src/main/java/org/springframework/boot/context/scan/AbstractEntityScanRegistrar.java index 5d9cf355f4..85cd34cf98 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/scan/AbstractEntityScanRegistrar.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/scan/AbstractEntityScanRegistrar.java @@ -34,22 +34,24 @@ import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; /** - * A baseĀ {@link ImportBeanDefinitionRegistrar} used to collect the packages to - * scan for a given component. + * A baseĀ {@link ImportBeanDefinitionRegistrar} used to collect the packages to scan for a + * given component. *

* Expect to process an annotation type that defines a {@code basePackage} and * {@code basePackageClasses} attributes as well as a {@code value} alias of * {@code basePackage}. *

* The {@link ImportBeanDefinitionRegistrar} registers a single - * {@link AbstractEntityScanBeanPostProcessor} implementation with the packages - * to use. + * {@link AbstractEntityScanBeanPostProcessor} implementation with the packages to use. * + * @author Phillip Webb + * @author Oliver Gierke * @author Stephane Nicoll * @since 1.4.0 * @see AbstractEntityScanBeanPostProcessor */ -public abstract class AbstractEntityScanRegistrar implements ImportBeanDefinitionRegistrar { +public abstract class AbstractEntityScanRegistrar + implements ImportBeanDefinitionRegistrar { private final Class annotationType; @@ -71,7 +73,6 @@ public abstract class AbstractEntityScanRegistrar implements ImportBeanDefinitio this.beanPostProcessorType = beanPostProcessorType; } - @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { @@ -91,9 +92,10 @@ public abstract class AbstractEntityScanRegistrar implements ImportBeanDefinitio String[] basePackages = attributes.getStringArray("basePackages"); Class[] basePackageClasses = attributes.getClassArray("basePackageClasses"); if (!ObjectUtils.isEmpty(value)) { - Assert.state(ObjectUtils.isEmpty(basePackages), String.format( - "@%s basePackages and value attributes are mutually exclusive", - this.annotationType.getSimpleName())); + Assert.state(ObjectUtils.isEmpty(basePackages), + String.format( + "@%s basePackages and value attributes are mutually exclusive", + this.annotationType.getSimpleName())); } Set packagesToScan = new LinkedHashSet(); packagesToScan.addAll(Arrays.asList(value)); @@ -123,9 +125,10 @@ public abstract class AbstractEntityScanRegistrar implements ImportBeanDefinitio private void updateEntityScanBeanPostProcessor(BeanDefinitionRegistry registry, Set packagesToScan) { - BeanDefinition definition = registry.getBeanDefinition(this.beanPostProcessorName); - ConstructorArgumentValues.ValueHolder constructorArguments = definition.getConstructorArgumentValues() - .getGenericArgumentValue(String[].class); + BeanDefinition definition = registry + .getBeanDefinition(this.beanPostProcessorName); + ConstructorArgumentValues.ValueHolder constructorArguments = definition + .getConstructorArgumentValues().getGenericArgumentValue(String[].class); Set mergedPackages = new LinkedHashSet(); mergedPackages.addAll(Arrays.asList((String[]) constructorArguments.getValue())); mergedPackages.addAll(packagesToScan); diff --git a/spring-boot/src/main/java/org/springframework/boot/neo4j/NodeEntityScan.java b/spring-boot/src/main/java/org/springframework/boot/neo4j/NodeEntityScan.java index 149234fa99..7ee30f5831 100644 --- a/spring-boot/src/main/java/org/springframework/boot/neo4j/NodeEntityScan.java +++ b/spring-boot/src/main/java/org/springframework/boot/neo4j/NodeEntityScan.java @@ -22,16 +22,17 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.neo4j.ogm.annotation.NodeEntity; import org.neo4j.ogm.session.SessionFactory; import org.springframework.context.annotation.Import; /** - * Configures the {@link SessionFactory} to scan for node entity - * classes in the classpath. This annotation provides an alternative to manually setting - * {@link SessionFactoryProvider#setPackagesToScan(String...)} and is - * particularly useful if you want to configure entity scanning in a type-safe way, or if - * your {@link SessionFactory} is auto-configured. + * Configures the {@link SessionFactory} to scan for Neo4J {@link NodeEntity} classes in + * the classpath. This annotation provides an alternative to manually setting + * {@link SessionFactoryProvider#setPackagesToScan(String...)} and is particularly useful + * if you want to configure entity scanning in a type-safe way, or if your + * {@link SessionFactory} is auto-configured. *

* A {@link SessionFactoryProvider} must be configured within your Spring * ApplicationContext in order to use entity scanning. Furthermore, any existing @@ -42,7 +43,6 @@ import org.springframework.context.annotation.Import; * packages are not defined scanning will occur from the package of the class with this * annotation. * - * @author Phillip Webb * @author Stephane Nicoll * @since 1.4.0 */ diff --git a/spring-boot/src/main/java/org/springframework/boot/neo4j/NodeEntityScanRegistrar.java b/spring-boot/src/main/java/org/springframework/boot/neo4j/NodeEntityScanRegistrar.java index 64c2cdfbdc..aaa6b6cf5d 100644 --- a/spring-boot/src/main/java/org/springframework/boot/neo4j/NodeEntityScanRegistrar.java +++ b/spring-boot/src/main/java/org/springframework/boot/neo4j/NodeEntityScanRegistrar.java @@ -32,16 +32,17 @@ import org.springframework.util.Assert; class NodeEntityScanRegistrar extends AbstractEntityScanRegistrar { NodeEntityScanRegistrar() { - super(NodeEntityScan.class, "nodeEntityScanBeanPostProcessor", NodeEntityScanBeanPostProcessor.class); + super(NodeEntityScan.class, "nodeEntityScanBeanPostProcessor", + NodeEntityScanBeanPostProcessor.class); } /** * {@link BeanPostProcessor} to set - * {@link SessionFactoryProvider#setPackagesToScan(String...)} based - * on an {@link NodeEntityScan} annotation. + * {@link SessionFactoryProvider#setPackagesToScan(String...)} based on an + * {@link NodeEntityScan} annotation. */ - static class NodeEntityScanBeanPostProcessor extends AbstractEntityScanBeanPostProcessor - implements SmartInitializingSingleton { + static class NodeEntityScanBeanPostProcessor extends + AbstractEntityScanBeanPostProcessor implements SmartInitializingSingleton { private boolean processed; diff --git a/spring-boot/src/main/java/org/springframework/boot/orm/jpa/EntityManagerFactoryBuilder.java b/spring-boot/src/main/java/org/springframework/boot/orm/jpa/EntityManagerFactoryBuilder.java index 1788dbba6e..1542ead327 100644 --- a/spring-boot/src/main/java/org/springframework/boot/orm/jpa/EntityManagerFactoryBuilder.java +++ b/spring-boot/src/main/java/org/springframework/boot/orm/jpa/EntityManagerFactoryBuilder.java @@ -177,7 +177,6 @@ public class EntityManagerFactoryBuilder { else { entityManagerFactoryBean.setDataSource(this.dataSource); } - entityManagerFactoryBean.setPackagesToScan(this.packagesToScan); entityManagerFactoryBean.getJpaPropertyMap() .putAll(EntityManagerFactoryBuilder.this.jpaProperties); diff --git a/spring-boot/src/main/java/org/springframework/boot/orm/jpa/JpaEntityScanRegistrar.java b/spring-boot/src/main/java/org/springframework/boot/orm/jpa/JpaEntityScanRegistrar.java index b73e0e08aa..d7d9ccdeee 100644 --- a/spring-boot/src/main/java/org/springframework/boot/orm/jpa/JpaEntityScanRegistrar.java +++ b/spring-boot/src/main/java/org/springframework/boot/orm/jpa/JpaEntityScanRegistrar.java @@ -34,7 +34,8 @@ import org.springframework.util.Assert; class JpaEntityScanRegistrar extends AbstractEntityScanRegistrar { JpaEntityScanRegistrar() { - super(EntityScan.class, "entityScanBeanPostProcessor", JpaEntityScanBeanPostProcessor.class); + super(EntityScan.class, "entityScanBeanPostProcessor", + JpaEntityScanBeanPostProcessor.class); } /** @@ -42,8 +43,8 @@ class JpaEntityScanRegistrar extends AbstractEntityScanRegistrar { * {@link LocalContainerEntityManagerFactoryBean#setPackagesToScan(String...)} based * on an {@link EntityScan} annotation. */ - static class JpaEntityScanBeanPostProcessor extends AbstractEntityScanBeanPostProcessor - implements SmartInitializingSingleton { + static class JpaEntityScanBeanPostProcessor extends + AbstractEntityScanBeanPostProcessor implements SmartInitializingSingleton { private boolean processed; diff --git a/spring-boot/src/test/java/org/springframework/boot/context/scan/TestEntityScanRegistrar.java b/spring-boot/src/test/java/org/springframework/boot/context/scan/TestEntityScanRegistrar.java index 7976c19eea..af86af37df 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/scan/TestEntityScanRegistrar.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/scan/TestEntityScanRegistrar.java @@ -44,7 +44,8 @@ class TestEntityScanRegistrar extends AbstractEntityScanRegistrar { } - static class TestEntityScanBeanPostProcessor extends AbstractEntityScanBeanPostProcessor { + static class TestEntityScanBeanPostProcessor + extends AbstractEntityScanBeanPostProcessor { TestEntityScanBeanPostProcessor(String[] packagesToScan) { super(packagesToScan); diff --git a/spring-boot/src/test/java/org/springframework/boot/context/scan/TestEntityScanTests.java b/spring-boot/src/test/java/org/springframework/boot/context/scan/TestEntityScanTests.java index c21377cc34..8cc8163120 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/scan/TestEntityScanTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/scan/TestEntityScanTests.java @@ -103,9 +103,7 @@ public class TestEntityScanTests { } private void assertSetPackagesToScan(String... expected) { - String[] actual = this.context - .getBean(TestFactoryBean.class) - .getPackagesToScan(); + String[] actual = this.context.getBean(TestFactoryBean.class).getPackagesToScan(); assertThat(actual).isEqualTo(expected); } @@ -121,38 +119,47 @@ public class TestEntityScanTests { @TestEntityScan("com.mycorp.entity") static class ValueConfig extends BaseConfig { + } @TestEntityScan(basePackages = "com.mycorp.entity2") static class BasePackagesConfig extends BaseConfig { + } @TestEntityScan(basePackageClasses = TestEntityScanTests.class) static class BasePackageClassesConfig extends BaseConfig { + } @TestEntityScan static class FromConfigConfig extends BaseConfig { + } @TestEntityScan(value = "com.mycorp.entity", basePackages = "com.mycorp") static class ValueAndBasePackages extends BaseConfig { + } @TestEntityScan(value = "com.mycorp.entity", basePackageClasses = TestEntityScanTests.class) static class ValueAndBasePackageClasses extends BaseConfig { + } @TestEntityScan(basePackages = "com.mycorp.entity2", basePackageClasses = TestEntityScanTests.class) static class BasePackagesAndBasePackageClasses extends BaseConfig { + } @TestEntityScan(basePackages = "foo") static class MultiScanFirst extends BaseConfig { + } @TestEntityScan(basePackages = "bar") static class MultiScanSecond extends BaseConfig { + } }