package org.molgenis.designgg;
import java.io.File;
import org.molgenis.framework.db.Database;
import org.molgenis.framework.ui.PluginModel;
import org.molgenis.framework.ui.ScreenController;
import org.molgenis.util.CsvFileReader;
import org.molgenis.util.CsvReader;
import org.molgenis.util.Tuple;
/**
* This screen aims to ask parameters. If valid, the parameters are saved.
*
* @author Morris Swertz
*
*/
public class AskParametersScreen extends PluginModel
{
/**
*
*/
private static final long serialVersionUID = -3386893658115378317L;
public DesignParameters designParameters;
private boolean bArgumentsOK = true;
private boolean bReady2Go = false;
private String argMissing = null;
public AskParametersScreen(String name, ScreenController<?> parent)
{
super(name, parent);
}
@Override
public void handleRequest(Database db, Tuple request)
{
logger.debug(">handling request: " + request);
try
{
// can we create a set of parameters?
DesignParameters p = new DesignParameters();
p.set(request);
// test?
if (request.getString("test") != null)
{
p.setNoIterations(20);
}
else
{
p.setNoIterations(1000);
}
// CHECKING PARAMETERS
if (p.getGenotype() == null)
{
this.setArgMissing("You must provide a valid file with genotype data.");
bArgumentsOK = false;
}
else if (!rangeIsValid(p))
{
bArgumentsOK = false;
}
else
{
bArgumentsOK = true;
this.setDesignParameters(p);
bReady2Go = true;
}
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} // get from request.
}
private boolean rangeIsValid(DesignParameters p)
{
try
{
CsvReader fileReader = new CsvFileReader(new File(p.getGenotype()));
int rows = fileReader.rownames().size();
if (p.getRangeStart() != null && p.getRangeEnd() != null) for (int i = 0; i < p.getRangeStart().size(); i++)
{
int start = Integer.parseInt((String) p.getRangeStart().get(i));
int end = Integer.parseInt((String) p.getRangeEnd().get(i));
logger.debug("" + start + "-" + end);
if (start < 1 || end > rows)
{
this.setArgMissing("Marker range should be in [1,maxindex makers=" + rows + ")], found [start="
+ start + ",end=" + end + "]");
return false;
}
else if (end < start)
{
this.setArgMissing("marker range 'start' should be lower than 'end', found [start=" + start
+ ",end=" + end + "]");
return false;
}
}
}
catch (Exception e)
{
e.printStackTrace();
this.setArgMissing(e.getMessage());
return false;
}
return true;
}
@Override
public void reload(Database db)
{
// TODO Auto-generated method stub
}
public DesignParameters getDefaultParameters()
{
// TODO: also use this when user fills in wrong parameters and need to
// edit again.
return new DesignParameters();
}
public DesignParameters getDesignParameters()
{
return this.designParameters;
}
public void setDesignParameters(DesignParameters designParameters)
{
this.designParameters = designParameters;
}
/**
* @return the bArgumentsOK
*/
public boolean isBArgumentsOK()
{
return bArgumentsOK;
}
/**
* @param argumentsOK
* the bArgumentsOK to set
*/
public void setBArgumentsOK(boolean argumentsOK)
{
bArgumentsOK = argumentsOK;
}
/**
* @return the bReady2Go
*/
public boolean isBReady2Go()
{
return bReady2Go;
}
/**
* @param ready2Go
* the bReady2Go to set
*/
public void setBReady2Go(boolean ready2Go)
{
bReady2Go = ready2Go;
}
/**
* @return the argMissing
*/
public String getArgMissing()
{
return argMissing;
}
/**
* @param argMissing
* the argMissing to set
*/
public void setArgMissing(String argMissing)
{
this.argMissing = argMissing;
}
@Override
public String getViewName()
{
return "screens_AskParametersScreen";
}
@Override
public String getViewTemplate()
{
return "org/molgenis/designgg/AskParametersScreen.ftl";
}
}