package edu.harvard.med.screensaver.ui.screenresults.cellhts2;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;
import org.joda.time.DateTime;
import edu.harvard.med.screensaver.ScreensaverConstants;
import edu.harvard.med.screensaver.analysis.cellhts2.NormalizePlatesMethod;
import edu.harvard.med.screensaver.analysis.cellhts2.NormalizePlatesNegControls;
import edu.harvard.med.screensaver.analysis.cellhts2.NormalizePlatesScale;
import edu.harvard.med.screensaver.analysis.cellhts2.RMethod;
import edu.harvard.med.screensaver.analysis.cellhts2.ScoreReplicatesMethod;
import edu.harvard.med.screensaver.analysis.cellhts2.SummarizeReplicatesMethod;
import edu.harvard.med.screensaver.model.screenresults.ScreenResult;
import edu.harvard.med.screensaver.service.cellhts2.CellHts2Annotator;
import edu.harvard.med.screensaver.ui.arch.util.JSFUtils;
import edu.harvard.med.screensaver.ui.arch.view.AbstractBackingBean;
import edu.harvard.med.screensaver.ui.arch.view.aspects.UICommand;
/**
* @author Siew Cheng Aw
*/
public class CellHTS2Runner extends AbstractBackingBean
{
private static Logger log = Logger.getLogger(CellHTS2Runner.class);
private ScreenResult _screenResult;
private NormalizePlatesMethod _normalizePlatesMethod = NormalizePlatesMethod.MEDIAN;
private NormalizePlatesScale _normalizePlatesScale = NormalizePlatesScale.ADDITIVE;
private NormalizePlatesNegControls _normalizePlatesNegControls = NormalizePlatesNegControls.NEG;
private ScoreReplicatesMethod _scoreReplicatesMethod = ScoreReplicatesMethod.ZSCORE;
private SummarizeReplicatesMethod _summarizeReplicatesMethod = SummarizeReplicatesMethod.MEAN;
private File _reportPath;
private File _reportFilePath;
private String _reportUrl;
private boolean _addNewCellHtsDataColumns;
private CellHts2Annotator _cellHts2Annotator;
/**
* @motivation for CGLIB2
*/
protected CellHTS2Runner()
{}
public CellHTS2Runner(CellHts2Annotator cellHts2Annotator)
{
_cellHts2Annotator = cellHts2Annotator;
}
public boolean isEnabled()
{
return getApplicationProperties().isFeatureEnabled("cellHTS2");
}
public void setScreenResult(ScreenResult screenResult)
{
_screenResult = screenResult;
if (screenResult != null) {
_reportPath = new File(new File(getApplicationProperties().getProperty("cellHTS2.report.directory"), getScreensaverUser().getEntityId().toString()),
screenResult.getEntityId().toString());
_reportFilePath = new File(_reportPath, "index.html");
_reportUrl = ScreensaverConstants.CELLHTS2_REPORTS_BASE_URL + _screenResult.getScreenResultId() + "/index.html";
}
else {
_reportPath = null;
_reportFilePath = null;
_reportUrl = null;
}
_addNewCellHtsDataColumns = false; // always reset, for safety of data
}
public ScreenResult getScreenResult()
{
return _screenResult;
}
public boolean isReportExists()
{
return _reportFilePath.exists();
}
public DateTime getReportCreationDateTime()
{
return new DateTime(_reportFilePath.lastModified());
}
public String getReportURL()
{
return _reportUrl;
}
public NormalizePlatesMethod getNormalizePlatesMethod()
{
return _normalizePlatesMethod;
}
public void setNormalizePlatesMethod(NormalizePlatesMethod normalizePlatesMethod)
{
_normalizePlatesMethod = normalizePlatesMethod;
}
public NormalizePlatesNegControls getNormalizePlatesNegControls()
{
return _normalizePlatesNegControls;
}
public void setNormalizePlatesNegControls(NormalizePlatesNegControls normalizePlatesNegControls)
{
_normalizePlatesNegControls = normalizePlatesNegControls;
}
public NormalizePlatesScale getNormalizePlatesScale()
{
return _normalizePlatesScale;
}
public void setNormalizePlatesScale(NormalizePlatesScale normalizePlatesScale) {
_normalizePlatesScale = normalizePlatesScale;
}
public ScoreReplicatesMethod getScoreReplicatesMethod()
{
return _scoreReplicatesMethod;
}
public void setScoreReplicatesMethod(ScoreReplicatesMethod scoreReplicatesMethod)
{
_scoreReplicatesMethod = scoreReplicatesMethod;
}
public SummarizeReplicatesMethod getSummarizeReplicatesMethod()
{
return _summarizeReplicatesMethod;
}
public void setSummarizeReplicatesMethod(SummarizeReplicatesMethod summarizeReplicatesMethod)
{
_summarizeReplicatesMethod = summarizeReplicatesMethod;
}
public boolean isAddNewCellHtsDataColumns()
{
return _addNewCellHtsDataColumns;
}
public void setAddNewCellHtsDataColumns(boolean addNewCellHtsDataColumns)
{
_addNewCellHtsDataColumns = addNewCellHtsDataColumns;
}
@UICommand
public String runCellHTS2()
{
_cellHts2Annotator.runCellhts2(RMethod.WRITE_REPORT,
_screenResult,
_screenResult.getScreen().getTitle(),
_normalizePlatesMethod,
_normalizePlatesNegControls,
_normalizePlatesScale,
_scoreReplicatesMethod,
_summarizeReplicatesMethod,
_addNewCellHtsDataColumns,
_reportPath.getPath(),
getApplicationProperties().getBooleanProperty("cellHTS2.saveRObjects") ?
getApplicationProperties().getProperty("cellHTS2.saveRObjects.directory") : null);
return VIEW_SCREEN;
}
public String viewCellHTS2Runner(ScreenResult screenResult)
{
setScreenResult(screenResult);
return RUN_CELLHTS2;
}
public List<SelectItem> getNormalizePlatesMethodSelections()
{
List<NormalizePlatesMethod> selections = new ArrayList<NormalizePlatesMethod>();
for (NormalizePlatesMethod normalizePlatesMethod : NormalizePlatesMethod.values()) {
selections.add(normalizePlatesMethod);
}
return JSFUtils.createUISelectItems(selections);
}
public List<SelectItem> getNormalizePlatesScaleSelections()
{
List<NormalizePlatesScale> selections = new ArrayList<NormalizePlatesScale>();
for (NormalizePlatesScale normalizePlatesScale : NormalizePlatesScale.values()) {
selections.add(normalizePlatesScale);
}
return JSFUtils.createUISelectItems(selections);
}
public List<SelectItem> getNormalizePlatesNegControlsSelections()
{
List<NormalizePlatesNegControls> selections = new ArrayList<NormalizePlatesNegControls>();
for (NormalizePlatesNegControls normalizePlatesNegControls : NormalizePlatesNegControls.values()) {
selections.add(normalizePlatesNegControls);
}
return JSFUtils.createUISelectItems(selections);
}
public List<SelectItem> getScoreReplicatesMethodSelections()
{
List<ScoreReplicatesMethod> selections = new ArrayList<ScoreReplicatesMethod>();
for (ScoreReplicatesMethod scoreReplicatesMethod : ScoreReplicatesMethod.values()) {
selections.add(scoreReplicatesMethod);
}
return JSFUtils.createUISelectItems(selections);
}
public List<SelectItem> getSummarizeReplicatesMethodSelections()
{
List<SummarizeReplicatesMethod> selections = new ArrayList<SummarizeReplicatesMethod>();
for (SummarizeReplicatesMethod summarizeReplicatesMethod : SummarizeReplicatesMethod.values()) {
selections.add(summarizeReplicatesMethod);
}
return JSFUtils.createUISelectItems(selections);
}
}