/*
* (c) 2008- RANDI2 Core Development Team
*
* This file is part of RANDI2.
*
* RANDI2 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.
*
* RANDI2 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
* RANDI2. If not, see <http://www.gnu.org/licenses/>.
*/
package de.randi2.jsf.backingBeans;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import lombok.Setter;
import de.randi2.jsf.controllerBeans.LoginHandler;
import de.randi2.jsf.controllerBeans.TrialHandler;
import de.randi2.jsf.wrappers.CriterionWrapper;
import de.randi2.model.Trial;
import de.randi2.model.criteria.AbstractCriterion;
import de.randi2.model.criteria.constraints.AbstractConstraint;
import de.randi2.model.randomization.BlockRandomizationConfig;
import de.randi2.model.randomization.MinimizationConfig;
import de.randi2.model.randomization.ResponseAdaptiveRConfig;
import de.randi2.model.randomization.UrnDesignConfig;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
/**
* JSF backing bean which provieds some information about current trials
* randomization algorithm. Created by IntelliJ IDEA. User: Lukasz Plotnicki
* <l.plotnicki@dkfz.de> Date: 02.10.2009 Time: 15:13:16
*/
@ManagedBean(name = "algorithmInfo")
@RequestScoped
public class AlgorithmInfo {
@ManagedProperty(value = "#{trialHandler}")
@Setter
private TrialHandler trialHandler;
@ManagedProperty(value = "#{loginHandler}")
@Setter
private LoginHandler loginHandler;
public String getAlgName() {
ResourceBundle bundle = ResourceBundle
.getBundle("de.randi2.jsf.i18n.algorithms",
loginHandler.getChosenLocale());
return bundle.getString(trialHandler.getCurrentObject()
.getRandomizationConfiguration().getClass().getCanonicalName()
+ ".name");
}
public String getFurtherDetails() {
StringBuffer furtherDetails = new StringBuffer();
ResourceBundle bundle = ResourceBundle.getBundle(
"de.randi2.jsf.i18n.labels", loginHandler.getChosenLocale());
ResourceBundle responseBundle = ResourceBundle.getBundle(
"de.randi2.jsf.i18n.criteria", loginHandler.getChosenLocale());
Trial currentTrial = trialHandler.getCurrentObject();
if (BlockRandomizationConfig.class.isInstance(currentTrial
.getRandomizationConfiguration())) {
BlockRandomizationConfig conf = BlockRandomizationConfig.class
.cast(currentTrial.getRandomizationConfiguration());
furtherDetails.append("<b>");
furtherDetails.append(bundle
.getString("pages.blockR.variableBSize"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.isVariableBlockSize());
furtherDetails.append("<br//>");
if (conf.isVariableBlockSize()) {
furtherDetails.append("<b>");
furtherDetails.append(bundle
.getString("pages.blockR.minBlockSize"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getMinimum());
furtherDetails.append("<br//>");
furtherDetails.append("<b>");
furtherDetails.append(bundle
.getString("pages.blockR.maxBlockSize"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getMaximum());
furtherDetails.append("<br//>");
} else {
furtherDetails.append("<b>");
furtherDetails.append(bundle
.getString("pages.blockR.blockSize"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getMinimum());
furtherDetails.append("<br//>");
}
} else if (UrnDesignConfig.class.isInstance(currentTrial
.getRandomizationConfiguration())) {
UrnDesignConfig conf = UrnDesignConfig.class.cast(trialHandler
.getCurrentObject().getRandomizationConfiguration());
furtherDetails.append("<b>");
furtherDetails.append(bundle.getString("pages.urnR.initialCount"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getInitializeCountBalls());
furtherDetails.append("<br//>");
furtherDetails.append("<b>");
furtherDetails.append(bundle.getString("pages.urnR.replacedBalls"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getCountReplacedBalls());
furtherDetails.append("<br//>");
} else if (MinimizationConfig.class.isInstance(currentTrial
.getRandomizationConfiguration())) {
MinimizationConfig conf = MinimizationConfig.class
.cast(trialHandler.getCurrentObject()
.getRandomizationConfiguration());
furtherDetails.append("<b>");
furtherDetails
.append(bundle.getString("pages.minimization.pvalue"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getP());
furtherDetails.append("<br//>");
} else if (ResponseAdaptiveRConfig.class.isInstance(currentTrial
.getRandomizationConfiguration())) {
ResponseAdaptiveRConfig conf = ResponseAdaptiveRConfig.class.cast(trialHandler
.getCurrentObject().getRandomizationConfiguration());
furtherDetails.append("<b>");
furtherDetails.append(bundle.getString("pages.responseAdaptiveR.initialCount"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getInitializeCountBallsResponseAdaptiveR());
furtherDetails.append("<br//>");
furtherDetails.append("<b>");
furtherDetails.append(bundle.getString("pages.responseAdaptiveR.countReplacedBalls"));
furtherDetails.append("<br//>");
furtherDetails.append(bundle.getString("pages.responseAdaptiveR.responseSuccessCount"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getCountBallsResponseSuccess());
furtherDetails.append("<br//>");
furtherDetails.append("<b>");
furtherDetails.append(bundle.getString("pages.responseAdaptiveR.responseFailureCount"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getCountBallsResponseFailure());
furtherDetails.append("<br//>");
furtherDetails.append("<b>");
furtherDetails.append(bundle.getString("pages.trialCreatePanel.responseLabel"));
furtherDetails.append("<br//>");
furtherDetails.append(responseBundle.getString("de.randi2.model.criteria.AbstractCriterion.name"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getTrial().getTreatmentResponse().getName());
furtherDetails.append("<br//>");
furtherDetails.append("<b>");
furtherDetails.append(responseBundle.getString("de.randi2.model.criteria.DichotomousCriterion.response.option1"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getTrial().getTreatmentResponse().getOption1());
furtherDetails.append("<br//>");
furtherDetails.append("<b>");
furtherDetails.append(responseBundle.getString("de.randi2.model.criteria.DichotomousCriterion.response.option2"));
furtherDetails.append("</b> ");
furtherDetails.append(conf.getTrial().getTreatmentResponse().getOption2());
furtherDetails.append("<br//>");
}else {
furtherDetails.append("--");
}
return furtherDetails.toString();
}
/**
* Specifies if the algorithm is stratified or not.
*
* @return
*/
public boolean isStratified() {
boolean t = isStrataFactorsDefined();
if (t)
return t;
else
return trialHandler.getCurrentObject().isStratifyTrialSite();
}
/**
* Checks if any strata factors are defined.
*
* @return
*/
public boolean isStrataFactorsDefined() {
for (AbstractCriterion<?, ?> c : trialHandler.getCurrentObject()
.getCriteria()) {
if (c.getStrata() != null) {
if (c.getStrata().size() > 0)
return true;
}
}
return false;
}
private List<CriterionWrapper<Serializable>> strata;
@SuppressWarnings("unchecked")
public List<CriterionWrapper<Serializable>> getStrata() {
strata = new ArrayList<CriterionWrapper<Serializable>>();
for (AbstractCriterion<? extends Serializable, ? extends AbstractConstraint<? extends Serializable>> c : trialHandler
.getCurrentObject().getCriteria()) {
/*
* Check if the criterion is a defined strata factor and if so wrapp
* it and add to the collection
*/
if (c.getStrata() != null && !c.getStrata().isEmpty())
strata.add(new CriterionWrapper<Serializable>(
(AbstractCriterion<Serializable, ?>) c, loginHandler
.getChosenLocale()));
}
return strata;
}
}