diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java index feb2aea36..9d5f484a2 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java @@ -92,7 +92,7 @@ public class BeanDescriptor { private final ConcurrentHashMap fkeyMap = new ConcurrentHashMap(); public enum EntityType { - ORM, EMBEDDED, SQL, META, LDAP, XMLELEMENT + ORM, EMBEDDED, SQL, META, XMLELEMENT } /** @@ -1950,13 +1950,6 @@ public class BeanDescriptor { return EntityType.SQL.equals(entityType); } - /** - * Return true if this an LDAP object. - */ - public boolean isLdapEntityType() { - return EntityType.LDAP.equals(entityType); - } - /** * Return the base table. Only properties mapped to the base table are by * default persisted. diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanManager.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanManager.java index c30020204..f042978cb 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanManager.java @@ -29,12 +29,5 @@ public class BeanManager { public BeanDescriptor getBeanDescriptor() { return descriptor; } - - /** - * Return true if this bean type is an LDAP entity type. - */ - public boolean isLdapEntityType() { - return descriptor.isLdapEntityType(); - } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanProperty.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanProperty.java index a171a14ba..992d3a419 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanProperty.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanProperty.java @@ -603,8 +603,6 @@ public class DeployBeanProperty { public String getElPlaceHolder(EntityType et) { if (sqlFormulaSelect != null) { return sqlFormulaSelect; - } else if (EntityType.LDAP.equals(et)){ - return getDbColumn(); } else { if (secondaryTableJoinPrefix != null){ return "${"+secondaryTableJoinPrefix+"}"+getDbColumn(); diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java index b929cee27..734bf3da8 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java @@ -97,11 +97,13 @@ public class AnnotationAssocOnes extends AnnotationParser { prop.setExtraWhere(where.clause()); } - NotNull notNull = get(prop, NotNull.class); - if (notNull != null) { - prop.setNullable(false); - // overrides optional attribute of ManyToOne etc - prop.getTableJoin().setType(TableJoin.JOIN); + if (validationAnnotations) { + NotNull notNull = get(prop, NotNull.class); + if (notNull != null) { + prop.setNullable(false); + // overrides optional attribute of ManyToOne etc + prop.getTableJoin().setType(TableJoin.JOIN); + } } // check for manually defined joins diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java index d682d0e2b..220e3c26b 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java @@ -35,7 +35,6 @@ import com.avaje.ebean.config.GlobalProperties; import com.avaje.ebean.config.dbplatform.DbEncrypt; import com.avaje.ebean.config.dbplatform.DbEncryptFunction; import com.avaje.ebean.config.dbplatform.IdType; -import com.avaje.ebeaninternal.server.deploy.BeanDescriptor.EntityType; import com.avaje.ebeaninternal.server.deploy.generatedproperty.GeneratedPropertyFactory; import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanProperty; import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssoc; @@ -48,9 +47,6 @@ import com.avaje.ebeaninternal.server.type.ScalarType; import com.avaje.ebeaninternal.server.type.ScalarTypeBytesBase; import com.avaje.ebeaninternal.server.type.ScalarTypeBytesEncrypted; import com.avaje.ebeaninternal.server.type.ScalarTypeEncryptedWrapper; -import com.avaje.ebeaninternal.server.type.ScalarTypeLdapBoolean; -import com.avaje.ebeaninternal.server.type.ScalarTypeLdapDate; -import com.avaje.ebeaninternal.server.type.ScalarTypeLdapTimestamp; /** * Read the field level deployment annotations. @@ -69,7 +65,7 @@ public class AnnotationFields extends AnnotationParser { if (GlobalProperties.getBoolean("ebean.lobEagerFetch", false)) { defaultLobFetchType = FetchType.EAGER; - } + } } /** @@ -135,16 +131,10 @@ public class AnnotationFields extends AnnotationParser { } if (prop.getDbColumn() == null) { - if (EntityType.LDAP.equals(descriptor.getEntityType())) { - // just use matching for now. Could consider an LdapNamingConvention - // later. - prop.setDbColumn(prop.getName()); - } else { - // No @Column annotation or @Column.name() not set - // Use the NamingConvention to set the DB column name - String dbColumn = namingConvention.getColumnFromProperty(beanType, prop.getName()); - prop.setDbColumn(dbColumn); - } + // No @Column annotation or @Column.name() not set + // Use the NamingConvention to set the DB column name + String dbColumn = namingConvention.getColumnFromProperty(beanType, prop.getName()); + prop.setDbColumn(dbColumn); } GeneratedValue gen = get(prop, GeneratedValue.class); @@ -201,17 +191,19 @@ public class AnnotationFields extends AnnotationParser { generatedPropFactory.setUpdateTimestamp(prop); } - NotNull notNull = get(prop, NotNull.class); - if (notNull != null) { - // explicitly specify a version column - prop.setNullable(false); - } - - Size size = get(prop, Size.class); - if (size != null) { - if (size.max() < Integer.MAX_VALUE) { + if (validationAnnotations) { + NotNull notNull = get(prop, NotNull.class); + if (notNull != null) { // explicitly specify a version column - prop.setDbLength(size.max()); + prop.setNullable(false); + } + + Size size = get(prop, Size.class); + if (size != null) { + if (size.max() < Integer.MAX_VALUE) { + // explicitly specify a version column + prop.setDbLength(size.max()); + } } } @@ -261,35 +253,6 @@ public class AnnotationFields extends AnnotationParser { } } - if (EntityType.LDAP.equals(descriptor.getEntityType())) { - adjustTypesForLdap(prop); - } - } - - private static final ScalarTypeLdapBoolean LDAP_BOOLEAN_SCALARTYPE = new ScalarTypeLdapBoolean(); - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private void adjustTypesForLdap(DeployBeanProperty prop) { - - Class pt = prop.getPropertyType(); - if (boolean.class.equals(pt) || Boolean.class.equals(pt)) { - prop.setScalarType(LDAP_BOOLEAN_SCALARTYPE); - - } else { - ScalarType sqlScalarType = prop.getScalarType(); - int sqlType = sqlScalarType.getJdbcType(); - if (sqlType == Types.TIMESTAMP) { - // Use LDAP Timestamp String format - prop.setScalarType(new ScalarTypeLdapTimestamp(sqlScalarType)); - - } else if (sqlType == Types.DATE) { - // Use LDAP Timestamp String format - prop.setScalarType(new ScalarTypeLdapDate(sqlScalarType)); - - } else { - // Just using string parsing for all other types - } - } } private void setEncryption(DeployBeanProperty prop, boolean dbEncString, int dbLen) { diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationParser.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationParser.java index 85ec3b7b8..f4afdcedf 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationParser.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationParser.java @@ -16,11 +16,22 @@ public abstract class AnnotationParser extends AnnotationBase { protected final Class beanType; + protected boolean validationAnnotations; + public AnnotationParser(DeployBeanInfo info) { super(info.getUtil()); this.info = info; this.beanType = info.getDescriptor().getBeanType(); this.descriptor = info.getDescriptor(); + + try { + Class.forName("javax.validation.constraints.NotNull"); + validationAnnotations = true; + } catch (ClassNotFoundException e) { + // javax.validation not in the classpath so don't + // check for NotNull and Size + validationAnnotations = false; + } } /** diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLdapBoolean.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLdapBoolean.java deleted file mode 100644 index 6fb897d66..000000000 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLdapBoolean.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.avaje.ebeaninternal.server.type; - - -/** - * ScalarType for LDAP Boolean. - */ -public class ScalarTypeLdapBoolean extends ScalarTypeBoolean.StringBoolean { - - public ScalarTypeLdapBoolean() { - super("TRUE", "FALSE"); - } - -} diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLdapDate.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLdapDate.java deleted file mode 100644 index c04e9cde0..000000000 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLdapDate.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.avaje.ebeaninternal.server.type; - -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.sql.SQLException; -import java.sql.Types; -import java.text.SimpleDateFormat; -import java.util.Date; - -import javax.persistence.PersistenceException; - -import com.avaje.ebean.text.json.JsonValueAdapter; -import com.avaje.ebeaninternal.server.text.json.WriteJsonBuffer; - -/** - * Wrapper type that wraps all java.sql.Date types for LDAP. - * - * @author rbygrave - */ -public class ScalarTypeLdapDate implements ScalarType { - - private static final String timestampLDAPFormat = "yyyyMMddHHmmss'Z'"; - - private final ScalarType baseType; - - public ScalarTypeLdapDate(ScalarType baseType) { - this.baseType = baseType; - } - - public T toBeanType(Object value) { - if (value == null){ - return null; - } - if (value instanceof String == false){ - String msg = "Expecting a String type but got "+value.getClass()+" value["+value+"]"; - throw new PersistenceException(msg); - } - try { - SimpleDateFormat sdf = new SimpleDateFormat(timestampLDAPFormat); - Date date = sdf.parse((String)value); - - return baseType.parseDateTime(date.getTime()); - - } catch (Exception e) { - String msg = "Error parsing LDAP timestamp "+value; - throw new PersistenceException(msg, e); - } - } - - public Object toJdbcType(Object value) { - - if (value == null){ - return null; - } - - Object ts = baseType.toJdbcType(value); - if (ts instanceof java.sql.Date == false){ - String msg = "Expecting a java.sql.Date type but got "+value.getClass()+" value["+value+"]"; - throw new PersistenceException(msg); - } - - java.sql.Date t = (java.sql.Date)ts; - SimpleDateFormat sdf = new SimpleDateFormat(timestampLDAPFormat); - return sdf.format(t); - } - - - public void bind(DataBind b, T value) throws SQLException { - baseType.bind(b, value); - } - - public int getJdbcType() { - return Types.VARCHAR; - } - - public int getLength() { - return baseType.getLength(); - } - - public Class getType() { - return baseType.getType(); - } - - public boolean isDateTimeCapable() { - return baseType.isDateTimeCapable(); - } - - public boolean isJdbcNative() { - return false; - } - - public void loadIgnore(DataReader dataReader) { - baseType.loadIgnore(dataReader); - } - - public String format(Object v) { - return baseType.format(v); - } - - public String formatValue(T t) { - return baseType.formatValue(t); - } - - public T parse(String value) { - return baseType.parse(value); - } - - public T parseDateTime(long systemTimeMillis) { - return baseType.parseDateTime(systemTimeMillis); - } - - public T read(DataReader dataReader) throws SQLException { - return baseType.read(dataReader); - } - - public void accumulateScalarTypes(String propName, CtCompoundTypeScalarList list) { - baseType.accumulateScalarTypes(propName, list); - } - - public String jsonToString(T value, JsonValueAdapter ctx) { - return baseType.jsonToString(value, ctx); - } - - public void jsonWrite(WriteJsonBuffer buffer, T value, JsonValueAdapter ctx) { - baseType.jsonWrite(buffer, value, ctx); - } - - public T jsonFromString(String value, JsonValueAdapter ctx) { - return baseType.jsonFromString(value, ctx); - } - - public Object readData(DataInput dataInput) throws IOException { - return baseType.readData(dataInput); - } - - public void writeData(DataOutput dataOutput, Object v) throws IOException { - baseType.writeData(dataOutput, v); - } - -} diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLdapTimestamp.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLdapTimestamp.java deleted file mode 100644 index e7321b103..000000000 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLdapTimestamp.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.avaje.ebeaninternal.server.type; - -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.sql.SQLException; -import java.sql.Timestamp; -import java.sql.Types; -import java.text.SimpleDateFormat; -import java.util.Date; - -import javax.persistence.PersistenceException; - -import com.avaje.ebean.text.json.JsonValueAdapter; -import com.avaje.ebeaninternal.server.text.json.WriteJsonBuffer; - -/** - * Wrapper type that wraps all java.sql.Timestamp types for LDAP. - * - * @author rbygrave - */ -public class ScalarTypeLdapTimestamp implements ScalarType { - - private static final String timestampLDAPFormat = "yyyyMMddHHmmss'Z'"; - - private final ScalarType baseType; - - public ScalarTypeLdapTimestamp(ScalarType baseType) { - this.baseType = baseType; - } - - public T toBeanType(Object value) { - if (value == null){ - return null; - } - if (value instanceof String == false){ - String msg = "Expecting a String type but got "+value.getClass()+" value["+value+"]"; - throw new PersistenceException(msg); - } - try { - SimpleDateFormat sdf = new SimpleDateFormat(timestampLDAPFormat); - Date date = sdf.parse((String)value); - - return baseType.parseDateTime(date.getTime()); - - } catch (Exception e) { - String msg = "Error parsing LDAP timestamp "+value; - throw new PersistenceException(msg, e); - } - } - - public Object toJdbcType(Object value) { - - if (value == null){ - return null; - } - - Object ts = baseType.toJdbcType(value); - if (ts instanceof java.sql.Timestamp == false){ - String msg = "Expecting a Timestamp type but got "+value.getClass()+" value["+value+"]"; - throw new PersistenceException(msg); - } - - Timestamp t = (Timestamp)ts; - SimpleDateFormat sdf = new SimpleDateFormat(timestampLDAPFormat); - return sdf.format(t); - } - - - public void bind(DataBind b, T value) throws SQLException { - baseType.bind(b, value); - } - - public int getJdbcType() { - return Types.VARCHAR; - } - - public int getLength() { - return baseType.getLength(); - } - - public Class getType() { - return baseType.getType(); - } - - public boolean isDateTimeCapable() { - return baseType.isDateTimeCapable(); - } - - public boolean isJdbcNative() { - return false; - } - - public void loadIgnore(DataReader dataReader) { - baseType.loadIgnore(dataReader); - } - - public String format(Object v) { - return baseType.format(v); - } - - public String formatValue(T t) { - return baseType.formatValue(t); - } - - public T parse(String value) { - return baseType.parse(value); - } - - public T parseDateTime(long systemTimeMillis) { - return baseType.parseDateTime(systemTimeMillis); - } - - public T read(DataReader dataReader) throws SQLException { - return baseType.read(dataReader); - } - - public void accumulateScalarTypes(String propName, CtCompoundTypeScalarList list) { - baseType.accumulateScalarTypes(propName, list); - } - - public String jsonToString(T value, JsonValueAdapter ctx) { - return baseType.jsonToString(value, ctx); - } - - public void jsonWrite(WriteJsonBuffer buffer, T value, JsonValueAdapter ctx) { - baseType.jsonWrite(buffer, value, ctx); - } - - public T jsonFromString(String value, JsonValueAdapter ctx) { - return baseType.jsonFromString(value, ctx); - } - - public Object readData(DataInput dataInput) throws IOException { - return baseType.readData(dataInput); - } - - public void writeData(DataOutput dataOutput, Object v) throws IOException { - baseType.writeData(dataOutput, v); - } -}