1 package org.jadira.usertype.spi.shared; 2 3 import java.util.Properties; 4 5 import org.hibernate.SessionFactory; 6 import org.hibernate.engine.spi.SharedSessionContractImplementor; 7 import org.hibernate.usertype.ParameterizedType; 8 import org.jadira.usertype.spi.timezone.proxy.WrapsSession; 9 import org.jadira.usertype.spi.utils.lang.ConcurrentHashMapBackedProperties; 10 import org.jadira.usertype.spi.utils.runtime.JavaVersion; 11 12 public abstract class AbstractParameterizedMultiColumnUserType<T> extends AbstractMultiColumnUserType<T> implements ParameterizedType, IntegratorConfiguredType { 13 14 private static final long serialVersionUID = -5378286101759906332L; 15 16 private Properties parameterValues; 17 18 @Override 19 public void setParameterValues(Properties parameters) { 20 this.parameterValues = new ConcurrentHashMapBackedProperties(parameters); 21 } 22 23 protected Properties getParameterValues() { 24 return parameterValues; 25 } 26 27 @Override 28 public void applyConfiguration(SessionFactory sessionFactory) { 29 doApplyConfiguration(); 30 } 31 32 private <Z> void doApplyConfiguration() { 33 34 if (JavaVersion.isJava8OrLater() && 35 Jdbc42Configured.class.isAssignableFrom(this.getClass())) { 36 Jdbc42Configured next = (Jdbc42Configured)this; 37 performJdbc42Configuration(next); 38 } 39 40 for (int i = 0; i < getColumnMappers().length; i++) { 41 42 if (JavaVersion.isJava8OrLater() && 43 Jdbc42Configured.class.isAssignableFrom(getColumnMappers()[i].getClass())) { 44 Jdbc42Configured next = (Jdbc42Configured)this; 45 performJdbc42Configuration(next); 46 } 47 } 48 } 49 50 @SuppressWarnings("unused") 51 private void performJdbc42Configuration(Jdbc42Configured next) { 52 53 Boolean jdbc42Apis = null; 54 if (getParameterValues() != null) { 55 String apisString = getParameterValues().getProperty("jdbc42Apis"); 56 if (apisString != null) { 57 jdbc42Apis = Boolean.parseBoolean(apisString); 58 } 59 } 60 if (jdbc42Apis == null) { 61 jdbc42Apis = ConfigurationHelper.getUse42Api(); 62 } 63 if (jdbc42Apis == null) { 64 jdbc42Apis = Boolean.FALSE; 65 } 66 67 next.setUseJdbc42Apis(jdbc42Apis); 68 } 69 70 @Override 71 protected SharedSessionContractImplementor doWrapSession(SharedSessionContractImplementor session) { 72 SharedSessionContractImplementor mySession = session; 73 for (ColumnMapper<?, ?> next : getColumnMappers()) { 74 if (WrapsSession.class.isAssignableFrom(next.getClass())) { 75 mySession = ((WrapsSession)next).wrapSession(mySession); 76 } 77 } 78 if (WrapsSession.class.isAssignableFrom(this.getClass())) { 79 mySession = ((WrapsSession)this).wrapSession(mySession); 80 } 81 return mySession; 82 } 83 }