Introduce light DAO support
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Oct 2009 13:22:33 +0000 (13:22 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Oct 2009 13:22:33 +0000 (13:22 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@3007 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/dao/LightDaoSupport.java [new file with mode: 0644]
server/runtime/org.argeo.server.jxl/src/main/java/org/argeo/server/jxl/dao/JxlDaoSupport.java

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 (file)
index 0000000..cc16d7b
--- /dev/null
@@ -0,0 +1,11 @@
+package org.argeo.server.dao;
+
+import java.util.List;
+
+public interface LightDaoSupport {
+       public <T> T getByKey(Class<T> clss, Object key);
+
+       public <T> T getByField(Class<T> clss, String field, Object value);
+
+       public <T> List<T> list(Class<T> clss, Object filter);
+}
index ef3dcf04b3de3532958278c69ee4befaf0a601d3..0488d519815896da54ccde15f204a2860e12bb02 100644 (file)
@@ -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<Object, Object>());
+               model.put(clss, new TreeMap<Object, Object>());
 
                tempRefs.put(sheet.getName(), new ArrayList<Object>());
 
@@ -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> T getByField(Class<T> clss, String field, Object value) {
+               List<T> 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 <T> List<T> list(Class<T> clss, Object filter) {
-               return new ArrayList<T>((Collection<T>) model.get(findClass(clss))
-                               .values());
+               List<T> res = new ArrayList<T>();
+
+               Class classToUse = findClass(clss);
+               if (classToUse != null)
+                       res.addAll((Collection<T>) 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)