+ if (hashIndex >= 0) {
+ // see
+ // http://stackoverflow.com/questions/451452/valid-characters-for-excel-sheet-names
+ BeanWrapper bw = newBeanWrapper(clss);
+ StringTokenizer espSt = new StringTokenizer(sheetName
+ .substring(hashIndex + 1), "&=");
+ String keyProperty = null;
+ while (espSt.hasMoreTokens()) {
+ String fieldName = espSt.nextToken();
+ if (keyProperty == null)
+ keyProperty = fieldName;
+ if (!espSt.hasMoreTokens())
+ throw new ArgeoServerException("Badly formatted sheetname "
+ + sheetName);
+ String fieldValue = espSt.nextToken();
+ bw.setPropertyValue(fieldName, fieldValue);
+ loadAsObject(bw, sheet, references);
+ saveOrUpdate(bw.getPropertyValue(keyProperty), bw
+ .getWrappedInstance(), clss);
+ }
+
+ } else {
+
+ Cell[] firstRow = sheet.getRow(0);
+ String keyProperty = firstRow[0].getContents();
+
+ if (keyProperty.charAt(keyProperty.length() - 1) == '>') {
+ loadAsColumns(clss, keyProperty.substring(0, keyProperty
+ .length() - 1), sheet, firstRow, references);
+ } else {
+ loadAsRows(clss, keyProperty, sheet, firstRow, references);
+ }
+ }
+ }
+
+ protected void loadAsRows(Class<?> clss, String keyProperty, Sheet sheet,
+ Cell[] firstRow, List<Reference> references) throws JXLException {
+ for (int row = 1; row < sheet.getRows(); row++) {
+ if (log.isTraceEnabled())
+ log.trace(" row " + row);
+
+ Cell[] currentRow = sheet.getRow(row);
+ BeanWrapper bw = newBeanWrapper(clss);
+ cells: for (int col = 0; col < firstRow.length; col++) {
+ String pName = firstRow[col].getContents();
+
+ if (col < currentRow.length) {
+ Cell cell = currentRow[col];
+ if (overrideCell(cell, bw, pName, keyProperty, row,
+ references))
+ continue cells;
+ loadCell(cell, bw, pName, keyProperty, row, references);
+ }
+ }// cells
+
+ saveOrUpdate(bw.getPropertyValue(keyProperty), bw
+ .getWrappedInstance(), clss);
+ // tempRefs.get(sheet.getName()).add(bw.getWrappedInstance());
+ registerInTabularView(sheet.getName(), bw.getWrappedInstance());
+ }
+ }
+
+ protected void loadAsColumns(Class<?> clss, String keyProperty,
+ Sheet sheet, Cell[] firstRow, List<Reference> references)
+ throws JXLException {
+ Cell[] firstColumn = sheet.getColumn(0);
+
+ for (int col = 1; col < firstRow.length; col++) {
+ if (log.isTraceEnabled())
+ log.trace(" column " + col);
+ BeanWrapper bw = newBeanWrapper(clss);
+ Cell[] column = sheet.getColumn(col);
+ for (int row = 0; row < column.length; row++) {
+ Cell cell = column[row];
+
+ String propertyName;
+ if (row == 0)
+ propertyName = keyProperty;
+ else
+ propertyName = firstColumn[row].getContents();
+
+ Class<?> rowType = bw.getPropertyType(propertyName);
+ if (log.isTraceEnabled())
+ log.trace(" " + propertyName + " rowType="
+ + rowType.getName());
+ if (Map.class.isAssignableFrom(rowType)) {