Search in sources :

Example 1 with SymptomState

use of de.symeda.sormas.api.symptoms.SymptomState in project SORMAS-Project by hzi-braunschweig.

the class ClassificationAllSymptomsCriteriaDto method eval.

@Override
public boolean eval(CaseDataDto caze, PersonDto person, List<PathogenTestDto> pathogenTests, List<EventDto> events, Date lastVaccinationDate) {
    for (Field field : SymptomsDto.class.getDeclaredFields()) {
        SymptomsDto symptomsDto = caze.getSymptoms();
        if (field.getType() == SymptomState.class && fieldVisibilityCheckers.isVisible(SymptomsDto.class, field.getName())) {
            field.setAccessible(true);
            try {
                boolean matchedFieldState = field.get(symptomsDto) == symptomState;
                field.setAccessible(false);
                if (!matchedFieldState) {
                    return false;
                }
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            }
        }
    }
    return true;
}
Also used : SymptomsDto(de.symeda.sormas.api.symptoms.SymptomsDto) Field(java.lang.reflect.Field) SymptomState(de.symeda.sormas.api.symptoms.SymptomState)

Example 2 with SymptomState

use of de.symeda.sormas.api.symptoms.SymptomState in project SORMAS-Project by hzi-braunschweig.

the class ClassificationAllSymptomsCriteriaDto method buildDescription.

@Override
public String buildDescription() {
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("<b> ").append(I18nProperties.getString(Strings.classificationSymptomsAllOf).toUpperCase()).append("</b>");
    stringBuilder.append(" ").append(I18nProperties.getString(Strings.setTo)).append(" ");
    if (symptomState == null) {
        stringBuilder.append("<b>").append(I18nProperties.getString(Strings.none).toUpperCase()).append("</b>").append("</br>");
    } else {
        stringBuilder.append("<b>").append(symptomState.toString().toUpperCase()).append("</b>").append("</br>");
    }
    for (Field field : SymptomsDto.class.getDeclaredFields()) {
        if (field.getType() == SymptomState.class && fieldVisibilityCheckers.isVisible(SymptomsDto.class, field.getName())) {
            stringBuilder.append(I18nProperties.getPrefixCaption(SymptomsDto.I18N_PREFIX, field.getName())).append("; ");
        }
    }
    return stringBuilder.toString();
}
Also used : SymptomsDto(de.symeda.sormas.api.symptoms.SymptomsDto) Field(java.lang.reflect.Field) SymptomState(de.symeda.sormas.api.symptoms.SymptomState)

Example 3 with SymptomState

use of de.symeda.sormas.api.symptoms.SymptomState in project SORMAS-Project by hzi-braunschweig.

the class ClassificationAnyOfSymptomsCriteriaDto method buildDescription.

@Override
public String buildDescription() {
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("<b> ").append(I18nProperties.getString(Strings.classificationSymptomsAnyOf).toUpperCase()).append("</b>").append(" ").append(I18nProperties.getString(Strings.setTo)).append(" ");
    if (symptomState == null) {
        stringBuilder.append("<b>").append(I18nProperties.getString(Strings.none).toUpperCase()).append("</b>").append("</br>");
    } else {
        stringBuilder.append("<b>").append(symptomState.toString().toUpperCase()).append("</b>").append("</br>");
    }
    for (Field field : SymptomsDto.class.getDeclaredFields()) {
        if (field.getType() == SymptomState.class && fieldVisibilityCheckers.isVisible(SymptomsDto.class, field.getName())) {
            stringBuilder.append(I18nProperties.getPrefixCaption(SymptomsDto.I18N_PREFIX, field.getName())).append("; ");
        }
    }
    if (stringBuilder.length() > 0 && stringBuilder.charAt(stringBuilder.length() - 2) == ';') {
        stringBuilder.delete(stringBuilder.length() - 2, stringBuilder.length() - 1);
    }
    return stringBuilder.toString();
}
Also used : SymptomsDto(de.symeda.sormas.api.symptoms.SymptomsDto) Field(java.lang.reflect.Field) SymptomState(de.symeda.sormas.api.symptoms.SymptomState)

Example 4 with SymptomState

use of de.symeda.sormas.api.symptoms.SymptomState in project SORMAS-Project by hzi-braunschweig.

the class ControlSwitchField method createRadioButton.

private RadioButton createRadioButton(int index, int lastIndex, Item item) {
    RadioButton button = new RadioButton(getContext());
    button.setId(index);
    LayoutParams params = new LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1);
    int borderSize = getResources().getDimensionPixelSize(R.dimen.defaultControlStrokeWidth);
    if (index == 0) {
        params.setMargins(borderSize, borderSize, 0, borderSize);
    } else if (index == lastIndex) {
        params.setMargins(0, borderSize, borderSize, borderSize);
    } else {
        params.setMargins(0, borderSize, 0, borderSize);
    }
    float textSize;
    int heightInPixel;
    if (isSlim()) {
        textSize = getContext().getResources().getDimension(R.dimen.slimControlTextSize);
        heightInPixel = getContext().getResources().getDimensionPixelSize(R.dimen.slimControlHeight);
    } else {
        textSize = getContext().getResources().getDimension(R.dimen.switchControlTextSize);
        heightInPixel = getContext().getResources().getDimensionPixelSize(R.dimen.maxSwitchButtonHeight);
    }
    button.setHeight(heightInPixel);
    button.setMinHeight(heightInPixel);
    button.setMaxHeight(heightInPixel);
    button.setPadding(0, 0, 0, 0);
    button.setBackground(getButtonDrawable(index == lastIndex, hasError));
    button.setButtonDrawable(null);
    button.setGravity(Gravity.CENTER);
    button.setTypeface(Typeface.create(RADIO_BUTTON_FONT_FAMILY, Typeface.NORMAL));
    button.setTextColor(textColor);
    button.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
    button.setIncludeFontPadding(false);
    button.setLayoutParams(params);
    Object btnValue = item.getValue();
    String btnKey = item.getKey();
    if (useAbbreviations) {
        if (btnValue instanceof YesNoUnknown && btnKey.equals(YesNoUnknown.UNKNOWN.toString())) {
            btnKey = btnKey.substring(0, 3);
        }
        if (btnValue instanceof SymptomState && btnKey.equals(SymptomState.UNKNOWN.toString())) {
            btnKey = btnKey.substring(0, 3);
        }
    }
    if (btnKey != null) {
        button.setText(btnKey);
    }
    setUpOnClickListener(button, this);
    return button;
}
Also used : SymptomState(de.symeda.sormas.api.symptoms.SymptomState) YesNoUnknown(de.symeda.sormas.api.utils.YesNoUnknown) RadioButton(android.widget.RadioButton)

Example 5 with SymptomState

use of de.symeda.sormas.api.symptoms.SymptomState in project SORMAS-Project by hzi-braunschweig.

the class DtoHelperTest method testFillDto.

@Test
public void testFillDto() {
    RDCFEntities rdcf = creator.createRDCFEntities();
    RDCFEntities rdcf2 = creator.createRDCFEntities();
    rdcf2.facility.setType(FacilityType.LABORATORY);
    UserDto user = creator.createUser(rdcf, UserRole.ADMIN);
    // Test simple values
    {
        HealthConditionsDto targetDto = new HealthConditionsDto();
        HealthConditionsDto sourceDto = new HealthConditionsDto();
        // lead and other have different values
        targetDto.setTuberculosis(YesNoUnknown.YES);
        sourceDto.setTuberculosis(YesNoUnknown.NO);
        // lead has value, other has not
        targetDto.setAsplenia(YesNoUnknown.YES);
        // lead has no value, other has
        sourceDto.setDiabetes(YesNoUnknown.YES);
        DtoHelper.copyDtoValues(targetDto, sourceDto, false);
        // Check no values
        assertNull(targetDto.getHiv());
        // Check 'lead and other have different values'
        assertNotEquals(sourceDto.getTuberculosis(), targetDto.getTuberculosis());
        // Check 'lead has value, other has not'
        assertEquals(YesNoUnknown.YES, targetDto.getAsplenia());
        assertNull(sourceDto.getAsplenia());
        // Check 'lead has no value, other has'
        assertEquals(sourceDto.getDiabetes(), targetDto.getDiabetes());
    }
    // Test complex subDto
    {
        PersonDto person = creator.createPerson("First", "Last");
        CaseDataDto targetDto = creator.createCase(user.toReference(), person.toReference(), rdcf);
        CaseDataDto sourceDto = creator.createCase(user.toReference(), person.toReference(), rdcf);
        SymptomsDto targetSymptomsDto = targetDto.getSymptoms();
        SymptomsDto sourceSymptomsDto = sourceDto.getSymptoms();
        // lead and other have different values
        SymptomState abdominalPain = SymptomState.NO;
        targetSymptomsDto.setAbdominalPain(abdominalPain);
        sourceSymptomsDto.setAbdominalPain(SymptomState.UNKNOWN);
        // lead has value, other has not
        SymptomState alteredConsciousness = SymptomState.YES;
        targetSymptomsDto.setAlteredConsciousness(alteredConsciousness);
        // lead has no value, other has
        SymptomState anorexiaAppetiteLoss = SymptomState.UNKNOWN;
        sourceSymptomsDto.setAnorexiaAppetiteLoss(anorexiaAppetiteLoss);
        targetDto.setSymptoms(targetSymptomsDto);
        sourceDto.setSymptoms(sourceSymptomsDto);
        DtoHelper.copyDtoValues(targetDto, sourceDto, false);
        // Check no values
        assertNull(targetDto.getSymptoms().getBackache());
        // Check 'lead and other have different values'
        assertEquals(abdominalPain, targetDto.getSymptoms().getAbdominalPain());
        // Check 'lead has value, other has not'
        assertEquals(alteredConsciousness, targetDto.getSymptoms().getAlteredConsciousness());
        // Check 'lead has no value, other has'
        assertEquals(anorexiaAppetiteLoss, targetDto.getSymptoms().getAnorexiaAppetiteLoss());
    }
    // Test List
    {
        PersonDto person = creator.createPerson("First", "Last");
        CaseDataDto targetDto = creator.createCase(user.toReference(), person.toReference(), rdcf);
        CaseDataDto sourceDto = creator.createCase(user.toReference(), person.toReference(), rdcf);
        ExposureDto subDto1 = ExposureDto.build(ExposureType.TRAVEL);
        ExposureDto subDto2 = ExposureDto.build(ExposureType.TRAVEL);
        // lead and other have different values
        ArrayList<ExposureDto> targetList1 = new ArrayList<>();
        targetList1.add(subDto1);
        ArrayList<ExposureDto> sourceList1 = new ArrayList<>();
        sourceList1.add(subDto2);
        // lead has values, other has not
        ArrayList<ExposureDto> targetList2 = new ArrayList<>();
        targetList2.add(subDto1);
        targetList2.add(subDto2);
        // lead has no values, other has
        ArrayList<ExposureDto> sourceList2 = new ArrayList<>();
        sourceList2.add(subDto1);
        sourceList2.add(subDto2);
        // Check no values
        DtoHelper.copyDtoValues(targetDto, sourceDto, false);
        assertTrue(targetDto.getEpiData().getExposures().isEmpty());
        // Check 'lead has still same entries'
        targetDto.getEpiData().setExposures(targetList1);
        sourceDto.getEpiData().setExposures(sourceList1);
        String existingUuid = targetList1.get(0).getUuid();
        DtoHelper.copyDtoValues(targetDto, sourceDto, false);
        assertEquals(targetList1.size(), targetDto.getEpiData().getExposures().size());
        assertNotNull(targetDto.getEpiData().getExposures().get(0).getUuid());
        assertEquals(existingUuid, targetDto.getEpiData().getExposures().get(0).getUuid());
        assertNotEquals(existingUuid, sourceDto.getEpiData().getExposures().get(0).getUuid());
        // Check 'lead has value, other has not'
        targetDto.getEpiData().setExposures(targetList2);
        sourceDto.getEpiData().setExposures(null);
        DtoHelper.copyDtoValues(targetDto, sourceDto, false);
        assertNotNull(targetDto.getEpiData().getExposures().get(0).getUuid());
        assertEquals(targetList2.size(), targetDto.getEpiData().getExposures().size());
        assertEquals(targetList2.get(0).getUuid(), targetDto.getEpiData().getExposures().get(0).getUuid());
        assertEquals(targetList2.get(1).getUuid(), targetDto.getEpiData().getExposures().get(1).getUuid());
        // Check 'lead has no value, other has'
        targetDto.getEpiData().setExposures(null);
        sourceDto.getEpiData().setExposures(sourceList2);
        DtoHelper.copyDtoValues(targetDto, sourceDto, false);
        assertNotNull(targetDto.getEpiData().getExposures().get(0).getUuid());
        assertEquals(sourceList2.size(), targetDto.getEpiData().getExposures().size());
        assertNotEquals(sourceList2.get(0).getUuid(), targetDto.getEpiData().getExposures().get(0).getUuid());
        assertNotEquals(sourceList2.get(1).getUuid(), targetDto.getEpiData().getExposures().get(1).getUuid());
    }
    // test non-entity list
    {
        PersonDto person = creator.createPerson("First", "Last");
        CaseDataDto targetCaseDto = creator.createCase(user.toReference(), person.toReference(), rdcf);
        CaseDataDto sourceCaseDto = creator.createCase(user.toReference(), person.toReference(), rdcf);
        SampleDto sourceDto = creator.createSample(sourceCaseDto.toReference(), user.toReference(), rdcf2.facility);
        sourceDto.setPathogenTestingRequested(true);
        sourceDto.getRequestedPathogenTests().add(PathogenTestType.ANTIGEN_DETECTION);
        sourceDto.getRequestedPathogenTests().add(PathogenTestType.NEUTRALIZING_ANTIBODIES);
        SampleDto targetDto = SampleDto.build(user.toReference(), targetCaseDto.toReference());
        DtoHelper.copyDtoValues(targetDto, sourceDto, false);
        assertEquals(2, targetDto.getRequestedPathogenTests().size());
    }
    // test map
    {
        TestDataCreator.RDCF caseRdcf = creator.createRDCF();
        Map<ReinfectionDetail, Boolean> map1 = new EnumMap<>(ReinfectionDetail.class);
        map1.put(ReinfectionDetail.GENOME_SEQUENCE_CURRENT_INFECTION_KNOWN, true);
        map1.put(ReinfectionDetail.PREVIOUS_ASYMPTOMATIC_INFECTION, true);
        map1.put(ReinfectionDetail.LAST_PCR_DETECTION_NOT_RECENT, false);
        PersonDto person = creator.createPerson();
        CaseDataDto sourceCase = creator.createCase(user.toReference(), person.toReference(), caseRdcf);
        CaseDataDto targetCase = creator.createCase(user.toReference(), person.toReference(), caseRdcf);
        // Map must not be persisted because H2 can't map it to JSON
        sourceCase.setReinfectionDetails(map1);
        DtoHelper.copyDtoValues(targetCase, sourceCase, false);
        assertEquals(3, targetCase.getReinfectionDetails().size());
        sourceCase.getReinfectionDetails().put(ReinfectionDetail.PREVIOUS_ASYMPTOMATIC_INFECTION, false);
        sourceCase.getReinfectionDetails().put(ReinfectionDetail.TESTED_NEGATIVE_AFTER_PREVIOUS_INFECTION, true);
        DtoHelper.copyDtoValues(targetCase, sourceCase, false);
        assertEquals(4, targetCase.getReinfectionDetails().size());
        assertTrue(targetCase.getReinfectionDetails().get(ReinfectionDetail.PREVIOUS_ASYMPTOMATIC_INFECTION));
        DtoHelper.copyDtoValues(targetCase, sourceCase, true);
        assertEquals(4, targetCase.getReinfectionDetails().size());
        assertFalse(targetCase.getReinfectionDetails().get(ReinfectionDetail.PREVIOUS_ASYMPTOMATIC_INFECTION));
        sourceCase.setReinfectionDetails(null);
        DtoHelper.copyDtoValues(targetCase, sourceCase, false);
        assertEquals(4, targetCase.getReinfectionDetails().size());
        DtoHelper.copyDtoValues(targetCase, sourceCase, true);
        assertEquals(4, targetCase.getReinfectionDetails().size());
    }
}
Also used : SymptomsDto(de.symeda.sormas.api.symptoms.SymptomsDto) SymptomState(de.symeda.sormas.api.symptoms.SymptomState) CaseDataDto(de.symeda.sormas.api.caze.CaseDataDto) ReinfectionDetail(de.symeda.sormas.api.caze.ReinfectionDetail) PersonDto(de.symeda.sormas.api.person.PersonDto) UserDto(de.symeda.sormas.api.user.UserDto) ArrayList(java.util.ArrayList) HealthConditionsDto(de.symeda.sormas.api.clinicalcourse.HealthConditionsDto) RDCFEntities(de.symeda.sormas.backend.TestDataCreator.RDCFEntities) ExposureDto(de.symeda.sormas.api.exposure.ExposureDto) SampleDto(de.symeda.sormas.api.sample.SampleDto) Map(java.util.Map) EnumMap(java.util.EnumMap) AbstractBeanTest(de.symeda.sormas.backend.AbstractBeanTest) Test(org.junit.Test)

Aggregations

SymptomState (de.symeda.sormas.api.symptoms.SymptomState)10 SymptomsDto (de.symeda.sormas.api.symptoms.SymptomsDto)5 Field (java.lang.reflect.Field)4 RadioButton (android.widget.RadioButton)1 Button (com.vaadin.ui.Button)1 AbstractField (com.vaadin.v7.ui.AbstractField)1 DateField (com.vaadin.v7.ui.DateField)1 Field (com.vaadin.v7.ui.Field)1 TextField (com.vaadin.v7.ui.TextField)1 CaseDataDto (de.symeda.sormas.api.caze.CaseDataDto)1 ReinfectionDetail (de.symeda.sormas.api.caze.ReinfectionDetail)1 HealthConditionsDto (de.symeda.sormas.api.clinicalcourse.HealthConditionsDto)1 ExposureDto (de.symeda.sormas.api.exposure.ExposureDto)1 PersonDto (de.symeda.sormas.api.person.PersonDto)1 SampleDto (de.symeda.sormas.api.sample.SampleDto)1 UserDto (de.symeda.sormas.api.user.UserDto)1 YesNoUnknown (de.symeda.sormas.api.utils.YesNoUnknown)1 Case (de.symeda.sormas.app.backend.caze.Case)1 AbstractBeanTest (de.symeda.sormas.backend.AbstractBeanTest)1 RDCFEntities (de.symeda.sormas.backend.TestDataCreator.RDCFEntities)1