From 123ef45975e8d695af047bb466a390447e113992 Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Fri, 25 Aug 2017 18:11:22 +0200 Subject: [PATCH] HHH-11944 Make the AbstractDelegatingSessionBuilder hierarchy generic --- ...tDelegatingMetadataBuilderImplementor.java | 2 +- ...stractDelegatingSessionFactoryBuilder.java | 2 +- .../spi/AbstractDelegatingSessionBuilder.java | 86 +++++++++---- ...ctDelegatingSessionBuilderImplementor.java | 23 ++-- ...bstractDelegatingSharedSessionBuilder.java | 121 ++++++++++++------ 5 files changed, 156 insertions(+), 78 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingMetadataBuilderImplementor.java b/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingMetadataBuilderImplementor.java index c13752507903..3a0503f905d2 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingMetadataBuilderImplementor.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingMetadataBuilderImplementor.java @@ -40,7 +40,7 @@ * to a specialization of {@link MetadataBuilderImplementor} */ @SuppressWarnings("unused") -public abstract class AbstractDelegatingMetadataBuilderImplementor> implements MetadataBuilderImplementor { +public abstract class AbstractDelegatingMetadataBuilderImplementor implements MetadataBuilderImplementor { private final MetadataBuilderImplementor delegate; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryBuilder.java b/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryBuilder.java index 2a90b1ee45ec..752338a4db0e 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryBuilder.java @@ -39,7 +39,7 @@ * @param The type of a specific sub-class; Allows sub-classes to narrow down the return-type of the contract methods * to a specialization of {@link SessionFactoryBuilder} */ -public abstract class AbstractDelegatingSessionFactoryBuilder> implements SessionFactoryBuilder { +public abstract class AbstractDelegatingSessionFactoryBuilder implements SessionFactoryBuilder { private final SessionFactoryBuilder delegate; public AbstractDelegatingSessionFactoryBuilder(SessionFactoryBuilder delegate) { diff --git a/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSessionBuilder.java b/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSessionBuilder.java index 263b3f1f4248..8a4c91c81fd4 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSessionBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSessionBuilder.java @@ -10,10 +10,12 @@ import java.util.TimeZone; import org.hibernate.ConnectionReleaseMode; +import org.hibernate.FlushMode; import org.hibernate.Interceptor; import org.hibernate.Session; import org.hibernate.SessionBuilder; import org.hibernate.SessionEventListener; +import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode; import org.hibernate.resource.jdbc.spi.StatementInspector; /** @@ -21,8 +23,9 @@ * while forwarding other method invocations to a delegate instance. * * @author Gunnar Morling + * @author Guillaume Smet */ -public abstract class AbstractDelegatingSessionBuilder implements SessionBuilder { +public abstract class AbstractDelegatingSessionBuilder implements SessionBuilder { private final SessionBuilder delegate; @@ -30,86 +33,115 @@ public AbstractDelegatingSessionBuilder(SessionBuilder delegate) { this.delegate = delegate; } + @SuppressWarnings("unchecked") + protected T getThis() { + return (T) this; + } + + protected SessionBuilder getDelegate() { + return delegate; + } + @Override public Session openSession() { return delegate.openSession(); } @Override - public SessionBuilder interceptor(Interceptor interceptor) { + public T interceptor(Interceptor interceptor) { delegate.interceptor( interceptor ); - return this; + return getThis(); } @Override - public SessionBuilder noInterceptor() { + public T noInterceptor() { delegate.noInterceptor(); - return this; + return getThis(); } @Override - public SessionBuilder statementInspector(StatementInspector statementInspector) { + public T statementInspector(StatementInspector statementInspector) { delegate.statementInspector( statementInspector ); - return this; + return getThis(); } @Override - public SessionBuilder connection(Connection connection) { + public T connection(Connection connection) { delegate.connection( connection ); - return this; + return getThis(); } + @SuppressWarnings("deprecation") @Override - public SessionBuilder connectionReleaseMode(ConnectionReleaseMode connectionReleaseMode) { + public T connectionReleaseMode(ConnectionReleaseMode connectionReleaseMode) { delegate.connectionReleaseMode( connectionReleaseMode ); - return this; + return getThis(); } @Override - public SessionBuilder autoJoinTransactions(boolean autoJoinTransactions) { + public T autoJoinTransactions(boolean autoJoinTransactions) { delegate.autoJoinTransactions( autoJoinTransactions ); - return this; + return getThis(); } @Override - public SessionBuilder autoClose(boolean autoClose) { + public T autoClose(boolean autoClose) { delegate.autoClose( autoClose ); - return this; + return getThis(); } + @SuppressWarnings("deprecation") @Override - public SessionBuilder flushBeforeCompletion(boolean flushBeforeCompletion) { + public T flushBeforeCompletion(boolean flushBeforeCompletion) { delegate.flushBeforeCompletion( flushBeforeCompletion ); - return this; + return getThis(); } @Override - public SessionBuilder tenantIdentifier(String tenantIdentifier) { + public T tenantIdentifier(String tenantIdentifier) { delegate.tenantIdentifier( tenantIdentifier ); - return this; + return getThis(); } @Override - public SessionBuilder eventListeners(SessionEventListener... listeners) { + public T eventListeners(SessionEventListener... listeners) { delegate.eventListeners( listeners ); - return this; + return getThis(); } @Override - public SessionBuilder clearEventListeners() { + public T clearEventListeners() { delegate.clearEventListeners(); - return this; + return getThis(); } @Override - public SessionBuilder jdbcTimeZone(TimeZone timeZone) { + public T jdbcTimeZone(TimeZone timeZone) { delegate.jdbcTimeZone(timeZone); - return this; + return getThis(); } @Override - public SessionBuilder setQueryParameterValidation(boolean enabled) { + public T setQueryParameterValidation(boolean enabled) { delegate.setQueryParameterValidation( enabled ); - return this; + return getThis(); + } + + @Override + public T connectionHandlingMode(PhysicalConnectionHandlingMode mode) { + delegate.connectionHandlingMode( mode ); + return getThis(); + } + + @Override + public T autoClear(boolean autoClear) { + delegate.autoClear( autoClear ); + return getThis(); + } + + @Override + public T flushMode(FlushMode flushMode) { + delegate.flushMode( flushMode ); + return getThis(); } } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSessionBuilderImplementor.java b/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSessionBuilderImplementor.java index 4b2fba99606d..e8875bad6c06 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSessionBuilderImplementor.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSessionBuilderImplementor.java @@ -6,29 +6,28 @@ */ package org.hibernate.engine.spi; -import org.hibernate.SessionBuilder; - /** * Base class for {@link SessionBuilderImplementor} implementations that wish to implement only parts of that contract * themselves while forwarding other method invocations to a delegate instance. * * @author Gunnar Morling */ -@SuppressWarnings("unused") -public abstract class AbstractDelegatingSessionBuilderImplementor - extends AbstractDelegatingSessionBuilder - implements SessionBuilderImplementor { - - private final SessionBuilderImplementor delegate; +public abstract class AbstractDelegatingSessionBuilderImplementor + extends AbstractDelegatingSessionBuilder + implements SessionBuilderImplementor { public AbstractDelegatingSessionBuilderImplementor(SessionBuilderImplementor delegate) { super( delegate ); - this.delegate = delegate; } + protected SessionBuilderImplementor getDelegate() { + return (SessionBuilderImplementor) super.getDelegate(); + } + + @SuppressWarnings({ "unchecked", "deprecation" }) @Override - public SessionBuilder owner(SessionOwner sessionOwner) { - delegate.owner( sessionOwner ); - return this; + public T owner(SessionOwner sessionOwner) { + getDelegate().owner( sessionOwner ); + return (T) this; } } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSharedSessionBuilder.java b/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSharedSessionBuilder.java index 60b9320c29c3..f661f4020034 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSharedSessionBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/spi/AbstractDelegatingSharedSessionBuilder.java @@ -7,13 +7,16 @@ package org.hibernate.engine.spi; import java.sql.Connection; +import java.util.TimeZone; import org.hibernate.ConnectionReleaseMode; +import org.hibernate.FlushMode; import org.hibernate.Interceptor; import org.hibernate.Session; import org.hibernate.SessionBuilder; import org.hibernate.SessionEventListener; import org.hibernate.SharedSessionBuilder; +import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode; import org.hibernate.resource.jdbc.spi.StatementInspector; /** @@ -21,9 +24,10 @@ * themselves while forwarding other method invocations to a delegate instance. * * @author Gunnar Morling + * @author Guillaume Smet */ @SuppressWarnings("unused") -public abstract class AbstractDelegatingSharedSessionBuilder implements SharedSessionBuilder { +public abstract class AbstractDelegatingSharedSessionBuilder implements SharedSessionBuilder { private final SharedSessionBuilder delegate; @@ -31,116 +35,159 @@ public AbstractDelegatingSharedSessionBuilder(SharedSessionBuilder delegate) { this.delegate = delegate; } + @SuppressWarnings("unchecked") + protected T getThis() { + return (T) this; + } + + public SharedSessionBuilder getDelegate() { + return delegate; + } + @Override public Session openSession() { return delegate.openSession(); } @Override - public SharedSessionBuilder interceptor() { + public T interceptor() { delegate.interceptor(); - return this; + return getThis(); } @Override - public SharedSessionBuilder connection() { + public T connection() { delegate.connection(); - return this; + return getThis(); } + @SuppressWarnings("deprecation") @Override - public SharedSessionBuilder connectionReleaseMode() { + public T connectionReleaseMode() { delegate.connectionReleaseMode(); - return this; + return getThis(); } @Override - public SharedSessionBuilder connectionHandlingMode() { + public T connectionHandlingMode() { delegate.connectionHandlingMode(); - return this; + return getThis(); } @Override - public SharedSessionBuilder autoJoinTransactions() { + public T autoJoinTransactions() { delegate.autoJoinTransactions(); - return this; + return getThis(); } @Override - public SharedSessionBuilder autoClose() { + public T autoClose() { delegate.autoClose(); - return this; + return getThis(); } + @SuppressWarnings("deprecation") @Override - public SharedSessionBuilder flushBeforeCompletion() { + public T flushBeforeCompletion() { delegate.flushBeforeCompletion(); - return this; + return getThis(); } @Override - public SharedSessionBuilder interceptor(Interceptor interceptor) { + public T interceptor(Interceptor interceptor) { delegate.interceptor( interceptor ); - return this; + return getThis(); } @Override - public SharedSessionBuilder noInterceptor() { + public T noInterceptor() { delegate.noInterceptor(); - return this; + return getThis(); } @Override - public SessionBuilder statementInspector(StatementInspector statementInspector) { + public T statementInspector(StatementInspector statementInspector) { delegate.statementInspector( statementInspector ); - return this; + return getThis(); } @Override - public SharedSessionBuilder connection(Connection connection) { + public T connection(Connection connection) { delegate.connection( connection ); - return this; + return getThis(); } + @SuppressWarnings("deprecation") @Override - public SharedSessionBuilder connectionReleaseMode(ConnectionReleaseMode connectionReleaseMode) { + public T connectionReleaseMode(ConnectionReleaseMode connectionReleaseMode) { delegate.connectionReleaseMode( connectionReleaseMode ); - return this; + return getThis(); } @Override - public SharedSessionBuilder autoJoinTransactions(boolean autoJoinTransactions) { + public T autoJoinTransactions(boolean autoJoinTransactions) { delegate.autoJoinTransactions( autoJoinTransactions ); - return this; + return getThis(); } @Override - public SharedSessionBuilder autoClose(boolean autoClose) { + public T autoClose(boolean autoClose) { delegate.autoClose( autoClose ); - return this; + return getThis(); } + @SuppressWarnings("deprecation") @Override - public SharedSessionBuilder flushBeforeCompletion(boolean flushBeforeCompletion) { + public T flushBeforeCompletion(boolean flushBeforeCompletion) { delegate.flushBeforeCompletion( flushBeforeCompletion ); - return this; + return getThis(); } @Override - public SessionBuilder tenantIdentifier(String tenantIdentifier) { + public T tenantIdentifier(String tenantIdentifier) { delegate.tenantIdentifier( tenantIdentifier ); - return this; + return getThis(); } @Override - public SessionBuilder eventListeners(SessionEventListener... listeners) { + public T eventListeners(SessionEventListener... listeners) { delegate.eventListeners( listeners ); - return this; + return getThis(); } @Override - public SessionBuilder clearEventListeners() { + public T clearEventListeners() { delegate.clearEventListeners(); - return this; + return getThis(); + } + + @Override + public T connectionHandlingMode(PhysicalConnectionHandlingMode mode) { + delegate.connectionHandlingMode( mode ); + return getThis(); + } + + @Override + public T autoClear(boolean autoClear) { + delegate.autoClear( autoClear ); + return getThis(); + } + + @Override + public T flushMode(FlushMode flushMode) { + delegate.flushMode( flushMode ); + return getThis(); + } + + @Override + public T flushMode() { + delegate.flushMode(); + return getThis(); + } + + @Override + public T jdbcTimeZone(TimeZone timeZone) { + delegate.jdbcTimeZone( timeZone ); + return getThis(); } }