]> git.argeo.org Git - lgpl/argeo-commons.git/blob - server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/dao/AbstractTabularDaoSupport.java
Update versions used
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.core / src / main / java / org / argeo / server / dao / AbstractTabularDaoSupport.java
1 package org.argeo.server.dao;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.argeo.ArgeoException;
11
12 public abstract class AbstractTabularDaoSupport extends
13 AbstractMemoryDaoSupport {
14 private final static Log log = LogFactory
15 .getLog(AbstractTabularDaoSupport.class);
16
17 private Map<String, List<Object>> tabularView = new HashMap<String, List<Object>>();
18
19 @Override
20 protected Object findInternalRef(Reference reference) {
21 TabularInternalReference tabReference = (TabularInternalReference) reference;
22 return getFromTabularView(tabReference.getTargetTableName(),
23 tabReference.getTargetRow());
24 }
25
26 protected Object getFromTabularView(String tableName, Integer row) {
27 return tabularView.get(tableName).get(row - 2);
28 }
29
30 protected void registerInTabularView(String tableName, Object object) {
31 if (!tabularView.containsKey(tableName))
32 tabularView.put(tableName, new ArrayList<Object>());
33 tabularView.get(tableName).add(object);
34 }
35
36 protected Class<?> findClassToInstantiate(String tableName) {
37 // TODO: ability to map sheet names and class names
38 String className = tableName;
39 Class<?> clss = null;
40 try {
41 clss = getClassLoader().loadClass(className);
42 return clss;
43 } catch (ClassNotFoundException e) {
44 // silent
45 }
46
47 scannedPkgs: for (String pkg : getScannedPackages()) {
48 try {
49 clss = getClassLoader().loadClass(pkg.trim() + "." + className);
50 break scannedPkgs;
51 } catch (ClassNotFoundException e) {
52 // silent
53 if (log.isTraceEnabled())
54 log.trace(e.getMessage());
55 }
56 }
57
58 if (clss == null)
59 throw new ArgeoException("Cannot find a class for table "
60 + tableName);
61
62 return clss;
63 }
64
65 protected static class TabularInternalReference extends Reference {
66 private String targetTableName;
67 private Integer targetRow;
68
69 public TabularInternalReference(Object object, String property,
70 String targetSheet, Integer targetRow) {
71 super(object, property, null);
72 this.targetTableName = targetSheet;
73 this.targetRow = targetRow;
74 }
75
76 public String getTargetTableName() {
77 return targetTableName;
78 }
79
80 public Integer getTargetRow() {
81 return targetRow;
82 }
83
84 }
85 }