package edu.ualberta.med.biobank.forms.reports;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.supercsv.cellprocessor.ParseDate;
import org.supercsv.cellprocessor.constraint.LMinMax;
import org.supercsv.cellprocessor.constraint.StrNotNullOrEmpty;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.exception.SuperCSVException;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;
import edu.ualberta.med.biobank.gui.common.widgets.BgcFileBrowser;
import edu.ualberta.med.biobank.gui.common.widgets.IBgcFileBrowserListener;
import edu.ualberta.med.biobank.server.reports.RequestData;
public class SpecimenReport3Editor extends ReportsEditor implements
IBgcFileBrowserListener {
public static String ID =
"edu.ualberta.med.biobank.editors.AliquotRequestEditor";
private BgcFileBrowser csvSelector;
@Override
protected void createOptionSection(Composite parent) {
parent.setLayout(new GridLayout(1, false));
parent.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true,
false));
csvSelector = new BgcFileBrowser(parent,
"CSV File", SWT.NONE,
new String[] { "*.csv" });
csvSelector.addFileSelectedListener(this);
csvSelector.adaptToToolkit(toolkit, true);
generateButton.setEnabled(false);
}
@Override
public void fileSelected(String filename) {
// enable the button once a file has been selected
generateButton.setEnabled(true);
}
@Override
protected void initReport() throws Exception {
report.setParams(parseCSV());
}
@Override
protected List<Object> getPrintParams() {
return Arrays.asList(new Object[] { csvSelector.getFilePath() });
}
protected List<Object> parseCSV() throws Exception {
ICsvBeanReader reader = new CsvBeanReader(new FileReader(
csvSelector.getFilePath()), CsvPreference.EXCEL_PREFERENCE);
final CellProcessor[] processors = new CellProcessor[] {
new StrNotNullOrEmpty(), new ParseDate("yyyy-MM-dd"),
new StrNotNullOrEmpty(), new LMinMax(1, Long.MAX_VALUE) };
List<Object> requests = new ArrayList<Object>();
try {
String[] header = new String[] { "pnumber", "dateDrawn",
"specimenTypeNameShort", "maxAliquots" };
RequestData request;
while ((request = reader.read(RequestData.class, header,
processors)) != null) {
requests.add(request);
}
} catch (SuperCSVException e) {
throw new Exception("Parse error at line " + reader.getLineNumber()
+ "\n" + e.getCsvContext());
} finally {
reader.close();
}
return requests;
}
@Override
protected String[] getColumnNames() {
return new String[] { "Patient",
"Inventory ID",
"Date Drawn",
"Type",
"Location",
"Activity Status" };
}
@Override
protected List<String> getParamNames() {
List<String> paramName = new ArrayList<String>();
paramName.add("CSV File");
return paramName;
}
@Override
public void setValues() throws Exception {
csvSelector.reset();
super.setValues();
}
}