Java tutorial
/******************************************************************************* * SORMAS - Surveillance Outbreak Response Management & Analysis System * Copyright 2016-2018 Helmholtz-Zentrum fr Infektionsforschung GmbH (HZI) * * 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 <https://www.gnu.org/licenses/>. *******************************************************************************/ package de.symeda.sormas.ui.contact; import org.joda.time.LocalDate; import com.vaadin.v7.data.Validator; import com.vaadin.v7.data.validator.DateRangeValidator; import com.vaadin.v7.shared.ui.datefield.Resolution; import com.vaadin.v7.ui.ComboBox; import com.vaadin.v7.ui.DateField; import com.vaadin.v7.ui.Field; import com.vaadin.v7.ui.OptionGroup; import com.vaadin.v7.ui.TextArea; import com.vaadin.v7.ui.TextField; import com.vaadin.ui.themes.ValoTheme; import de.symeda.sormas.api.FacadeProvider; import de.symeda.sormas.api.caze.CaseDataDto; import de.symeda.sormas.api.contact.ContactDto; import de.symeda.sormas.api.i18n.I18nProperties; import de.symeda.sormas.api.i18n.Validations; import de.symeda.sormas.api.person.PersonDto; import de.symeda.sormas.api.user.UserRight; import de.symeda.sormas.api.user.UserRole; import de.symeda.sormas.ui.UserProvider; import de.symeda.sormas.ui.utils.AbstractEditForm; import de.symeda.sormas.ui.utils.CssStyles; import de.symeda.sormas.ui.utils.LayoutUtil; @SuppressWarnings("serial") public class ContactCreateForm extends AbstractEditForm<ContactDto> { private static final String FIRST_NAME = PersonDto.FIRST_NAME; private static final String LAST_NAME = PersonDto.LAST_NAME; private static final String HTML_LAYOUT = LayoutUtil.fluidRowLocs(ContactDto.CAZE, ContactDto.LAST_CONTACT_DATE) + LayoutUtil.fluidRowLocs(FIRST_NAME, LAST_NAME) + LayoutUtil.fluidRowLocs(ContactDto.CONTACT_PROXIMITY) + LayoutUtil.fluidRowLocs(ContactDto.RELATION_TO_CASE) + LayoutUtil.fluidRowLocs(ContactDto.DESCRIPTION) + LayoutUtil.fluidRowLocs(ContactDto.CONTACT_OFFICER, ""); public ContactCreateForm(UserRight editOrCreateUserRight) { super(ContactDto.class, ContactDto.I18N_PREFIX, editOrCreateUserRight); setWidth(540, Unit.PIXELS); hideValidationUntilNextCommit(); } @Override protected void addFields() { TextField firstName = addCustomField(FIRST_NAME, String.class, TextField.class); TextField lastName = addCustomField(LAST_NAME, String.class, TextField.class); ComboBox caze = addField(ContactDto.CAZE, ComboBox.class); caze.addItems( FacadeProvider.getCaseFacade().getSelectableCases(UserProvider.getCurrent().getUserReference())); DateField lastContactDate = addField(ContactDto.LAST_CONTACT_DATE, DateField.class); OptionGroup contactProximity = addField(ContactDto.CONTACT_PROXIMITY, OptionGroup.class); contactProximity.removeStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL); addField(ContactDto.DESCRIPTION, TextArea.class).setRows(2); ComboBox relationToCase = addField(ContactDto.RELATION_TO_CASE, ComboBox.class); CssStyles.style(CssStyles.SOFT_REQUIRED, firstName, lastName, caze, lastContactDate, contactProximity, relationToCase); ComboBox contactOfficerField = addField(ContactDto.CONTACT_OFFICER, ComboBox.class); contactOfficerField.setNullSelectionAllowed(true); setRequired(true, ContactDto.CAZE, FIRST_NAME, LAST_NAME); addValueChangeListener(e -> { updateLastContactDateValidator(); // set assignable officers ContactDto contactDto = getValue(); if (contactDto != null) { CaseDataDto caseDto = FacadeProvider.getCaseFacade() .getCaseDataByUuid(contactDto.getCaze().getUuid()); contactOfficerField.addItems(FacadeProvider.getUserFacade() .getUserRefsByDistrict(caseDto.getDistrict(), false, UserRole.CONTACT_OFFICER)); } }); } protected void updateLastContactDateValidator() { Field<?> dateField = getField(ContactDto.LAST_CONTACT_DATE); for (Validator validator : dateField.getValidators()) { if (validator instanceof DateRangeValidator) { dateField.removeValidator(validator); } } if (getValue() != null) { dateField.addValidator(new DateRangeValidator( I18nProperties.getValidationError(Validations.beforeDate, I18nProperties.getPrefixCaption(ContactDto.I18N_PREFIX, ContactDto.LAST_CONTACT_DATE), I18nProperties.getPrefixCaption(ContactDto.I18N_PREFIX, ContactDto.REPORT_DATE_TIME)), null, new LocalDate(getValue().getReportDateTime()).toDate(), Resolution.SECOND)); } } public String getPersonFirstName() { return (String) getField(FIRST_NAME).getValue(); } public String getPersonLastName() { return (String) getField(LAST_NAME).getValue(); } @Override protected String createHtmlLayout() { return HTML_LAYOUT; } }