/* * 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; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.ajax.AjaxEventBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.extensions.markup.html.form.DateTextField; import org.apache.wicket.feedback.ComponentFeedbackMessageFilter; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.Radio; import org.apache.wicket.markup.html.form.RadioGroup; import org.apache.wicket.markup.html.form.TextArea; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; import org.patientview.model.Patient; import org.patientview.radar.model.Genetics; import org.patientview.radar.service.alport.GeneticsManager; import org.patientview.radar.web.RadarApplication; import org.patientview.radar.web.components.ComponentHelper; import org.patientview.radar.web.components.RadarComponentFactory; import org.patientview.radar.web.components.RadarRequiredDateTextField; import java.util.ArrayList; import java.util.List; public class NonAlportGeneticsPanel extends Panel { @SpringBean private GeneticsManager geneticsManager; public NonAlportGeneticsPanel(final String id, final Patient patient) { super(id); setOutputMarkupId(true); setOutputMarkupPlaceholderTag(true); Genetics genetics = null; if (patient.hasValidId()) { genetics = geneticsManager.get(patient.getRadarNo()); } if (genetics == null) { genetics = new Genetics(); genetics.setRadarNo(patient.getRadarNo()); } // main model for this tab final IModel<Genetics> model = new Model<Genetics>(genetics); // components to update on ajax refresh final List<Component> componentsToUpdateList = new ArrayList<Component>(); // general feedback for messages that are not to do with a certain component in the form final FeedbackPanel formFeedback = new FeedbackPanel("formFeedbackPanel"); formFeedback.setOutputMarkupId(true); formFeedback.setOutputMarkupPlaceholderTag(true); componentsToUpdateList.add(formFeedback); Form<Genetics> form = new Form<Genetics>("form", new CompoundPropertyModel<Genetics>(model)) { @Override protected void onSubmit() { Genetics genetics = getModelObject(); if (genetics.getLabWhereTestWasDone() != null && genetics.getLabWhereTestWasDone().length() > 150) { error("Laboratory where sent/done is limited to 150 characters."); } // requirement is to limit to 20 lines of text -> 130 chars per line ~ 2500 chars if (genetics.getWhatResultsShowed() != null && genetics.getWhatResultsShowed().length() > 2500) { error("Laboratory where sent/done is limited to 2500 characters."); } if (genetics.getTestsDone() == null) { error("Please select if a sample been sent for Genetic analysis"); } if (Genetics.TestsDone.YES_IN_THIS_PATIENT.equals(genetics.getTestsDone())) { if (genetics.getDateSent() == null) { error("Please select Date Sent if a sample been sent."); } } if (!hasError()) { genetics.setRadarNo(patient.getRadarNo()); geneticsManager.save(genetics); } } }; add(form); // have to set the generic feedback panel to only pick up msgs for them form ComponentFeedbackMessageFilter filter = new ComponentFeedbackMessageFilter(form); formFeedback.setFilter(filter); form.add(formFeedback); // add the patient detail bar to the tab PatientDetailPanel patientDetail = new PatientDetailPanel("patientDetail", patient, "Genetics"); patientDetail.setOutputMarkupId(true); form.add(patientDetail); componentsToUpdateList.add(patientDetail); // Date picker final DateTextField dateSent = new RadarRequiredDateTextField("dateSent", form, componentsToUpdateList); componentsToUpdateList.add(dateSent); MarkupContainer dateSentLabel = new WebMarkupContainer("dateSentLabel") { @Override public boolean isVisible() { Genetics genetics = model.getObject(); if (genetics.getTestsDone() == null || genetics.getTestsDone().equals(Genetics.TestsDone.NO)) { return false; } else { return true; } } }; dateSentLabel.setOutputMarkupId(true); dateSentLabel.add(dateSent); dateSentLabel.setOutputMarkupPlaceholderTag(true); form.add(dateSentLabel); componentsToUpdateList.add(dateSentLabel); // if (genetics.getTestsDone() == null || genetics.getTestsDone().equals(Genetics.TestsDone.NO)){ // dateSent.setVisible(false); // dateSentLabel.setVisible(false); // } RadioGroup<Genetics.TestsDone> testsDoneRadioGroup = new RadioGroup<Genetics.TestsDone>("testsDone"); form.add(testsDoneRadioGroup); Radio testsDoneNo = new Radio<Genetics.TestsDone>("testsDoneNo", new Model<Genetics.TestsDone>(Genetics.TestsDone.NO)); testsDoneRadioGroup.add(testsDoneNo); testsDoneNo.add(new AjaxEventBehavior("onchange") { @Override protected void onEvent(AjaxRequestTarget target) { model.getObject().setTestsDone(Genetics.TestsDone.NO); target.add(componentsToUpdateList.toArray(new Component[componentsToUpdateList.size()])); } }); Radio testsDoneYes = new Radio<Genetics.TestsDone>("testsDoneYes", new Model<Genetics.TestsDone>(Genetics.TestsDone.YES_IN_THIS_PATIENT)); testsDoneRadioGroup.add(testsDoneYes); testsDoneYes.add(new AjaxEventBehavior("onchange") { @Override protected void onEvent(AjaxRequestTarget target) { model.getObject().setTestsDone(Genetics.TestsDone.YES_IN_THIS_PATIENT); target.add(componentsToUpdateList.toArray(new Component[componentsToUpdateList.size()])); } }); form.add(new TextArea<String>("labWhereTestWasDone")); form.add(new TextField<String>("referenceNumber")); form.add(new TextArea<String>("whatResultsShowed")); Label successMessageTop = RadarComponentFactory.getSuccessMessageLabel("successMessageTop", form, componentsToUpdateList); Label errorMessageTop = RadarComponentFactory.getErrorMessageLabel("errorMessageTop", form, componentsToUpdateList); Label successMessageBottom = RadarComponentFactory.getSuccessMessageLabel("successMessageBottom", form, componentsToUpdateList); Label errorMessageBottom = RadarComponentFactory.getErrorMessageLabel("errorMessageBottom", form, componentsToUpdateList); form.add(new AjaxSubmitLink("saveTop") { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { ComponentHelper.updateComponentsIfParentIsVisible(target, componentsToUpdateList); target.appendJavaScript(RadarApplication.FORM_IS_DIRTY_FALSE_SCRIPT); target.add(formFeedback); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { ComponentHelper.updateComponentsIfParentIsVisible(target, componentsToUpdateList); target.add(formFeedback); } }); form.add(new AjaxSubmitLink("saveBottom") { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { ComponentHelper.updateComponentsIfParentIsVisible(target, componentsToUpdateList); target.appendJavaScript(RadarApplication.FORM_IS_DIRTY_FALSE_SCRIPT); target.add(formFeedback); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { ComponentHelper.updateComponentsIfParentIsVisible(target, componentsToUpdateList); target.add(formFeedback); } }); } }