Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BooleanJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BooleanJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BooleanJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BooleanJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BooleanJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -34,38 +34,70 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatMap.Format; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatConverterFactory; -public class BooleanJDBCTransformer implements JDBCTransformer { // BooleanJDBCTransformer +public class BooleanJDBCTransformer implements JDBCTransformer { // BooleanJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(BooleanJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return Boolean.class; } - public String getJDBCType(){ - return "Boolean"; - } - - public Object getJDBCValue(Boolean value){ - return value; - } + // public String getJDBCType(){ + // return "Boolean"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setBoolean(indice, ((Boolean)value).booleanValue()); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // boolean b = rs.getBoolean(columnName); + // return b?Boolean.TRUE:Boolean.FALSE; + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + // rien a faire pour les Booleans + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public Boolean getJavaValue(Object value){ - return (Boolean)value; + return result; } - public void setValue(PreparedStatement sta, int indice, Boolean value) throws SQLException { - Boolean b = (Boolean)getJDBCValue(value); - sta.setBoolean(indice, b.booleanValue()); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les Booleans + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public Boolean getValue(ResultSet rs, String columnName) throws SQLException { - boolean b = rs.getBoolean(columnName); - return getJavaValue(b?Boolean.TRUE:Boolean.FALSE); + return result; } } // BooleanJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ByteJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ByteJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ByteJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ByteJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ByteJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,36 +36,67 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatMap.Format; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatConverterFactory; -public class ByteJDBCTransformer implements JDBCTransformer { // ByteJDBCTransformer +public class ByteJDBCTransformer implements JDBCTransformer { // ByteJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(ByteJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return Byte.class; } - public String getJDBCType(){ - return "Byte"; - } - - public Object getJDBCValue(Byte value){ - return value; - } + // public String getJDBCType(){ + // return "Byte"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setByte(indice, ((Byte)value).byteValue()); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // byte b = rs.getByte(columnName); + // return Byte.valueOf(b); + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + // rien a faire pour les Bytes + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public Byte getJavaValue(Object value){ - return (Byte)value; + return result; } - public void setValue(PreparedStatement sta, int indice, Byte value) throws SQLException { - Byte b = (Byte)getJDBCValue(value); - sta.setByte(indice, b.byteValue()); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les Bytes + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public Byte getValue(ResultSet rs, String columnName) throws SQLException { - byte b = rs.getByte(columnName); - return getJavaValue(Byte.valueOf(b)); + return result; } } // ByteJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BytesJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BytesJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BytesJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BytesJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/BytesJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,8 +36,12 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatMap.Format; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatConverter; +import org.codelutin.util.FormatConverterFactory; -public class BytesJDBCTransformer implements JDBCTransformer { // BytesJDBCTransformer +public class BytesJDBCTransformer implements JDBCTransformer { // BytesJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(BytesJDBCTransformer.class); @@ -46,26 +50,53 @@ return (new byte[0]).getClass(); } - public String getJDBCType(){ - return "Bytes"; - } - - public Object getJDBCValue(byte[] value){ - return value; - } + // public String getJDBCType(){ + // return "Bytes"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setBytes(indice, (byte[])value); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // return rs.getBytes(columnName); + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + // rien a faire pour les byte[] + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public byte[] getJavaValue(Object value){ - return (byte[])value; + return result; } - public void setValue(PreparedStatement sta, int indice, byte[] value) throws SQLException { - byte[] b = (byte[])getJDBCValue(value); - sta.setBytes(indice, b); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les byte[] + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public byte[] getValue(ResultSet rs, String columnName) throws SQLException { - byte[] b = rs.getBytes(columnName); - return getJavaValue(b); + return result; } } // BytesJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DateJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DateJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DateJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DateJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DateJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,50 +23,82 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ package org.codelutin.topia.persistence.jdbctransformer; -import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatConverterFactory; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatMap.Format; -public class DateJDBCTransformer implements JDBCTransformer { // DateJDBCTransformer +public class DateJDBCTransformer implements JDBCTransformer { // DateJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(DateJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return Date.class; } - public String getJDBCType(){ - return "Date"; - } - - public Object getJDBCValue(Date value){ - return value; - } + // public String getJDBCType(){ + // return "Date"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // if( !(value instanceof java.sql.Date)) { + // value = new java.sql.Date(((java.util.Date)value).getTime()); + // } + // sta.setDate(indice, ((java.sql.Date)value)); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // return rs.getDate(columnName); + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public Date getJavaValue(Object value){ - return (Date)value; + return result; } - public void setValue(PreparedStatement sta, int indice, Date value) throws SQLException { - Date b = (Date)getJDBCValue(value); - sta.setDate(indice, b); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les Dates, car java.sql.Date herite de java.util.Date + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public Date getValue(ResultSet rs, String columnName) throws SQLException { - Date b = rs.getDate(columnName); - return getJavaValue(b); + return result; } } // DateJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DoubleJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DoubleJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DoubleJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DoubleJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/DoubleJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,36 +36,67 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatMap.Format; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatConverterFactory; -public class DoubleJDBCTransformer implements JDBCTransformer { // DoubleJDBCTransformer +public class DoubleJDBCTransformer implements JDBCTransformer { // DoubleJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(DoubleJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return Double.class; } - public String getJDBCType(){ - return "Double"; - } - - public Object getJDBCValue(Double value){ - return value; - } + // public String getJDBCType(){ + // return "Double"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setDouble(indice, ((Double)value).doubleValue()); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // double b = rs.getDouble(columnName); + // return Double.valueOf(b); + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + // rien a faire pour les Booleans + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public Double getJavaValue(Object value){ - return (Double)value; + return result; } - public void setValue(PreparedStatement sta, int indice, Double value) throws SQLException { - Double b = (Double)getJDBCValue(value); - sta.setDouble(indice, b.doubleValue()); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les Booleans + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public Double getValue(ResultSet rs, String columnName) throws SQLException { - double b = rs.getDouble(columnName); - return getJavaValue(Double.valueOf(b)); + return result; } } // DoubleJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/FloatJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/FloatJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/FloatJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/FloatJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/FloatJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,36 +36,67 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatMap.Format; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatConverterFactory; -public class FloatJDBCTransformer implements JDBCTransformer { // FloatJDBCTransformer +public class FloatJDBCTransformer implements JDBCTransformer { // FloatJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(FloatJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return Float.class; } - public String getJDBCType(){ - return "Float"; - } - - public Object getJDBCValue(Float value){ - return value; - } + // public String getJDBCType(){ + // return "Float"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setFloat(indice, ((Float)value).floatValue()); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // float b = rs.getFloat(columnName); + // return Float.valueOf(b); + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + // rien a faire pour les Booleans + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public Float getJavaValue(Object value){ - return (Float)value; + return result; } - public void setValue(PreparedStatement sta, int indice, Float value) throws SQLException { - Float b = (Float)getJDBCValue(value); - sta.setFloat(indice, b.floatValue()); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les Booleans + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public Float getValue(ResultSet rs, String columnName) throws SQLException { - float b = rs.getFloat(columnName); - return getJavaValue(Float.valueOf(b)); + return result; } } // FloatJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/IntegerJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/IntegerJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/IntegerJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/IntegerJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/IntegerJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,36 +36,66 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatMap.Format; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatConverterFactory; -public class IntegerJDBCTransformer implements JDBCTransformer { // IntegerJDBCTransformer +public class IntegerJDBCTransformer implements JDBCTransformer { // IntegerJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(IntegerJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return Integer.class; } - public String getJDBCType(){ - return "Integer"; - } - - public Object getJDBCValue(Integer value){ - return value; - } + // public String getJDBCType(){ + // return "Integer"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setInt(indice, ((Integer)value).intValue()); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // int b = rs.getInt(columnName); + // return Integer.valueOf(b); + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public Integer getJavaValue(Object value){ - return (Integer)value; + return result; } - public void setValue(PreparedStatement sta, int indice, Integer value) throws SQLException { - Integer b = (Integer)getJDBCValue(value); - sta.setInt(indice, b.intValue()); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les Booleans + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public Integer getValue(ResultSet rs, String columnName) throws SQLException { - int b = rs.getInt(columnName); - return getJavaValue(Integer.valueOf(b)); + return result; } } // IntegerJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:12:25 CEST * * @author Benjamin POUSSIN - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ * - * Last update: $Date: 2005/08/24 15:03:45 $ + * Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,57 +36,49 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatConverter; +import org.codelutin.util.FormatMap.Format; /** * Permet de transformer un objet Java en une representation utilisable * pour le stockage dans une base de donnée. * T est le type d'objet Java géré */ -public interface JDBCTransformer { // JDBCTransformer +public interface JDBCTransformer extends FormatConverter { // JDBCTransformer - /** - * Retourne la classe Java géré par cet objet - * @return la classe géré par cet objet - */ - public Class getJavaType(); - - /** - * Retourne le type JDBC à utiliser pour la classe Java géré par - * par cette objet. Le type doit être un des types gérés par les - * méthode des {@link java.sql.PreparedStatement} - * @return le type en JDBC - */ - public String getJDBCType(); + static final public Format FORMAT_JDBC = new Format("Format JDBC"); /** - * Retourne la representation JDBC de l'objet passé en paramètre - * @param la valeur en Java - * @return la valeur en JDBC - */ - public Object getJDBCValue(T value); - - /** - * Retourne la representation Java de l'objet passé en paramètre - * @param la valeur en JDBC - * @return la valeur en Java - */ - public T getJavaValue(Object value); - - /** - * Permet de mettre la valeur directement dans le PreparedStatement - * @param sta le PreparedStatement dans lequel on souhaite mettre la valeur - * @param indice la position on la valeur doit etre mise - * @param value la valeur Java a mettre dans le PreparedStatement + * Retourne la classe Java utilisée pour les requetes SQL. + * Par exemple pour String la class sera String, mais pour TopiaEntity la + * classe sera String + * @return la classe géré par cet objet */ - public void setValue(PreparedStatement sta, int indice, T value) throws SQLException; + public Class getJavaType(); - /** - * Permet de récupérer la valeur Java depuis un ResultSet. - * @param rs le ResultSet dans lequel il faut prendre la valeur - * @param columnName le nom de la colone dans la base de données - * @return la valeur Java - */ - public T getValue(ResultSet rs, String columnName) throws SQLException; + // /** + // * Retourne le type JDBC à utiliser pour la classe Java géré par + // * par cette objet. Le type doit être un des types gérés par les + // * méthode des {@link java.sql.PreparedStatement} + // * @return le type en JDBC + // */ + // public String getJDBCType(); + + // /** + // * Permet de mettre la valeur directement dans le PreparedStatement + // * @param sta le PreparedStatement dans lequel on souhaite mettre la valeur + // * @param indice la position on la valeur doit etre mise + // * @param value la valeur JDBC a mettre dans le PreparedStatement + // */ + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException; + + // /** + // * Permet de récupérer la valeur Java depuis un ResultSet. + // * @param rs le ResultSet dans lequel il faut prendre la valeur + // * @param columnName le nom de la colone dans la base de données + // * @return la valeur JDBC + // */ + // public Object getValue(ResultSet rs, String columnName) throws SQLException; } // JDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformerFactory.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformerFactory.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformerFactory.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformerFactory.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/JDBCTransformerFactory.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:37:17 CEST * * @author Benjamin POUSSIN - * @version $Revision: 1.1 $ + * @version $Revision: 1.2 $ * - * Last update: $Date: 2005/08/24 15:03:45 $ + * Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -38,45 +38,63 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.topia.TopiaEntity; +import org.codelutin.util.FormatConverterFactory; -public class JDBCTransformerFactory { // JDBCTransformerFactory +public class JDBCTransformerFactory extends FormatConverterFactory { // JDBCTransformerFactory /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(JDBCTransformerFactory.class); - static protected Map transformers = - new HashMap(); + static { + log.debug("Ajout des Converter JDBC"); + addConverter(Boolean.class, new BooleanJDBCTransformer()); + addConverter(Byte.class, new ByteJDBCTransformer()); + addConverter((new byte[0]).getClass(), new BytesJDBCTransformer()); + addConverter(Date.class, new DateJDBCTransformer()); + addConverter(Double.class, new DoubleJDBCTransformer()); + addConverter(Float.class, new FloatJDBCTransformer()); + addConverter(Integer.class, new IntegerJDBCTransformer()); + addConverter(Long.class, new LongJDBCTransformer()); + addConverter(Object.class, new ObjectJDBCTransformer()); + addConverter(Short.class, new ShortJDBCTransformer()); + addConverter(String.class, new StringJDBCTransformer()); + + addConverter(TopiaEntity.class, new TopiaEntityJDBCTransformer()); + } /** * Permet d'ajout un nouvel objet pour géré un type de classe particulier * @param clazz la classe Java géré par cette objet * @param t le transformer a utiliser pour ce type */ - static public void register(Class clazz, JDBCTransformer t){ - transformers.put(clazz, t); + static public void addConverter(Class clazz, JDBCTransformer t){ + FormatConverterFactory.getInstance().addConverter( + clazz, JDBCTransformer.FORMAT_JDBC, t); + } + + static public JDBCTransformer getConverter(Class clazz){ + return getConverter(clazz, (JDBCTransformer)null); } /** * Retoure le transformer qui gere la classe passée en parametre * @param clazz la classe pour lequel on souhaite le transformer */ - static public JDBCTransformer getTransformer(Class clazz){ - JDBCTransformer result = transformers.get(clazz); + static public JDBCTransformer getConverter(Class clazz, JDBCTransformer defaultConverter){ + JDBCTransformer result = (JDBCTransformer)FormatConverterFactory.getInstance(). + getConverter(clazz, JDBCTransformer.FORMAT_JDBC, defaultConverter); return result; } - static { - register(Boolean.class, new BooleanJDBCTransformer()); - register(Byte.class, new ByteJDBCTransformer()); - register((new byte[0]).getClass(), new BytesJDBCTransformer()); - register(Date.class, new DateJDBCTransformer()); - register(Double.class, new DoubleJDBCTransformer()); - register(Float.class, new FloatJDBCTransformer()); - register(Integer.class, new IntegerJDBCTransformer()); - register(Long.class, new LongJDBCTransformer()); - register(Object.class, new ObjectJDBCTransformer()); - register(Short.class, new ShortJDBCTransformer()); - register(String.class, new StringJDBCTransformer()); + static public JDBCTransformer findConverter(Class clazz){ + return findConverter(clazz, (JDBCTransformer)null); + } + + static public JDBCTransformer findConverter(Class clazz, JDBCTransformer defaultConverter){ + JDBCTransformer result = (JDBCTransformer)FormatConverterFactory.getInstance(). + findConverter(clazz, JDBCTransformer.FORMAT_JDBC, defaultConverter); + return result; } } // JDBCTransformerFactory Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/LongJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/LongJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/LongJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/LongJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/LongJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,36 +36,67 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatMap.Format; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatConverter; +import org.codelutin.util.FormatConverterFactory; -public class LongJDBCTransformer implements JDBCTransformer { // LongJDBCTransformer +public class LongJDBCTransformer implements JDBCTransformer { // LongJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(LongJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return Long.class; } - public String getJDBCType(){ - return "Long"; - } - - public Object getJDBCValue(Long value){ - return value; - } + // public String getJDBCType(){ + // return "Long"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setLong(indice, ((Long)value).longValue()); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // long b = rs.getLong(columnName); + // return Long.valueOf(b); + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public Long getJavaValue(Object value){ - return (Long)value; + return result; } - public void setValue(PreparedStatement sta, int indice, Long value) throws SQLException { - Long b = (Long)getJDBCValue(value); - sta.setLong(indice, b.longValue()); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les Booleans + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public Long getValue(ResultSet rs, String columnName) throws SQLException { - long b = rs.getLong(columnName); - return getJavaValue(Long.valueOf(b)); + return result; } } // LongJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ObjectJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ObjectJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ObjectJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ObjectJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ObjectJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,66 +36,98 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.lang.reflect.Method; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import org.apache.commons.beanutils.MethodUtils; +import org.apache.commons.lang.SerializationUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.topia.TopiaContext; +import org.codelutin.util.ArrayUtil; +import org.codelutin.util.FormatConverterFactory; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatMap.Format; -public class ObjectJDBCTransformer implements JDBCTransformer { // ObjectJDBCTransformer +public class ObjectJDBCTransformer implements JDBCTransformer { // ObjectJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(ObjectJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return Object.class; } - public String getJDBCType(){ - return "Object"; - } + // public String getJDBCType(){ + // return "Object"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setBytes(indice, (byte[])value); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // return rs.getBytes(columnName); + // } - public Object getJDBCValue(Object value){ + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ Object result = null; - if(value != null){ - try{ - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(baos); - oos.writeObject(value); - baos.close(); - result = baos.toByteArray(); - }catch(IOException eee){ - throw new RuntimeException("Error during transformation object type: " + value.getClass().getName(), eee); - } + + if (values.containsKey(format)){ + result = values.get(format); + } else { + // rien a faire pour les Booleans + Object javaValue = values.convert(factory, FORMAT_JAVA, args); + result = SerializationUtils.serialize((Serializable)javaValue); } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); + return result; } - public Object getJavaValue(Object value){ + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ Object result = null; - if(value != null){ - try{ - ByteArrayInputStream bais = new ByteArrayInputStream((byte[])value); - ObjectInputStream ois = new ObjectInputStream(bais); - result = ois.readObject(); - bais.close(); - }catch(IOException eee){ - throw new RuntimeException("Error during transformation object type: " + value.getClass().getName(), eee); - }catch(ClassNotFoundException eee){ - throw new RuntimeException("Error during transformation object type: " + value.getClass().getName(), eee); - } + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); } - return result; - } - public void setValue(PreparedStatement sta, int indice, Object value) throws SQLException { - byte[] b = (byte[])getJDBCValue(value); - sta.setBytes(indice, b); - } + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + byte[] jdbcValue = (byte[])values.get(format); + result = SerializationUtils.deserialize(jdbcValue); + if (result != null) { + TopiaContext context = ArrayUtil.search(args, TopiaContext.class); + if (context == null) { + throw new IllegalArgumentException("TopiaContext must be in args to convert id to TopiaEntity"); + } else { + if(context != null){ + // s'il a une methode setContext(TopiaContext) + // alors on l'appelle avec le context qui est en parametre + Method m = MethodUtils.getMatchingAccessibleMethod( + result.getClass(), "setContext", new Class[]{context.getClass()}); + if(m != null){ + try{ + m.invoke(result, context); + }catch(Exception eee){ + log.warn("Can't set context on object", eee); + } + } + } + } + } + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public Object getValue(ResultSet rs, String columnName) throws SQLException { - byte[] b = rs.getBytes(columnName); - return getJavaValue(b); + return result; } } // ObjectJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ShortJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ShortJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ShortJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ShortJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/ShortJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:57:39 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,36 +36,66 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatMap.Format; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatConverterFactory; -public class ShortJDBCTransformer implements JDBCTransformer { // ShortJDBCTransformer +public class ShortJDBCTransformer implements JDBCTransformer { // ShortJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(ShortJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return Short.class; } - public String getJDBCType(){ - return "Short"; - } - - public Object getJDBCValue(Short value){ - return value; - } + // public String getJDBCType(){ + // return "Short"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setShort(indice, ((Short)value).shortValue()); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // short b = rs.getShort(columnName); + // return Short.valueOf(b); + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public Short getJavaValue(Object value){ - return (Short)value; + return result; } - public void setValue(PreparedStatement sta, int indice, Short value) throws SQLException { - Short b = (Short)getJDBCValue(value); - sta.setShort(indice, b.shortValue()); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les Booleans + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public Short getValue(ResultSet rs, String columnName) throws SQLException { - short b = rs.getShort(columnName); - return getJavaValue(Short.valueOf(b)); + return result; } } // ShortJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/StringJDBCTransformer.java diff -u topia/src/java/org/codelutin/topia/persistence/jdbctransformer/StringJDBCTransformer.java:1.1 topia/src/java/org/codelutin/topia/persistence/jdbctransformer/StringJDBCTransformer.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/jdbctransformer/StringJDBCTransformer.java:1.1 Wed Aug 24 15:03:45 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/StringJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -23,9 +23,9 @@ * Created: 23 août 2005 12:56:14 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Last update: $Date: 2005/08/24 15:03:45 $ +* Last update: $Date: 2005/09/21 20:34:51 $ * by : $Author: bpoussin $ */ @@ -36,35 +36,66 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FormatMap.Format; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatConverterFactory; -public class StringJDBCTransformer implements JDBCTransformer { // StringJDBCTransformer +public class StringJDBCTransformer implements JDBCTransformer { // StringJDBCTransformer /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(StringJDBCTransformer.class); - public Class getJavaType(){ + public Class getJavaType(){ return String.class; } - public String getJDBCType(){ - return "String"; - } - - public Object getJDBCValue(String value){ - return value; - } + // public String getJDBCType(){ + // return "String"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setString(indice, (String)value); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // return rs.getString(columnName); + // } + + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + // rien a faire pour les Strings + result = values.convert(factory, FORMAT_JAVA, args); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); - public String getJavaValue(Object value){ - return (String)value; + return result; } - public void setValue(PreparedStatement sta, int indice, String value) throws SQLException { - String b = (String)getJDBCValue(value); - sta.setString(indice, b); - } + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // rien a faire pour les Strings + result = values.get(format); + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); - public String getValue(ResultSet rs, String columnName) throws SQLException { - return getJavaValue(rs.getString(columnName)); + return result; } } // StringJDBCTransformer Index: topia/src/java/org/codelutin/topia/persistence/jdbctransformer/TopiaEntityJDBCTransformer.java diff -u /dev/null topia/src/java/org/codelutin/topia/persistence/jdbctransformer/TopiaEntityJDBCTransformer.java:1.1 --- /dev/null Wed Sep 21 20:34:56 2005 +++ topia/src/java/org/codelutin/topia/persistence/jdbctransformer/TopiaEntityJDBCTransformer.java Wed Sep 21 20:34:51 2005 @@ -0,0 +1,133 @@ +/* *##% + * Copyright (C) 2005 + * Code Lutin, Cédric Pineau, Benjamin Poussin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +/* * + * TopiaEntityJDBCTransformer.java + * + * Created: 21 septembre 2005 12:00:06 CEST + * + * @author Benjamin POUSSIN + * @version $Revision: 1.1 $ + * + * Last update: $Date: 2005/09/21 20:34:51 $ + * by : $Author: bpoussin $ + */ + +package org.codelutin.topia.persistence.jdbctransformer; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.topia.TopiaContext; +import org.codelutin.topia.TopiaEntity; +import org.codelutin.topia.TopiaException; +import org.codelutin.util.ArrayUtil; +import org.codelutin.util.FormatConverterFactory; +import org.codelutin.util.FormatMap; +import org.codelutin.util.FormatMap.Format; + +public class TopiaEntityJDBCTransformer implements JDBCTransformer { // TopiaEntityJDBCTransformer + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(TopiaEntityJDBCTransformer.class); + + public Class getJavaType(){ + return String.class; + } + + // public String getJDBCType(){ + // return "String"; + // } + + // public void putValue(PreparedStatement sta, int indice, Object value) throws SQLException { + // sta.setString(indice, (String)value); + // } + + // public Object getValue(ResultSet rs, String columnName) throws SQLException { + // return rs.getString(columnName); + // } + + /** + * Retourne le TopiaId + */ + public Object convert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (values.containsKey(format)){ + result = values.get(format); + } else { + result = values.convert(factory, FORMAT_JAVA, args); + if (result != null) { + try { + result = ((TopiaEntity)result).get_topiaId_(); + } catch (TopiaException eee) { + throw new RuntimeException("Impossible de récupérer le TopiaId de l'objet"); + } + } + } + // on stocke la valeur trouver pour les prochaines fois + values.put(format, result); + + return result; + } + + /** + * On doit retrouver dans args un TopiaContext pour pouvoir retourner + * l'entity + */ + public Object unconvert(FormatConverterFactory factory, + Format format, FormatMap values, Object ... args){ + Object result = null; + + if (!values.containsKey(format) && !values.containsKey(FORMAT_JAVA)) { + throw new IllegalArgumentException("Aucun valeur disponible"); + } + + // si on a deja la representation Java on la retourne tout de suite + if (values.containsKey(FORMAT_JAVA)) { + result = values.get(FORMAT_JAVA); + } else { + // recuperation du TopiaId + result = values.get(format); + if (result != null) { + TopiaContext context = ArrayUtil.search(args, TopiaContext.class); + if (context == null) { + throw new IllegalArgumentException("TopiaContext must be in args to convert id to TopiaEntity"); + } else { + // Recuperation du TopiaEntity + try { + result = context.getPersistenceHelper() + .findByTopiaId((String)result); + } catch (TopiaException eee) { + throw new RuntimeException("Impossible de récupérer le TopiaEntity à partir de son id: " + result); + } + } + } + } + // on stocke la valeur trouver pour les prochaines fois + values.put(FORMAT_JAVA, result); + + return result; + } + +} // TopiaEntityJDBCTransformer +