3434import java .util .ArrayList ;
3535import java .util .Arrays ;
3636import java .util .Comparator ;
37+ import java .util .HashMap ;
3738import java .util .List ;
39+ import java .util .Map ;
40+ import java .util .Optional ;
3841import java .util .Set ;
3942import java .util .function .Predicate ;
4043import java .util .stream .Collectors ;
4548import com .vaadin .shared .ui .MarginInfo ;
4649import com .vaadin .ui .Alignment ;
4750import com .vaadin .ui .Button ;
51+ import com .vaadin .ui .Component ;
4852import com .vaadin .ui .HorizontalLayout ;
4953import com .vaadin .ui .Image ;
5054import com .vaadin .ui .Label ;
@@ -113,6 +117,8 @@ public class SymptomsForm extends AbstractEditForm<SymptomsDto> {
113117 private static final String SYMPTOMS_HINT_LOC = "symptomsHintLoc" ;
114118 private static final String COMPLICATIONS_HEADING = "complicationsHeading" ;
115119
120+ private static Map <String , List <String >> symptomGroupMap = new HashMap ();
121+
116122 //@formatter:off
117123 private static final String HTML_LAYOUT =
118124 loc (CLINICAL_MEASUREMENTS_HEADING_LOC ) +
@@ -124,22 +130,14 @@ public class SymptomsForm extends AbstractEditForm<SymptomsDto> {
124130 //XXX #1620 fluidColumnLoc?
125131 fluidColumn (8 , 0 , loc (SYMPTOMS_HINT_LOC ))) +
126132 fluidRow (fluidColumn (8 ,4 , locCss (CssStyles .ALIGN_RIGHT ,BUTTONS_LOC )))+
127- loc (GENERAL_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
128- createSymptomGroupLayout (SymptomGroup .GENERAL ) +
129- loc (RESPIRATORY_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
130- createSymptomGroupLayout (SymptomGroup .RESPIRATORY ) +
131- loc (CARDIOVASCULAR_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
132- createSymptomGroupLayout (SymptomGroup .CARDIOVASCULAR ) +
133- loc (GASTROINTESTINAL_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
134- createSymptomGroupLayout (SymptomGroup .GASTROINTESTINAL ) +
135- loc (URINARY_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
136- createSymptomGroupLayout (SymptomGroup .URINARY ) +
137- loc (NERVOUS_SYSTEM_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
138- createSymptomGroupLayout (SymptomGroup .NERVOUS_SYSTEM ) +
139- loc (SKIN_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
140- createSymptomGroupLayout (SymptomGroup .SKIN ) +
141- loc (OTHER_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
142- createSymptomGroupLayout (SymptomGroup .OTHER ) +
133+ createSymptomGroupLayout (SymptomGroup .GENERAL , GENERAL_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
134+ createSymptomGroupLayout (SymptomGroup .RESPIRATORY , RESPIRATORY_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
135+ createSymptomGroupLayout (SymptomGroup .CARDIOVASCULAR , CARDIOVASCULAR_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
136+ createSymptomGroupLayout (SymptomGroup .GASTROINTESTINAL , GASTROINTESTINAL_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
137+ createSymptomGroupLayout (SymptomGroup .URINARY , URINARY_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
138+ createSymptomGroupLayout (SymptomGroup .NERVOUS_SYSTEM , NERVOUS_SYSTEM_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
139+ createSymptomGroupLayout (SymptomGroup .SKIN , SKIN_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
140+ createSymptomGroupLayout (SymptomGroup .OTHER , OTHER_SIGNS_AND_SYMPTOMS_HEADING_LOC ) +
143141 locsCss (VSPACE_3 , PATIENT_ILL_LOCATION , SYMPTOMS_COMMENTS ) +
144142 fluidRowLocsCss (VSPACE_3 , ONSET_SYMPTOM , ONSET_DATE ) +
145143 loc (COMPLICATIONS_HEADING ) +
@@ -155,7 +153,7 @@ public class SymptomsForm extends AbstractEditForm<SymptomsDto> {
155153 );
156154 //@formatter:on
157155
158- private static String createSymptomGroupLayout (SymptomGroup symptomGroup ) {
156+ private static String createSymptomGroupLayout (SymptomGroup symptomGroup , String loc ) {
159157
160158 final Predicate <java .lang .reflect .Field > groupSymptoms =
161159 field -> field .isAnnotationPresent (SymptomGrouping .class ) && field .getAnnotation (SymptomGrouping .class ).value () == symptomGroup ;
@@ -165,12 +163,13 @@ private static String createSymptomGroupLayout(SymptomGroup symptomGroup) {
165163 .sorted (Comparator .comparing (fieldName -> I18nProperties .getPrefixCaption (I18N_PREFIX , fieldName )))
166164 .collect (Collectors .toList ());
167165
168- return fluidRow (
166+ symptomGroupMap .put (loc , symptomLocations );
167+
168+ return loc (loc ) + fluidRow (
169169 fluidColumn (6 , -1 , locsCss (VSPACE_3 , new ArrayList <>(symptomLocations .subList (0 , symptomLocations .size () / 2 )))),
170170 fluidColumn (6 , 0 , locsCss (VSPACE_3 , new ArrayList <>(symptomLocations .subList (symptomLocations .size () / 2 , symptomLocations .size ())))));
171171 }
172172
173-
174173 private final CaseDataDto caze ;
175174 private final Disease disease ;
176175 private final PersonDto person ;
@@ -718,6 +717,14 @@ protected void addFields() {
718717 getFieldGroup ().getField (PATIENT_ILL_LOCATION ).setVisible (false );
719718 }
720719
720+ symptomGroupMap .forEach ((location , strings ) -> {
721+ final Component groupLabel = getContent ().getComponent (location );
722+ final Optional <String > groupHasVisibleSymptom = strings .stream ().filter (s -> getFieldGroup ().getField (s ).isVisible ()).findAny ();
723+ if (!groupHasVisibleSymptom .isPresent ()) {
724+ groupLabel .setVisible (false );
725+ }
726+ });
727+
721728 if (isEditableAllowed (OTHER_HEMORRHAGIC_SYMPTOMS_TEXT )) {
722729 FieldHelper .setRequiredWhen (
723730 getFieldGroup (),
@@ -788,11 +795,12 @@ protected void addFields() {
788795 getContent ().addComponent (buttonsLayout , BUTTONS_LOC );
789796 }
790797
791- private Label createLabel (String text , String h4 , String generalSignsAndSymptomsHeadingLoc ) {
792- final Label generalSymptomsHeadingLabel = new Label (text );
793- generalSymptomsHeadingLabel .addStyleName (h4 );
794- getContent ().addComponent (generalSymptomsHeadingLabel , generalSignsAndSymptomsHeadingLoc );
795- return generalSymptomsHeadingLabel ;
798+ private Label createLabel (String text , String h4 , String location ) {
799+ final Label label = new Label (text );
800+ label .setId (text );
801+ label .addStyleName (h4 );
802+ getContent ().addComponent (label , location );
803+ return label ;
796804 }
797805
798806 @ Override
0 commit comments