/*
* 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.gui.builder;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;
import org.apache.commons.lang.StringUtils;
import org.drugis.addis.entities.Drug;
import org.drugis.addis.entities.Study;
import org.drugis.addis.entities.treatment.Category;
import org.drugis.addis.entities.treatment.TreatmentCategorization;
import org.drugis.addis.gui.AddisWindow;
import org.drugis.addis.gui.AuxComponentFactory;
import org.drugis.addis.gui.CategoryKnowledgeFactory;
import org.drugis.addis.gui.Main;
import org.drugis.addis.gui.components.AddisTabbedPane;
import org.drugis.addis.gui.wizard.TreatmentCategorizationOverviewWizardStep;
import org.drugis.addis.presentation.TreatmentCategorizationPresentation;
import org.drugis.addis.presentation.UnmodifiableHolder;
import org.drugis.common.gui.LayoutUtil;
import org.drugis.common.gui.SingleColumnPanelBuilder;
import org.drugis.common.gui.ViewBuilder;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;
public class TreatmentCategorizationView implements ViewBuilder {
private final TreatmentCategorizationPresentation d_model;
public TreatmentCategorizationView(final TreatmentCategorizationPresentation pm, final AddisWindow parent) {
d_model = pm;
}
@Override
public JComponent buildPanel() {
SingleColumnPanelBuilder builder = new SingleColumnPanelBuilder();
// ---------- Overview ----------
builder.addSeparator(CategoryKnowledgeFactory.getCategoryKnowledge(TreatmentCategorization.class).getSingularCapitalized());
builder.add(buildOverviewPanel());
final JTabbedPane tabbedPane = new AddisTabbedPane();
tabbedPane.addTab("Overview", builder.getPanel());
// ---------- Tree visualization ----------
builder = new SingleColumnPanelBuilder();
FormLayout layout = new FormLayout("fill:pref:grow", "p, 3dlu, p, 3dlu, fill:pref:grow");
final PanelBuilder tree = new PanelBuilder(layout);
CellConstraints cc = new CellConstraints();
tree.addSeparator("Dose Decision Tree", cc.xy(1, 1));
tree.add(new JLabel("Dose range values are in: " + d_model.getModel(TreatmentCategorization.PROPERTY_DOSE_UNIT).getValue().toString()), cc.xy(1, 3));
tree.add(TreatmentCategorizationOverviewWizardStep.buildOverview(d_model.getBean().getDecisionTree()), cc.xy(1, 5));
builder.add(tree.getPanel());
tabbedPane.addTab("Decision tree", builder.getPanel());
return tabbedPane;
}
private JComponent buildOverviewPanel() {
final FormLayout layout = new FormLayout("fill:pref:grow", "p");
final PanelBuilder builder = new PanelBuilder(layout);
final CellConstraints cc = new CellConstraints();
int row = 1;
builder.addSeparator(CategoryKnowledgeFactory.getCategoryKnowledge(Drug.class).getSingularCapitalized(), cc.xy(1, row));
row = LayoutUtil.addRow(layout, row);
builder.add(DrugView.createDrugOverviewPanel(d_model.getDrugPresentation()), cc.xy(1, row));
layout.appendRow(RowSpec.decode("10dlu"));
row += 1;
row = LayoutUtil.addRow(layout, row);
builder.addSeparator("Dose categories", cc.xy(1, row));
for(final Category category : d_model.getBean().getCategories()) {
row = LayoutUtil.addRow(layout, row);
builder.addSeparator(CategoryKnowledgeFactory.getCategoryKnowledge(Study.class).getPlural()
+ " measuring this "
+ CategoryKnowledgeFactory.getCategoryKnowledge(Drug.class).getSingular()
+ " categorized as '" + category.getName() + "'", cc.xy(1, row));
row = LayoutUtil.addRow(layout, row);
String criterionLabel = category.getCriterionLabel();
String[] criteria = StringUtils.splitByWholeSeparator(criterionLabel, " OR ");
criterionLabel = StringUtils.join(criteria, " OR\n");
builder.add(AuxComponentFactory.createAutoWrapLabel(new UnmodifiableHolder<String>("Inclusion criteria: " + criterionLabel)), cc.xy(1, row));
row = LayoutUtil.addRow(layout, row);
builder.add(DrugView.buildStudyListComponent(d_model.getCategorizedStudyList(category), Main.getMainWindow()), cc.xy(1, row));
layout.appendRow(RowSpec.decode("10dlu"));
row += 1;
}
return builder.getPanel();
}
}