Index: topia/src/java/org/codelutin/topia/AbstractTopiaElement.java diff -u topia/src/java/org/codelutin/topia/AbstractTopiaElement.java:1.2 topia/src/java/org/codelutin/topia/AbstractTopiaElement.java:1.3 --- topia/src/java/org/codelutin/topia/AbstractTopiaElement.java:1.2 Fri Jun 10 17:16:38 2005 +++ topia/src/java/org/codelutin/topia/AbstractTopiaElement.java Wed Aug 24 15:03:45 2005 @@ -23,10 +23,10 @@ * * @author Benjamin Poussin * Copyright Code Lutin - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ * - * Mise a jour: $Date: 2005/06/10 17:16:38 $ - * par : $Author: thimel $ + * Mise a jour: $Date: 2005/08/24 15:03:45 $ + * par : $Author: bpoussin $ */ package org.codelutin.topia; @@ -43,5 +43,15 @@ return topiaContext; } + /** + * FIXME, pour l'instant on a cette methode, mais le mieux serait + * de pouvoir utiliser les generics pour que la methode getContext() + * retourne le bon type de context. Donc il faut que tous les objets + * qui herite de TopiaElement soit parametré par le type de context + * a utiliser + */ + public T getContext(Class clazz){ + return (T)getContext(); + } } // AbstractTopiaElement Index: topia/src/java/org/codelutin/topia/TopiaElement.java diff -u topia/src/java/org/codelutin/topia/TopiaElement.java:1.3 topia/src/java/org/codelutin/topia/TopiaElement.java:1.4 --- topia/src/java/org/codelutin/topia/TopiaElement.java:1.3 Thu Jul 21 12:54:50 2005 +++ topia/src/java/org/codelutin/topia/TopiaElement.java Wed Aug 24 15:03:45 2005 @@ -23,10 +23,10 @@ * * @author Benjamin Poussin * Copyright Code Lutin - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ * - * Mise a jour: $Date: 2005/07/21 12:54:50 $ - * par : $Author: thimel $ + * Mise a jour: $Date: 2005/08/24 15:03:45 $ + * par : $Author: bpoussin $ */ package org.codelutin.topia; @@ -56,6 +56,16 @@ */ @MethodInfo ( type = MethodType.GENERATED ) public TopiaContext getContext(); + + /** + * FIXME, pour l'instant on a cette methode, mais le mieux serait + * de pouvoir utiliser les generics pour que la methode getContext() + * retourne le bon type de context. Donc il faut que tous les objets + * qui herite de TopiaElement soit parametré par le type de context + * a utiliser + */ + @MethodInfo ( type = MethodType.GENERATED ) + public T getContext(Class clazz); } // TopiaElement Index: topia/src/java/org/codelutin/topia/Util.java diff -u topia/src/java/org/codelutin/topia/Util.java:1.16 topia/src/java/org/codelutin/topia/Util.java:1.17 --- topia/src/java/org/codelutin/topia/Util.java:1.16 Fri Aug 5 17:04:40 2005 +++ topia/src/java/org/codelutin/topia/Util.java Wed Aug 24 15:03:45 2005 @@ -23,22 +23,26 @@ * * @author Benjamin Poussin * Copyright Code Lutin - * @version $Revision: 1.16 $ + * @version $Revision: 1.17 $ * - * Mise a jour: $Date: 2005/08/05 17:04:40 $ - * par : $Author: thimel $ + * Mise a jour: $Date: 2005/08/24 15:03:45 $ + * par : $Author: bpoussin $ */ package org.codelutin.topia; -import java.util.logging.Logger; -import java.util.logging.Level; +import bsh.Interpreter; import java.beans.Expression; - +import java.lang.reflect.Method; import org.codelutin.topia.persistence.TopiaTransaction; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; public class Util { // Util + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(Util.class); + public static Class getClazz(String className)throws TopiaNotFoundException{ try{ return Class.forName(className); @@ -107,7 +111,9 @@ return result; } - static public final String SQL_IDS_KEY = "$'?'$"; + // ne pas mettre de ' dans la chaine SQL_IDS_KEY, car ca pose probleme + // avec MessageFormat + static public final String SQL_IDS_KEY = "$?$"; /** * Utilisé pour la persistence * Remplace tous les "$'?'$" dans la requete par les ids de la transaction @@ -119,6 +125,86 @@ query = query.substring(0, pos) + transaction.getIdsToString() + query.substring(pos + SQL_IDS_KEY.length()); } return query; + } + + static public Object getDefaultValue(Class type){ + Object result = null; + if(Boolean.class.isAssignableFrom(type) + || type.equals(Boolean.TYPE)){ + result = Boolean.FALSE; + } else if(Character.class.isAssignableFrom(type) + || type.equals(Character.TYPE)){ + result = Character.valueOf(Character.MIN_VALUE); + } else if(Byte.class.isAssignableFrom(type) + || type.equals(Byte.TYPE)){ + result = Byte.valueOf((byte)0); + } else if(Short.class.isAssignableFrom(type) + || type.equals(Short.TYPE)){ + result = Short.valueOf((short)0); + } else if(Integer.class.isAssignableFrom(type) + || type.equals(Integer.TYPE)){ + result = Integer.valueOf(0); + } else if(Long.class.isAssignableFrom(type) + || type.equals(Long.TYPE)){ + result = Long.valueOf(0); + } else if(Float.class.isAssignableFrom(type) + || type.equals(Float.TYPE)){ + result = Float.valueOf(0); + } else if(Double.class.isAssignableFrom(type) + || type.equals(Double.TYPE)){ + result = Double.valueOf(0); + } + return result; + } + + static public Object getDefaultValue(Class type, String value) throws Exception { + Object result = null; + if(value == null){ + // pas de valeur par defaut defini par l'utilisateur + // on prend celle defini par le framework + result = Util.getDefaultValue(type); + } else if(value.trim().startsWith("=")){ + // expression bsh + result = Util.evalBsh(value.trim().substring(1)); + } else { + // une representation texte de la valeur + if(String.class.isAssignableFrom(type)){ + result = value; + } else if(Boolean.class.isAssignableFrom(type) + || type.equals(Boolean.TYPE)){ + result = Boolean.valueOf(value.trim().equalsIgnoreCase("true")); + } else if(Character.class.isAssignableFrom(type) + || type.equals(Character.TYPE)){ + result = Character.valueOf(value.trim().charAt(0)); + } else if(Number.class.isAssignableFrom(type) + || type.equals(Byte.TYPE) + || type.equals(Short.TYPE) + || type.equals(Integer.TYPE) + || type.equals(Long.TYPE) + || type.equals(Float.TYPE) + || type.equals(Double.TYPE) + ){ + Method m = type.getMethod("valueOf", String.class); + result = m.invoke(null, value); + } else { + log.warn("Pas de valeur par defaut pour le type: " + type.getName()); + } + } + return result; + } + + static protected Interpreter bsh = null; + + /** + * Fait une evaluation du code bsh + */ + static public Object evalBsh(String code) throws Exception { + if(bsh == null){ + bsh = new Interpreter(); + } + + Object result = bsh.eval(code); + return result; } } // Util