Author: adrianc
Date: Sun Nov 15 20:47:42 2009 New Revision: 836415 URL: http://svn.apache.org/viewvc?rev=836415&view=rev Log: The first step in getting the entity engine to use the new Java object type conversion code. Right now it only works while getting values from the database. Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java?rev=836415&r1=836414&r2=836415&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java Sun Nov 15 20:47:42 2009 @@ -26,10 +26,10 @@ import java.math.BigDecimal; import java.nio.ByteBuffer; import java.sql.Blob; +import java.sql.Clob; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; -import java.sql.Clob; import java.util.Collection; import java.util.Iterator; import java.util.List; @@ -42,6 +42,8 @@ import javolution.util.FastMap; +import org.ofbiz.base.conversion.Converter; +import org.ofbiz.base.conversion.Converters; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.ObjectType; import org.ofbiz.base.util.UtilGenerics; @@ -55,7 +57,6 @@ import org.ofbiz.entity.condition.EntityConditionParam; import org.ofbiz.entity.condition.OrderByList; import org.ofbiz.entity.config.DatasourceInfo; -import org.ofbiz.entity.datasource.GenericDAO; import org.ofbiz.entity.model.ModelEntity; import org.ofbiz.entity.model.ModelField; import org.ofbiz.entity.model.ModelFieldType; @@ -68,7 +69,7 @@ * */ public class SqlJdbcUtil { - public static final String module = GenericDAO.class.getName(); + public static final String module = SqlJdbcUtil.class.getName(); public static final int CHAR_BUFFER_SIZE = 4096; @@ -487,6 +488,7 @@ } } + @SuppressWarnings("unchecked") public static void getValue(ResultSet rs, int ind, ModelField curField, GenericEntity entity, ModelFieldTypeReader modelFieldTypeReader) throws GenericEntityException { ModelFieldType mft = modelFieldTypeReader.getModelFieldType(curField.getType()); @@ -494,6 +496,37 @@ throw new GenericModelException("definition fieldType " + curField.getType() + " not found, cannot getValue for field " + entity.getEntityName() + "." + curField.getName() + "."); } + + // ----- Try out the new converter code ----- + + Object sourceObject = null; + try { + sourceObject = rs.getObject(ind); + if (sourceObject == null) { + entity.dangerousSetNoCheckButFast(curField, null); + return; + } + } catch (SQLException e) { + throw new GenericEntityException(e); + } + Class<?> targetClass = mft.getJavaClass(); + if (targetClass != null) { + if (targetClass.equals(sourceObject.getClass())) { + entity.dangerousSetNoCheckButFast(curField, sourceObject); + return; + } + try { + Converter<Object, Object> converter = (Converter<Object, Object>) Converters.getConverter(sourceObject.getClass(), targetClass); + entity.dangerousSetNoCheckButFast(curField, converter.convert(sourceObject)); + return; + } catch (Exception e) { + Debug.logError(e, module); + } + Debug.logInfo("Unable to convert, falling back on switch statement", module); + } + + // ------------------------------------------ + String fieldType = mft.getJavaType(); try { Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java?rev=836415&r1=836414&r2=836415&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelFieldType.java Sun Nov 15 20:47:42 2009 @@ -19,26 +19,41 @@ package org.ofbiz.entity.model; import java.io.Serializable; -import java.util.*; -import org.w3c.dom.*; +import java.util.ArrayList; +import java.util.List; -import org.ofbiz.base.util.*; +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.UtilXml; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; /** * Generic Entity - FieldType model class * */ + +@SuppressWarnings("serial") public class ModelFieldType implements Serializable { + public static final String module = ModelFieldType.class.getName(); + /** The type of the Field */ protected String type = null; /** The java-type of the Field */ protected String javaType = null; + /** The Java class of the Field */ + protected Class<?> javaClass = null; + /** The sql-type of the Field */ protected String sqlType = null; + /** The sql class of the Field */ + protected Class<?> sqlClass = null; + /** The sql-type-alias of the Field, this is optional */ protected String sqlTypeAlias = null; @@ -54,7 +69,6 @@ this.javaType = UtilXml.checkEmpty(fieldTypeElement.getAttribute("java-type")).intern(); this.sqlType = UtilXml.checkEmpty(fieldTypeElement.getAttribute("sql-type")).intern(); this.sqlTypeAlias = UtilXml.checkEmpty(fieldTypeElement.getAttribute("sql-type-alias")).intern(); - NodeList validateList = fieldTypeElement.getElementsByTagName("validate"); for (int i = 0; i < validateList.getLength(); i++) { Element element = (Element) validateList.item(i); @@ -64,6 +78,15 @@ this.validators.add(new ModelFieldValidator(className.intern(), methodName.intern())); } } + ((ArrayList<ModelFieldValidator>)this.validators).trimToSize(); + if (this.javaType != null) { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + try { + this.javaClass = loader.loadClass(this.javaType); + } catch (ClassNotFoundException e) { + Debug.logError(e, module); + } + } } /** The type of the Field */ @@ -76,11 +99,23 @@ return this.javaType; } + /** The Java class of the Field */ + public Class<?> getJavaClass() { + return this.javaClass; + } + /** The sql-type of the Field */ public String getSqlType() { return this.sqlType; } + /** Returns the SQL <code>Class</code> of the Field. The returned value might + * be <code>null</code>. The SQL class is unknown until a connection is made + * to the database. */ + public Class<?> getSqlClass() { + return this.sqlClass; + } + /** The sql-type-alias of the Field */ public String getSqlTypeAlias() { return this.sqlTypeAlias; @@ -91,6 +126,14 @@ return this.validators; } + /** Sets the SQL <code>Class</code> for this field. + * + * @param sqlClass + */ + public synchronized void setSqlClass(Class<?> sqlClass) { + this.sqlClass = sqlClass; + } + /** A simple function to derive the max length of a String created from the field value, based on the sql-type * @return max length of a String representing the Field value */ |
Free forum by Nabble | Edit this page |