1818package de .symeda .sormas .ui .samples .diseasesection ;
1919
2020import java .util .Collection ;
21+ import java .util .HashMap ;
22+ import java .util .Map ;
2123
2224import com .vaadin .ui .CustomLayout ;
2325import com .vaadin .v7 .data .Property ;
@@ -42,6 +44,8 @@ public class TubeFieldHandler {
4244
4345 private final FieldGroup fieldGroup ;
4446 private final CustomLayout panel ;
47+ private final Map <String , Property .ValueChangeListener > numericListeners = new HashMap <>();
48+ private final Map <String , Property .ValueChangeListener > gt10Listeners = new HashMap <>();
4549
4650 public TubeFieldHandler (FieldGroup fieldGroup , CustomLayout panel ) {
4751 this .fieldGroup = fieldGroup ;
@@ -82,21 +86,31 @@ private void addTubePair(String numericId, String gt10Id) {
8286 gt10Field .setVisible (false );
8387 panel .addComponent (gt10Field , gt10Id );
8488
85- // numeric → auto-check GT10 when value > 10
86- numericField .addValueChangeListener (e -> handleNumericChange (numericId , gt10Id ));
89+ Property .ValueChangeListener numericListener = e -> handleNumericChange (numericId , gt10Id );
90+ numericField .addValueChangeListener (numericListener );
91+ numericListeners .put (numericId , numericListener );
8792
88- // GT10 checkbox → clear numeric if value contradicts the checkbox
89- gt10Field .addValueChangeListener (e -> handleGt10Change (e , numericId ));
93+ Property .ValueChangeListener gt10Listener = e -> handleGt10Change (e , numericId );
94+ gt10Field .addValueChangeListener (gt10Listener );
95+ gt10Listeners .put (gt10Id , gt10Listener );
9096 }
9197
9298 private void detachTubePair (String numericId , String gt10Id ) {
9399 Field <?> numericField = fieldGroup .getField (numericId );
94100 if (numericField != null ) {
101+ Property .ValueChangeListener listener = numericListeners .remove (numericId );
102+ if (listener != null ) {
103+ numericField .removeValueChangeListener (listener );
104+ }
95105 fieldGroup .unbind (numericField );
96106 panel .removeComponent (numericField );
97107 }
98108 Field <?> gt10Field = fieldGroup .getField (gt10Id );
99109 if (gt10Field != null ) {
110+ Property .ValueChangeListener listener = gt10Listeners .remove (gt10Id );
111+ if (listener != null ) {
112+ gt10Field .removeValueChangeListener (listener );
113+ }
100114 fieldGroup .unbind (gt10Field );
101115 panel .removeComponent (gt10Field );
102116 }
0 commit comments