/*
* PatientView
*
* Copyright (c) Worth Solutions Limited 2004-2013
*
* This file is part of PatientView.
*
* PatientView 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.
* PatientView 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 PatientView in a file
* titled COPYING. If not, see <http://www.gnu.org/licenses/>.
*
* @package PatientView
* @link http://www.patientview.org
* @author PatientView <info@patientview.org>
* @copyright Copyright (c) 2004-2013, Worth Solutions Limited
* @license http://www.gnu.org/licenses/gpl-3.0.html The GNU General Public License V3.0
*/
package org.patientview.radar.web.panels.subtabs;
import org.patientview.radar.model.ImmunosuppressionTreatment;
import org.patientview.radar.model.exception.InvalidModelException;
import org.patientview.radar.model.sequenced.Therapy;
import org.patientview.radar.model.user.User;
import org.patientview.radar.service.DiagnosisManager;
import org.patientview.radar.service.ImmunosuppressionManager;
import org.patientview.radar.service.PlasmapheresisManager;
import org.patientview.radar.service.TherapyManager;
import org.patientview.radar.service.TreatmentManager;
import org.patientview.radar.web.RadarApplication;
import org.patientview.radar.web.RadarSecuredSession;
import org.patientview.radar.web.behaviours.RadarBehaviourFactory;
import org.patientview.radar.web.components.RadarComponentFactory;
import org.patientview.radar.web.components.RadarDateTextField;
import org.patientview.radar.web.components.RadarRequiredDateTextField;
import org.patientview.radar.web.components.RadarRequiredDropdownChoice;
import org.patientview.radar.web.components.RadarTextFieldWithValidation;
import org.patientview.radar.web.models.RadarModelFactory;
import org.patientview.radar.web.panels.PlasmaPheresisPanel;
import org.patientview.radar.web.panels.firstvisit.YesNoRadioGroupPanel;
import org.patientview.radar.web.panels.tables.DialysisTablePanel;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
import org.apache.wicket.datetime.markup.html.basic.DateLabel;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.IFeedbackMessageFilter;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.validation.validator.RangeValidator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
public class TreatmentPanel extends Panel {
@SpringBean
private TherapyManager therapyManager;
@SpringBean
private DiagnosisManager diagnosisManager;
@SpringBean
private ImmunosuppressionManager immunosuppressionManager;
@SpringBean
private PlasmapheresisManager plasmapheresisManager;
public static final long CYCLOPHOSPHAMIDE_ID = 8;
private IModel<ImmunosuppressionTreatment> editImmunosuppressionTreatmentIModel;
public TreatmentPanel(String id, final IModel<Long> radarNumberModel, boolean firstVisit,
IModel<Therapy> followingVisitTherapyModel, List<Component>
followingVisitComponentsToUpdate) {
super(id);
// Immunosuppression including Monoclonals
final IModel immunosuppressionTreatmentListModel = new AbstractReadOnlyModel<List>() {
@Override
public List getObject() {
if (radarNumberModel.getObject() != null) {
return immunosuppressionManager.getImmunosuppressionTreatmentByRadarNumber(
radarNumberModel.getObject());
}
return Collections.emptyList();
}
};
editImmunosuppressionTreatmentIModel = new Model<ImmunosuppressionTreatment>();
final List<Component> addImmunoSuppressComponentsToUpdate = new ArrayList<Component>();
final List<Component> editImmunoSuppressComponentsToUpdate = new ArrayList<Component>();
final WebMarkupContainer immunosuppressionTreatmentsContainer =
new WebMarkupContainer("immunosuppressionTreatmentsContainer");
// For showing edit from ajax call
final MarkupContainer editContainer = new WebMarkupContainer("editContainer") {
@Override
public boolean isVisible() {
return editImmunosuppressionTreatmentIModel.getObject() != null;
}
};
editContainer.setOutputMarkupId(true);
editContainer.setOutputMarkupPlaceholderTag(true);
ListView<ImmunosuppressionTreatment> immunosuppressionTreatmentListView =
new ListView<ImmunosuppressionTreatment>("immunosuppressionTreatments",
immunosuppressionTreatmentListModel) {
@Override
protected void populateItem(final ListItem<ImmunosuppressionTreatment> item) {
item.setModel(new CompoundPropertyModel<ImmunosuppressionTreatment>(item.getModelObject()));
item.add(DateLabel.forDatePattern("startDate", RadarApplication.DATE_PATTERN));
item.add(DateLabel.forDatePattern("endDate", RadarApplication.DATE_PATTERN));
item.add(new Label("immunosuppression.description"));
item.add(new Label("cyclophosphamideTotalDose") {
@Override
public boolean isVisible() {
return item.getModelObject().getImmunosuppression().getId().
equals(CYCLOPHOSPHAMIDE_ID);
}
});
AjaxLink ajaxDeleteLink = new AjaxLink("deleteLink") {
@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
immunosuppressionManager.deleteImmunosuppressionTreatment(item.getModelObject());
ajaxRequestTarget.add(addImmunoSuppressComponentsToUpdate.toArray(
new Component[addImmunoSuppressComponentsToUpdate.size()]));
ajaxRequestTarget.add(immunosuppressionTreatmentsContainer);
}
};
item.add(ajaxDeleteLink);
ajaxDeleteLink.add(RadarBehaviourFactory.getDeleteConfirmationBehaviour());
AjaxLink ajaxEditLink = new AjaxLink("editLink") {
@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
editImmunosuppressionTreatmentIModel.setObject(item.getModelObject());
ajaxRequestTarget.add(editContainer);
}
};
item.add(ajaxEditLink);
AuthenticatedWebSession session = RadarSecuredSession.get();
if (session.isSignedIn()) {
if (session.getRoles().hasRole(User.ROLE_PATIENT)) {
ajaxDeleteLink.setVisible(false);
ajaxEditLink.setVisible(false);
}
}
immunosuppressionTreatmentsContainer.setVisible(true);
}
};
immunosuppressionTreatmentsContainer.add(immunosuppressionTreatmentListView);
add(immunosuppressionTreatmentsContainer);
immunosuppressionTreatmentsContainer.setOutputMarkupId(true);
immunosuppressionTreatmentsContainer.setOutputMarkupPlaceholderTag(true);
// Construct the form
final ImmunosuppressionTreatmentForm addImmunosuppressionForm =
new ImmunosuppressionTreatmentForm("addImmunosuppressionForm",
new CompoundPropertyModel<ImmunosuppressionTreatment>(new ImmunosuppressionTreatment()),
addImmunoSuppressComponentsToUpdate);
ImmunosuppressionTreatmentForm editImmunosuppressionForm =
new ImmunosuppressionTreatmentForm("editImmunosuppressionForm",
new CompoundPropertyModel<ImmunosuppressionTreatment>(editImmunosuppressionTreatmentIModel),
editImmunoSuppressComponentsToUpdate);
editImmunosuppressionForm.add(new AjaxSubmitLink("saveTop") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
target.add(editContainer);
target.add(immunosuppressionTreatmentsContainer);
try {
immunosuppressionManager.saveImmunosuppressionTreatment((ImmunosuppressionTreatment)
form.getModelObject());
} catch (InvalidModelException e) {
for (String error : e.getErrors()) {
error(error);
}
return;
}
editImmunosuppressionTreatmentIModel.setObject(null);
addImmunosuppressionForm.clearInput();
target.add(addImmunosuppressionForm);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.add(editImmunoSuppressComponentsToUpdate.toArray(
new Component[editImmunoSuppressComponentsToUpdate.size()]));
}
});
editImmunosuppressionForm.add(new AjaxLink("cancelTop") {
@Override
public void onClick(AjaxRequestTarget target) {
editImmunosuppressionTreatmentIModel.setObject(null);
target.add(editContainer);
}
});
editImmunosuppressionForm.add(new AjaxSubmitLink("saveBottom") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
target.add(editContainer);
target.add(immunosuppressionTreatmentsContainer);
try {
immunosuppressionManager.saveImmunosuppressionTreatment((ImmunosuppressionTreatment)
form.getModelObject());
} catch (InvalidModelException e) {
for (String error : e.getErrors()) {
error(error);
}
return;
}
editImmunosuppressionTreatmentIModel.setObject(null);
addImmunosuppressionForm.clearInput();
target.add(addImmunosuppressionForm);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.add(editImmunoSuppressComponentsToUpdate.toArray(
new Component[editImmunoSuppressComponentsToUpdate.size()]));
}
});
editImmunosuppressionForm.add(new AjaxLink("cancelBottom") {
@Override
public void onClick(AjaxRequestTarget target) {
editImmunosuppressionTreatmentIModel.setObject(null);
target.add(editContainer);
}
});
editContainer.add(editImmunosuppressionForm);
add(editContainer);
addImmunosuppressionForm.add(new AjaxSubmitLink("submit") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
target.add(immunosuppressionTreatmentsContainer);
target.add(addImmunoSuppressComponentsToUpdate.toArray(
new Component[addImmunoSuppressComponentsToUpdate.size()]));
ImmunosuppressionTreatment immunosuppressionTreatment = (ImmunosuppressionTreatment)
form.getModelObject();
immunosuppressionTreatment.setRadarNumber(radarNumberModel.getObject());
try {
immunosuppressionManager.saveImmunosuppressionTreatment(immunosuppressionTreatment);
} catch (InvalidModelException e) {
for (String error : e.getErrors()) {
error(error);
}
return;
}
form.getModel().setObject(new ImmunosuppressionTreatment());
immunosuppressionTreatmentsContainer.setVisible(true);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.add(addImmunoSuppressComponentsToUpdate.toArray(
new Component[addImmunoSuppressComponentsToUpdate.size()]));
}
});
add(addImmunosuppressionForm);
// Drugs
final List<Component> therapyFormComponentsToUpdate = new ArrayList<Component>();
final CompoundPropertyModel<Therapy> firstVisitTherapyFormModel = new CompoundPropertyModel
<Therapy>(new LoadableDetachableModel<Therapy>() {
@Override
public Therapy load() {
Therapy therapyModelObject = null;
if (radarNumberModel.getObject() != null) {
therapyModelObject = therapyManager.getFirstTherapyByRadarNumber(radarNumberModel.getObject());
}
if (therapyModelObject == null) {
therapyModelObject = new Therapy();
therapyModelObject.setSequenceNumber(1);
}
return therapyModelObject;
}
});
CompoundPropertyModel<Therapy> therapyFormModel;
if (firstVisit) {
therapyFormModel = firstVisitTherapyFormModel;
} else {
therapyFormModel = new CompoundPropertyModel<Therapy>(followingVisitTherapyModel);
}
final Form<Therapy> therapyForm = new Form<Therapy>("therapyForm", therapyFormModel) {
@Override
protected void onSubmit() {
Therapy therapy = getModelObject();
therapy.setRadarNumber(radarNumberModel.getObject());
therapyManager.saveTherapy(therapy);
}
};
final IModel<Boolean> isSrnsModel = RadarModelFactory.getIsSrnsModel(radarNumberModel, diagnosisManager);
IModel firstColumnLabelModel = new LoadableDetachableModel() {
@Override
protected Object load() {
return isSrnsModel.getObject() ? "Prior to Referral" : "Drugs in the 4 weeks after Biopsy";
}
};
Label successLabelTop = RadarComponentFactory.getSuccessMessageLabel("successMessageTop", therapyForm,
therapyFormComponentsToUpdate);
Label errorLabelTop = RadarComponentFactory.getErrorMessageLabel("errorMessageTop", therapyForm,
therapyFormComponentsToUpdate);
Label successLabelBottom = RadarComponentFactory.getSuccessMessageLabel("successMessageBottom", therapyForm,
therapyFormComponentsToUpdate);
Label errorLabelBottom = RadarComponentFactory.getErrorMessageLabel("errorMessageBottom", therapyForm,
therapyFormComponentsToUpdate);
RadarRequiredDateTextField treatmentRecordDate = new RadarRequiredDateTextField("treatmentRecordDate",
therapyForm, therapyFormComponentsToUpdate);
therapyForm.add(treatmentRecordDate);
Label firstColumnLabel = new Label("firstColumnLabel", firstColumnLabelModel);
therapyForm.add(firstColumnLabel);
WebMarkupContainer currentContainer = new WebMarkupContainer("currentContainer") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
};
therapyForm.add(currentContainer);
WebMarkupContainer nsaidContainerParent = new WebMarkupContainer("nsaidContainerParent") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
};
YesNoRadioGroupPanel nsaidContainer = new YesNoRadioGroupPanel("nsaidContainer", true,
(CompoundPropertyModel) therapyFormModel,
"nsaid");
nsaidContainerParent.add(nsaidContainer);
therapyForm.add(nsaidContainerParent);
nsaidContainerParent.add(new YesNoRadioGroupPanel("nsaidPriorContainer", true,
(CompoundPropertyModel) therapyFormModel, "nsaidPrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
WebMarkupContainer diureticContainerParent = new WebMarkupContainer("diureticContainerParent") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
};
YesNoRadioGroupPanel diureticContainer = new YesNoRadioGroupPanel("diureticContainer", true,
(CompoundPropertyModel) therapyFormModel,
"diuretic");
diureticContainerParent.add(diureticContainer);
therapyForm.add(diureticContainerParent);
diureticContainerParent.add(new YesNoRadioGroupPanel("diureticPriorContainer",
true, (CompoundPropertyModel) therapyFormModel, "diureticPrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
boolean antihypertensiveToggleInit = (Boolean.FALSE.equals(therapyForm.getModelObject().getAntihypertensive())
&& Boolean.FALSE.equals(therapyForm.getModelObject().getAntihypertensivePrior())) ||
(therapyForm.getModelObject().getAntihypertensive() == null &&
therapyForm.getModelObject().getAntihypertensivePrior() == null)
? false : true;
final IModel<Boolean> antihypertensiveToggleModel = new Model<Boolean>(antihypertensiveToggleInit);
AjaxFormChoiceComponentUpdatingBehavior antihypertensiveToggleBehaviour =
new AjaxFormChoiceComponentUpdatingBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
antihypertensiveToggleModel.setObject(therapyForm.getModelObject().getAntihypertensive());
target.add(therapyFormComponentsToUpdate.toArray(
new Component[therapyFormComponentsToUpdate.size()]));
}
};
AjaxFormChoiceComponentUpdatingBehavior antihypertensiveToggleBehaviour2 =
new AjaxFormChoiceComponentUpdatingBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
antihypertensiveToggleModel.setObject(therapyForm.getModelObject().getAntihypertensivePrior());
target.add(therapyFormComponentsToUpdate.toArray(
new Component[therapyFormComponentsToUpdate.size()]));
}
};
YesNoRadioGroupPanel antihypertensiveContainer = new YesNoRadioGroupPanel("antihypertensiveContainer", true,
therapyFormModel,
"antihypertensive", antihypertensiveToggleBehaviour);
therapyForm.add(antihypertensiveContainer);
therapyForm.add(new YesNoRadioGroupPanel("antihypertensivePriorContainer", true, therapyFormModel,
"antihypertensivePrior", antihypertensiveToggleBehaviour2) {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
WebMarkupContainer aceInhibitorContainer = new WebMarkupContainer("aceInhibitorContainer") {
@Override
public boolean isVisible() {
return antihypertensiveToggleModel.getObject();
}
};
therapyFormComponentsToUpdate.add(aceInhibitorContainer);
aceInhibitorContainer.setOutputMarkupId(true);
aceInhibitorContainer.setOutputMarkupPlaceholderTag(true);
YesNoRadioGroupPanel aceInhibitorRadioGroup = new YesNoRadioGroupPanel("aceInhibitorRadioGroup",
true, therapyFormModel, "aceInhibitor");
aceInhibitorContainer.add(aceInhibitorRadioGroup);
YesNoRadioGroupPanel aceInhibitorPriorRadioGroup = new YesNoRadioGroupPanel("aceInhibitorPriorRadioGroup",
true, therapyFormModel,
"aceInhibitorPrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
};
aceInhibitorContainer.add(aceInhibitorPriorRadioGroup);
therapyForm.add(aceInhibitorContainer);
WebMarkupContainer arb1AntagonistContainer = new WebMarkupContainer("arb1AntagonistContainer") {
@Override
public boolean isVisible() {
return antihypertensiveToggleModel.getObject();
}
};
therapyFormComponentsToUpdate.add(arb1AntagonistContainer);
arb1AntagonistContainer.setOutputMarkupId(true);
arb1AntagonistContainer.setOutputMarkupPlaceholderTag(true);
arb1AntagonistContainer.add(new YesNoRadioGroupPanel("arb1AntagonistRadioGroup", true, therapyFormModel,
"arb1Antagonist"));
arb1AntagonistContainer.add(new YesNoRadioGroupPanel("arb1AntagonistPriorRadioGroup", true, therapyFormModel,
"arb1AntagonistPrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
therapyForm.add(arb1AntagonistContainer);
WebMarkupContainer calciumChannelBlockerContainer = new WebMarkupContainer("calciumChannelBlockerContainer") {
@Override
public boolean isVisible() {
return antihypertensiveToggleModel.getObject();
}
};
therapyFormComponentsToUpdate.add(calciumChannelBlockerContainer);
calciumChannelBlockerContainer.setOutputMarkupId(true);
calciumChannelBlockerContainer.setOutputMarkupPlaceholderTag(true);
calciumChannelBlockerContainer.add(new YesNoRadioGroupPanel("calciumChannelBlockerRadioGroup", true,
therapyFormModel,
"calciumChannelBlocker"));
calciumChannelBlockerContainer.add(new YesNoRadioGroupPanel("calciumChannelBlockerPriorRadioGroup", true,
therapyFormModel,
"calciumChannelBlockerPrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
therapyForm.add(calciumChannelBlockerContainer);
WebMarkupContainer betaBlockerContainer = new WebMarkupContainer("betaBlockerContainer") {
@Override
public boolean isVisible() {
return antihypertensiveToggleModel.getObject();
}
};
therapyFormComponentsToUpdate.add(betaBlockerContainer);
betaBlockerContainer.setOutputMarkupId(true);
betaBlockerContainer.setOutputMarkupPlaceholderTag(true);
betaBlockerContainer.add(new YesNoRadioGroupPanel("betaBlockerRadioGroup", true, therapyFormModel,
"betaBlocker"));
betaBlockerContainer.add(new YesNoRadioGroupPanel("betaBlockerPriorRadioGroup", true, therapyFormModel,
"betaBlockerPrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
therapyForm.add(betaBlockerContainer);
WebMarkupContainer otherAntihypertensiveContainer = new WebMarkupContainer("otherAntihypertensiveContainer") {
@Override
public boolean isVisible() {
return antihypertensiveToggleModel.getObject();
}
};
therapyFormComponentsToUpdate.add(otherAntihypertensiveContainer);
otherAntihypertensiveContainer.setOutputMarkupId(true);
otherAntihypertensiveContainer.setOutputMarkupPlaceholderTag(true);
otherAntihypertensiveContainer.add(new YesNoRadioGroupPanel("otherAntihypertensiveRadioGroup", true,
therapyFormModel,
"otherAntihypertensive"));
otherAntihypertensiveContainer.add(new YesNoRadioGroupPanel("otherAntihypertensivePriorRadioGroup", true,
therapyFormModel,
"otherAntihypertensivePrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
therapyForm.add(otherAntihypertensiveContainer);
therapyForm.add(new YesNoRadioGroupPanel("insulinContainer", true, therapyFormModel, "insulin"));
therapyForm.add(new YesNoRadioGroupPanel("insulinPriorContainer", true, therapyFormModel, "insulinPrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
WebMarkupContainer lipidLoweringAgentContainerParent =
new WebMarkupContainer("lipidLoweringAgentContainerParent") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
};
lipidLoweringAgentContainerParent.add(new YesNoRadioGroupPanel("lipidLoweringAgentContainer", true,
therapyFormModel,
"lipidLoweringAgent"));
lipidLoweringAgentContainerParent.add(new YesNoRadioGroupPanel("lipidLoweringAgentPriorContainer", true,
therapyFormModel,
"lipidLoweringAgentPrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
therapyForm.add(lipidLoweringAgentContainerParent);
therapyForm.add(new YesNoRadioGroupPanel("epoContainer", true, therapyFormModel, "epo"));
therapyForm.add(new YesNoRadioGroupPanel("epoPriorContainer", true, therapyFormModel, "epoPrior") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
});
therapyForm.add(new TextField("other1"));
WebMarkupContainer other1PriorContainer = new WebMarkupContainer("other1PriorContainer") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
};
other1PriorContainer.add(new TextField("other1Prior"));
therapyForm.add(other1PriorContainer);
therapyForm.add(new TextField("other2"));
WebMarkupContainer other2PriorContainer = new WebMarkupContainer("other2PriorContainer") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
};
other2PriorContainer.add(new TextField("other2Prior"));
therapyForm.add(other2PriorContainer);
therapyForm.add(new TextField("other3"));
WebMarkupContainer other3PriorContainer = new WebMarkupContainer("other3PriorContainer") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
};
other3PriorContainer.add(new TextField("other3Prior"));
therapyForm.add(other3PriorContainer);
therapyForm.add(new TextField("other4"));
WebMarkupContainer other4PriorContainer = new WebMarkupContainer("other4PriorContainer") {
@Override
public boolean isVisible() {
return isSrnsModel.getObject();
}
};
other4PriorContainer.add(new TextField("other4Prior"));
therapyForm.add(other4PriorContainer);
AjaxSubmitLink saveTop = new AjaxSubmitLink("saveTop", therapyForm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.add(therapyFormComponentsToUpdate.toArray(new Component[therapyFormComponentsToUpdate.size()]));
target.appendJavaScript(RadarApplication.FORM_IS_DIRTY_FALSE_SCRIPT);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.add(therapyFormComponentsToUpdate.toArray(new Component[therapyFormComponentsToUpdate.size()]));
}
};
therapyForm.add(saveTop);
add(therapyForm);
AjaxSubmitLink saveBottom = new AjaxSubmitLink("saveBottom", therapyForm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.add(therapyFormComponentsToUpdate.toArray(new Component[therapyFormComponentsToUpdate.size()]));
target.appendJavaScript(RadarApplication.FORM_IS_DIRTY_FALSE_SCRIPT);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.add(therapyFormComponentsToUpdate.toArray(new Component[therapyFormComponentsToUpdate.size()]));
}
};
therapyForm.add(saveBottom);
add(therapyForm);
// Plasmapheresis
PlasmaPheresisPanel plasmaPheresisPanel = new PlasmaPheresisPanel("plasmapheresisPanel", radarNumberModel);
add(plasmaPheresisPanel);
DialysisTablePanel dialysisTablePanel = new DialysisTablePanel("dialysisContainer", radarNumberModel);
dialysisTablePanel.setVisible(firstVisit);
add(dialysisTablePanel);
if (!firstVisit) {
for (Component component : followingVisitComponentsToUpdate) {
therapyFormComponentsToUpdate.add(component);
}
}
}
private final class ImmunosuppressionTreatmentForm extends Form<ImmunosuppressionTreatment> {
private RadarDateTextField endDate;
@SpringBean
private ImmunosuppressionManager immunosuppressionManager;
private ImmunosuppressionTreatmentForm(String id, IModel<ImmunosuppressionTreatment> model,
final List<Component> componentsToUpdate) {
super(id, model);
RadarRequiredDateTextField startDate = new RadarRequiredDateTextField("startDate", this,
componentsToUpdate);
add(startDate);
RadarRequiredDropdownChoice immunoSuppression = new RadarRequiredDropdownChoice("immunosuppression",
immunosuppressionManager.getImmunosuppressions(), new ChoiceRenderer("description", "id"),
this, componentsToUpdate);
final Label totalDoseLabel = new Label("totalDoseLabel", "Total dose of course in g") {
@Override
public boolean isVisible() {
if (ImmunosuppressionTreatmentForm.this.getModelObject() != null) {
return ImmunosuppressionTreatmentForm.this.getModelObject().getImmunosuppression() != null ?
ImmunosuppressionTreatmentForm.this.getModelObject().getImmunosuppression().getId().
equals(CYCLOPHOSPHAMIDE_ID) : false;
}
return false;
}
};
add(totalDoseLabel);
final TextField cyclophosphamideTotalDose = new RadarTextFieldWithValidation("cyclophosphamideTotalDose",
new RangeValidator<Double>(0.01, 9.99), true, this, componentsToUpdate) {
@Override
public boolean isVisible() {
if (ImmunosuppressionTreatmentForm.this.getModelObject() != null) {
return ImmunosuppressionTreatmentForm.this.getModelObject().getImmunosuppression() != null ?
ImmunosuppressionTreatmentForm.this.getModelObject().getImmunosuppression().getId().
equals(CYCLOPHOSPHAMIDE_ID) :
false;
}
return false;
}
};
add(cyclophosphamideTotalDose);
totalDoseLabel.setOutputMarkupId(true);
totalDoseLabel.setOutputMarkupPlaceholderTag(true);
cyclophosphamideTotalDose.setOutputMarkupId(true);
cyclophosphamideTotalDose.setOutputMarkupPlaceholderTag(true);
immunoSuppression.add(new AjaxFormComponentUpdatingBehavior("onChange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
target.add(totalDoseLabel);
target.add(cyclophosphamideTotalDose);
}
});
add(immunoSuppression);
endDate = new RadarDateTextField("endDate", this, componentsToUpdate);
add(endDate);
startDate.setOutputMarkupId(true);
startDate.setOutputMarkupPlaceholderTag(true);
endDate.setOutputMarkupPlaceholderTag(true);
endDate.setOutputMarkupId(true);
immunoSuppression.setOutputMarkupId(true);
immunoSuppression.setOutputMarkupPlaceholderTag(true);
cyclophosphamideTotalDose.setOutputMarkupId(true);
cyclophosphamideTotalDose.setOutputMarkupPlaceholderTag(true);
componentsToUpdate.add(startDate);
componentsToUpdate.add(endDate);
componentsToUpdate.add(immunoSuppression);
componentsToUpdate.add(cyclophosphamideTotalDose);
componentsToUpdate.add(totalDoseLabel);
FeedbackPanel treatmentFeedback = new FeedbackPanel("immunosupressionFeedback",
new IFeedbackMessageFilter() {
public boolean accept(FeedbackMessage feedbackMessage) {
if (TreatmentManager.ERROR_MESSAGES.contains(feedbackMessage.getMessage())) {
return true;
}
return false;
}
});
add(treatmentFeedback);
treatmentFeedback.setOutputMarkupPlaceholderTag(true);
componentsToUpdate.add(treatmentFeedback);
}
@Override
protected void onValidateModelObjects() {
super.onValidateModelObjects();
ImmunosuppressionTreatment treatment = getModelObject();
Date start = treatment.getStartDate();
Date end = treatment.getEndDate();
if (start != null && end != null && start.compareTo(end) != -1) {
endDate.error("End date cannot be less than start date");
}
}
}
}