package uk.ac.ed.inf.biopepa.ui.wizards.timeseries;
import java.util.LinkedList;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import uk.ac.ed.inf.biopepa.core.sba.ExperimentSet;
import uk.ac.ed.inf.biopepa.core.sba.ExperimentSetReader;
import uk.ac.ed.inf.biopepa.core.sba.ExperimentLine;
import uk.ac.ed.inf.biopepa.core.sba.PhaseLine;
import uk.ac.ed.inf.biopepa.ui.interfaces.BioPEPAModel;
public class PhasesPage extends WizardPage {
public final static String wizardPageName = "Setup Phases";
private BioPEPAModel model;
private PhaseLine[] phaseLines;
// private String loadedFileName;
private Shell shell;
public PhasesPage(BioPEPAModel model) {
super(wizardPageName);
this.model = model;
this.shell = new Shell();
// this.experimentSet = null ;
setTitle("Import phases setup from cvs");
setDescription("Set up phases from csv");
}
private void clearLoaded(){
// loadedFileName = "";
phaseLines = null;
}
public PhaseLine[] getPhaseLines(){
return phaseLines;
}
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
setControl(composite);
// Layout
GridLayout gl = new GridLayout();
// gl.marginRight = gl.marginRight ; // + imageData.width;
composite.setLayout(gl);
GridData gridData = new GridData();
gridData.horizontalAlignment = SWT.RIGHT;
// gridData.horizontalIndent = 10;
gridData.minimumWidth = SWT.DEFAULT;
Button openCsvButton = new Button(composite, SWT.PUSH);
openCsvButton.setText("Open a csv file");
class Open implements SelectionListener {
public void widgetSelected(SelectionEvent event) {
FileDialog fd = new FileDialog(shell, SWT.OPEN);
fd.setText("Open");
fd.setFilterPath("C:/");
String[] filterExt = { "*.csv" };
fd.setFilterExtensions(filterExt);
String selected = fd.open();
// I should set a widget to display the selected
// filename or something, maybe even display the
// parsed contents
readCSVFile(selected);
}
public void widgetDefaultSelected(SelectionEvent event) {
}
}
/*
* SelectionAdapter buttonListener = new SelectionAdapter(){ public void
* widgetSelected(SelectionEvent event){
* System.out.println("Yup, I already been clicked"); readCSVFile
* ("Not got no name"); } };
*/
openCsvButton.addSelectionListener(new Open());
this.setMessage("No csv file has been loaded");
}
/*
* We attempt to read in the file as csv file
* if we fail then we leave/set
* the experiment set to null,
* thus meaning we must check for that.
*/
private void readCSVFile(String filename) {
if (filename == null) {
clearLoaded();
System.out.println("boo hoo");
MessageDialog.openError(shell, "Error importing csv",
"filename is null");
return;
}
ExperimentSetReader esetReader =
new ExperimentSetReader (model.getSBAModel(),
model.getCompiledModel());
String [] specialNames = { "phase-delay" };
esetReader.readCsvFile(filename, specialNames);
String readingError = esetReader.getReadError();
ExperimentSet experSet = esetReader.getExperimentSet();
if (experSet != null){
loadExperimentSet (experSet);
// this.loadedFileName = filename;
this.setMessage("The csv file: " + filename + " has been loaded");
// this.updateLoadedTable();
return;
} else {
MessageDialog.openError(shell, "Error importing csv", readingError);
clearLoaded();
return;
}
}
private void loadExperimentSet (ExperimentSet experSet){
LinkedList<ExperimentLine> elines = experSet.getExperimentLines();
int noLines = elines.size();
this.phaseLines = new PhaseLine[noLines];
for (int index = 0; index < noLines; index++){
ExperimentLine el = elines.get(index);
Number thisDelay = el.getSpecialDefine("phase-delay");
if (thisDelay == null){
MessageDialog.openError(shell, "No delay",
"a phase line without a phase delay has been entered");
}
PhaseLine phaseLine = new PhaseLine (el, thisDelay.doubleValue());
}
}
}