X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jxl%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fserver%2Fjxl%2Fdao%2FJxlDaoSupport.java;h=015dc06be451661acf6b3739c48b9077f2a5d1f5;hb=3a2d1d7c935065e5048232d9aa7c20b4b875e316;hp=0488d519815896da54ccde15f204a2860e12bb02;hpb=aa95083d42d85ebaba5147e93f6b2b8b757b4752;p=lgpl%2Fargeo-commons.git 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 0488d5198..015dc06be 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 @@ -35,6 +35,7 @@ public class JxlDaoSupport implements LightDaoSupport, ApplicationContextAware, private ClassLoader classLoader = getClass().getClassLoader(); private ApplicationContext applicationContext; + private List> additionalClasses = new ArrayList>(); private Map, Map> model = new HashMap, Map>(); @@ -45,37 +46,49 @@ public class JxlDaoSupport implements LightDaoSupport, ApplicationContextAware, private List workbooks = new ArrayList(); public void afterPropertiesSet() throws Exception { + init(); + } + + public void init() { + // used to resolve inner references + Map> tempRefs = new HashMap>(); + + List references = new ArrayList(); + for (Resource res : workbooks) { InputStream in = null; try { in = res.getInputStream(); - load(in); + load(in, references, tempRefs); + } catch (Exception e) { + throw new ArgeoServerException("Cannot load stream", e); } finally { IOUtils.closeQuietly(in); } } + // Inject references + for (Reference ref : references) { + injectReference(ref, tempRefs); + } + if (log.isDebugEnabled()) + log.debug(references.size() + " references linked"); } - public void load(InputStream in) { - try { - // used to resolve inner references - Map> tempRefs = new HashMap>(); - - List references = new ArrayList(); + public List> getSupportedClasses() { + List> res = new ArrayList>(); + res.addAll(additionalClasses); + res.addAll(model.keySet()); + return res; + } + public void load(InputStream in, List references, + Map> tempRefs) { + try { Workbook workbook = Workbook.getWorkbook(in); - for (Sheet sheet : workbook.getSheets()) { loadSheet(sheet, references, tempRefs); } - - for (Reference ref : references) { - injectReference(ref, tempRefs); - } - if (log.isDebugEnabled()) - log.debug(references.size() + " references linked"); - } catch (Exception e) { throw new ArgeoServerException("Cannot load workbook", e); } @@ -130,6 +143,10 @@ public class JxlDaoSupport implements LightDaoSupport, ApplicationContextAware, if (cell instanceof FormulaCell) { String formula = ((FormulaCell) cell).getFormula(); int index = formula.indexOf('!'); + if (index < 0) + throw new ArgeoServerException("Cannot interpret formula " + + formula); + ; String targetSheet = formula.substring(0, index); // assume no double letters!! String targetRowStr = formula.substring(index + 2);