From: Mathieu Baudier Date: Thu, 8 Oct 2009 13:22:33 +0000 (+0000) Subject: Introduce light DAO support X-Git-Tag: argeo-commons-2.1.30~1755 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=aa95083d42d85ebaba5147e93f6b2b8b757b4752 Introduce light DAO support git-svn-id: https://svn.argeo.org/commons/trunk@3007 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/dao/LightDaoSupport.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/dao/LightDaoSupport.java new file mode 100644 index 000000000..cc16d7bd3 --- /dev/null +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/dao/LightDaoSupport.java @@ -0,0 +1,11 @@ +package org.argeo.server.dao; + +import java.util.List; + +public interface LightDaoSupport { + public T getByKey(Class clss, Object key); + + public T getByField(Class clss, String field, Object value); + + public List list(Class clss, Object filter); +} diff --git a/server/runtime/org.argeo.server.jxl/src/main/java/org/argeo/server/jxl/dao/JxlDaoSupport.java b/server/runtime/org.argeo.server.jxl/src/main/java/org/argeo/server/jxl/dao/JxlDaoSupport.java index ef3dcf04b..0488d5198 100644 --- a/server/runtime/org.argeo.server.jxl/src/main/java/org/argeo/server/jxl/dao/JxlDaoSupport.java +++ b/server/runtime/org.argeo.server.jxl/src/main/java/org/argeo/server/jxl/dao/JxlDaoSupport.java @@ -6,6 +6,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; import jxl.Cell; import jxl.FormulaCell; @@ -17,16 +18,19 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.server.ArgeoServerException; +import org.argeo.server.dao.LightDaoSupport; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; import org.springframework.beans.BeansException; import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.generic.GenericBeanFactoryAccessor; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.io.Resource; import org.springframework.util.StringUtils; -public class JxlDaoSupport implements ApplicationContextAware, InitializingBean { +public class JxlDaoSupport implements LightDaoSupport, ApplicationContextAware, + InitializingBean { private final static Log log = LogFactory.getLog(JxlDaoSupport.class); private ClassLoader classLoader = getClass().getClassLoader(); @@ -85,7 +89,7 @@ public class JxlDaoSupport implements ApplicationContextAware, InitializingBean Cell[] firstRow = sheet.getRow(0); Class clss = findClassToInstantiate(sheet); - model.put(clss, new HashMap()); + model.put(clss, new TreeMap()); tempRefs.put(sheet.getName(), new ArrayList()); @@ -223,10 +227,36 @@ public class JxlDaoSupport implements ApplicationContextAware, InitializingBean return (T) model.get(findClass(clss)).get(key); } + /** + * Slow. + * + * @return the first found + */ + public T getByField(Class clss, String field, Object value) { + List all = list(clss, null); + T res = null; + for (T obj : all) { + if (new BeanWrapperImpl(obj).getPropertyValue(field).equals(value)) { + res = obj; + break; + } + } + return res; + } + @SuppressWarnings("unchecked") public List list(Class clss, Object filter) { - return new ArrayList((Collection) model.get(findClass(clss)) - .values()); + List res = new ArrayList(); + + Class classToUse = findClass(clss); + if (classToUse != null) + res.addAll((Collection) model.get(classToUse).values()); + + if (applicationContext != null) + res.addAll(new GenericBeanFactoryAccessor(applicationContext) + .getBeansOfType(clss).values()); + + return res; } @SuppressWarnings("unchecked") @@ -238,8 +268,7 @@ public class JxlDaoSupport implements ApplicationContextAware, InitializingBean if (parent.isAssignableFrom(clss)) return clss;// return the first found } - throw new ArgeoServerException("No implementing class found for " - + parent); + return null; } public void setApplicationContext(ApplicationContext applicationContext)