/*
* #%L
* gitools-ui-app
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.ui.app.fileimport.wizard.excel;
import org.gitools.api.ApplicationContext;
import org.gitools.api.analysis.IProgressMonitor;
import org.gitools.api.matrix.IMatrix;
import org.gitools.api.resource.IResource;
import org.gitools.api.resource.IResourceFormat;
import org.gitools.matrix.format.TdmMatrixFormat;
import org.gitools.persistence.locators.UrlResourceLocator;
import org.gitools.ui.app.commands.CommandLoadFile;
import org.gitools.utils.readers.text.RawFlatTextWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CancellationException;
public class CommandConvertAndLoadExcelFile extends CommandLoadFile {
private final int columns;
private final int rows;
private final List<Integer> values;
private final ExcelReader reader;
public CommandConvertAndLoadExcelFile(int columns, int rows, List<Integer> values, ExcelReader reader) {
super(reader.getLocator().getURL().toString());
this.columns = columns;
this.rows = rows;
this.values = values;
this.reader = reader;
}
@Override
public boolean isConfigurable() {
return false;
}
@Override
protected IResource loadResource(IProgressMonitor monitor) {
monitor.begin("Converting excel file", reader.getLastRowNum());
File tmpFile;
RawFlatTextWriter out;
try {
tmpFile = File.createTempFile("gitools", reader.getLocator().getBaseName() + ".tdm");
out = new RawFlatTextWriter(new FileWriter(tmpFile), '\t', '"');
} catch (IOException e) {
throw new RuntimeException("Error opening temporal file");
}
// Write headers
out.writeQuotedValue("column");
out.writeSeparator();
out.writeQuotedValue("row");
for (int v : values) {
out.writeSeparator();
out.writeQuotedValue(reader.getValue(0, v));
}
out.writeNewLine();
// Write rows
for (int r = 1; r < reader.getLastRowNum(); r++) {
out.writeQuotedValue(reader.getValue(r, columns));
out.writeSeparator();
out.writeQuotedValue(reader.getValue(r, rows));
for (int v : values) {
out.writeSeparator();
String value = reader.getValue(r, v);
out.writeValue((value != null ? value : "-"));
}
out.writeNewLine();
monitor.worked(r);
if (monitor.isCancelled()) {
out.close();
tmpFile.delete();
throw new CancellationException();
}
}
out.close();
setExitStatus(0);
IResourceFormat<IMatrix> format = ApplicationContext.getPersistenceManager().getFormat(TdmMatrixFormat.EXSTENSION, IMatrix.class);
IMatrix matrix = ApplicationContext.getPersistenceManager().load(new UrlResourceLocator(tmpFile), format, monitor);
matrix.setLocator(null);
return matrix;
}
}