Update light DAO
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.core / src / main / java / org / argeo / server / dao / AbstractTabularDaoSupport.java
index a2195b4d46a1bff5ba67017b09aa96f7da6190cf..f81135753efe35dd164ad36c1dd76a050db46e22 100644 (file)
@@ -5,8 +5,15 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.server.ArgeoServerException;
+
 public abstract class AbstractTabularDaoSupport extends
                AbstractMemoryDaoSupport {
+       private final static Log log = LogFactory
+                       .getLog(AbstractTabularDaoSupport.class);
+       
        private Map<String, List<Object>> tabularView = new HashMap<String, List<Object>>();
 
        @Override
@@ -26,6 +33,35 @@ public abstract class AbstractTabularDaoSupport extends
                tabularView.get(tableName).add(object);
        }
 
+       protected Class<?> findClassToInstantiate(String tableName) {
+               // TODO: ability to map sheet names and class names
+               String className = tableName;
+               Class<?> clss = null;
+               try {
+                       clss = getClassLoader().loadClass(className);
+                       return clss;
+               } catch (ClassNotFoundException e) {
+                       // silent
+               }
+
+               scannedPkgs: for (String pkg : getScannedPackages()) {
+                       try {
+                               clss = getClassLoader().loadClass(pkg.trim() + "." + className);
+                               break scannedPkgs;
+                       } catch (ClassNotFoundException e) {
+                               // silent
+                               if (log.isTraceEnabled())
+                                       log.trace(e.getMessage());
+                       }
+               }
+
+               if (clss == null)
+                       throw new ArgeoServerException("Cannot find a class for table "
+                                       + tableName);
+
+               return clss;
+       }
+
        protected static class TabularInternalReference extends Reference {
                private String targetTableName;
                private Integer targetRow;