/* File: col7a1/model/UploadBatch.java * Copyright: GBIC 2000-2010, all rights reserved * Date: August 11, 2010 * * generator: org.molgenis.generators.excel.ExcelReaderGen 3.3.2-testing * * * THIS FILE HAS BEEN GENERATED, PLEASE DO NOT EDIT! */ package org.molgenis.mutation.excel; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import jxl.Cell; import jxl.Sheet; import org.apache.log4j.Logger; import org.molgenis.framework.db.CsvToDatabase; import org.molgenis.framework.db.Database; import org.molgenis.framework.db.Database.DatabaseAction; import org.molgenis.framework.db.DatabaseException; import org.molgenis.util.CsvWriter; import org.molgenis.util.Entity; import org.molgenis.util.SimpleTuple; import org.molgenis.util.Tuple; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * Reads UploadBatch from Excel file. */ @Component public class UploadBatchExcelReader { public final transient Logger logger = Logger.getLogger(UploadBatchExcelReader.class); @Autowired private CsvToDatabase<Entity> uploadBatchCsvReader; /** * Imports UploadBatch from a workbook sheet. */ public int importSheet(final Database db, Sheet sheet, final Tuple defaults, final DatabaseAction dbAction, final String missingValue) throws DatabaseException, IOException, Exception { File tmpUploadBatch = new File(System.getProperty("java.io.tmpdir") + File.separator + "tmpUploadBatch.txt"); if (tmpUploadBatch.exists()) { boolean deleteSuccess = tmpUploadBatch.delete(); if (!deleteSuccess) { throw new Exception("Deletion of tmp file 'tmpUploadBatch.txt' failed, cannot proceed."); } } boolean createSuccess = tmpUploadBatch.createNewFile(); if (!createSuccess) { throw new Exception("Creation of tmp file 'tmpUploadBatch.txt' failed, cannot proceed."); } boolean fileHasHeaders = writeSheetToFile(sheet, tmpUploadBatch); if (fileHasHeaders) { int count = this.uploadBatchCsvReader.importCsv(db, tmpUploadBatch, defaults, dbAction, missingValue); tmpUploadBatch.delete(); return count; } else { tmpUploadBatch.delete(); return 0; } } public List<String> getNonEmptyHeaders(Sheet sheet) { List<String> headers = new ArrayList<String>(); Cell[] headerCells = sheet.getRow(0); // assume headers are on first // line for (int i = 0; i < headerCells.length; i++) { if (!headerCells[i].getContents().equals("")) { headers.add(headerCells[i].getContents()); } } return headers; } private boolean writeSheetToFile(Sheet sheet, File file) throws IOException { List<String> headers = new ArrayList<String>(); Cell[] headerCells = sheet.getRow(0); // assume headers are on first // line if (headerCells.length == 0) { return false; } ArrayList<Integer> namelessHeaderLocations = new ArrayList<Integer>(); // allow // for // empty // columns, // also // column // order // does // not // matter for (int i = 0; i < headerCells.length; i++) { if (!headerCells[i].getContents().equals("")) { headers.add(headerCells[i].getContents()); } else { headers.add("nameless" + i); namelessHeaderLocations.add(i); } } PrintWriter pw = new PrintWriter(file); CsvWriter cw = new CsvWriter(pw, headers); cw.setMissingValue(""); cw.writeHeader(); for (int rowIndex = 1; rowIndex < sheet.getRows(); rowIndex++) { Tuple t = new SimpleTuple(); int colIndex = 0; for (Cell c : sheet.getRow(rowIndex)) { if (!namelessHeaderLocations.contains(colIndex)) { t.set(headers.get(colIndex), c.getContents()); } colIndex++; } cw.writeRow(t); } cw.close(); return true; } public void setUploadBatchCsvReader(CsvToDatabase<Entity> uploadBatchCsvReader) { this.uploadBatchCsvReader = uploadBatchCsvReader; } }