/*
* This file is part of ADDIS (Aggregate Data Drug Information System).
* ADDIS is distributed from http://drugis.org/.
* Copyright © 2009 Gert van Valkenhoef, Tommi Tervonen.
* Copyright © 2010 Gert van Valkenhoef, Tommi Tervonen, Tijs Zwinkels,
* Maarten Jacobs, Hanno Koeslag, Florin Schimbinschi, Ahmad Kamal, Daniel
* Reid.
* Copyright © 2011 Gert van Valkenhoef, Ahmad Kamal, Daniel Reid, Florin
* Schimbinschi.
* Copyright © 2012 Gert van Valkenhoef, Daniel Reid, Joël Kuiper, Wouter
* Reckman.
* Copyright © 2013 Gert van Valkenhoef, Joël Kuiper.
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.drugis.addis.presentation;
import java.util.Arrays;
import java.util.List;
import org.drugis.addis.entities.Entity;
import org.drugis.addis.entities.analysis.BenefitRiskAnalysis;
import org.drugis.addis.entities.analysis.DecisionContext;
import com.jgoodies.binding.PresentationModel;
import com.jgoodies.binding.value.ValueModel;
import fi.smaa.jsmaa.simulator.BuildQueue;
@SuppressWarnings("serial")
public abstract class AbstractBenefitRiskPresentation<Alternative extends Entity, AnalysisType extends BenefitRiskAnalysis<Alternative>>
extends PresentationModel<AnalysisType> {
public static final String DC_THERAPEUTIC_CONTEXT_NAME = "Therapeutic context";
public static final String DC_COMPARATOR_NAME = "Comparator";
public static final String DC_TIME_HORIZON_NAME = "Time horizon";
public static final String DC_STAKEHOLDER_PERSPECTIVE_NAME = "Stakeholder perspective";
public static final String DC_THERAPEUTIC_CONTEXT_HELP = "Specify the therapeutic context: the product being assessed, its indication, target population, formulation, dosage and contra-indications.";
public static final String DC_COMPARATOR_HELP = "Specify the comparator: standard of care, placebo, best in class, or...";
public static final String DC_TIME_HORIZON_HELP = "Specify the time horizon: the duration of exposure to the product, the time period over which the outcomes should be measured.";
public static final String DC_STAKEHOLDER_PERSPECTIVE_HELP = "Describe the stakeholder perspective: motivation for the selection of benefit-risk attributes, and the outcomes by which they are measured.";
public static class DecisionContextField {
private final String d_name;
private final String d_helpText;
private final ValueModel d_model;
public DecisionContextField(String name, String helpText, ValueModel model) {
d_name = name;
d_helpText = helpText;
d_model = model;
}
public String getName() {
return d_name;
}
public String getHelpText() {
return d_helpText;
}
public ValueModel getModel() {
return d_model;
}
}
protected PresentationModelFactory d_pmf;
protected BuildQueue d_buildQueue;
private SMAAPresentation<Alternative, AnalysisType> d_smaaPresentation;
private LyndOBrienPresentation<Alternative, AnalysisType> d_lyndOBrienPresentation;
public AbstractBenefitRiskPresentation(AnalysisType bean, PresentationModelFactory pmf) {
super(bean);
d_pmf = pmf;
initSimulations();
if (bean.getAnalysisType().equals(org.drugis.addis.entities.analysis.BenefitRiskAnalysis.AnalysisType.SMAA)) {
d_smaaPresentation = new SMAAPresentation<Alternative, AnalysisType>(getBean());
startSMAA();
} else {
d_lyndOBrienPresentation = new LyndOBrienPresentation<Alternative, AnalysisType>(getBean());
startLyndOBrien();
}
}
protected abstract void startSMAA();
protected abstract void startLyndOBrien();
public PresentationModelFactory getFactory() {
return d_pmf;
}
public abstract ValueHolder<Boolean> getMeasurementsReadyModel();
public SMAAPresentation<Alternative, AnalysisType> getSMAAPresentation() {
return d_smaaPresentation;
}
public LyndOBrienPresentation<Alternative, AnalysisType> getLyndOBrienPresentation() {
return d_lyndOBrienPresentation;
}
public BRATTableModel<Alternative, AnalysisType> createBRATTableModel(Alternative subject) {
return new BRATTableModel<Alternative, AnalysisType>(getBean(), subject);
}
protected abstract void initSimulations();
public static List<DecisionContextField> createDecisionContextFields(DecisionContext decisionContext) {
PresentationModel<DecisionContext> dcModel = new PresentationModel<DecisionContext>(decisionContext);
List<DecisionContextField> asList = Arrays.asList(
new AbstractBenefitRiskPresentation.DecisionContextField(DC_THERAPEUTIC_CONTEXT_NAME, DC_THERAPEUTIC_CONTEXT_HELP, dcModel.getModel(DecisionContext.PROPERTY_THERAPEUTIC_CONTEXT)),
new AbstractBenefitRiskPresentation.DecisionContextField(DC_COMPARATOR_NAME, DC_COMPARATOR_HELP, dcModel.getModel(DecisionContext.PROPERTY_COMPARATOR)),
new AbstractBenefitRiskPresentation.DecisionContextField(DC_TIME_HORIZON_NAME, DC_TIME_HORIZON_HELP, dcModel.getModel(DecisionContext.PROPERTY_TIME_HORIZON)),
new AbstractBenefitRiskPresentation.DecisionContextField(DC_STAKEHOLDER_PERSPECTIVE_NAME, DC_STAKEHOLDER_PERSPECTIVE_HELP, dcModel.getModel(DecisionContext.PROPERTY_STAKEHOLDER_PERSPECTIVE))
);
return asList;
}
}