Project

General

Profile

« Previous | Next » 

Revision e7bf18d2

Added by Andreas Kohlbecker almost 7 years ago

showing validation errors in the popup editors

View differences:

src/main/java/eu/etaxonomy/vaadin/mvp/AbstractPopupEditor.java
8 8
*/
9 9
package eu.etaxonomy.vaadin.mvp;
10 10

  
11
import java.util.Map;
12

  
13
import org.apache.log4j.Logger;
14

  
15
import com.vaadin.data.Validator.InvalidValueException;
11 16
import com.vaadin.data.fieldgroup.BeanFieldGroup;
12 17
import com.vaadin.data.fieldgroup.FieldGroup.CommitEvent;
13 18
import com.vaadin.data.fieldgroup.FieldGroup.CommitException;
14 19
import com.vaadin.data.fieldgroup.FieldGroup.CommitHandler;
20
import com.vaadin.data.fieldgroup.FieldGroup.FieldGroupInvalidValueException;
21
import com.vaadin.server.AbstractErrorMessage.ContentMode;
22
import com.vaadin.server.ErrorMessage.ErrorLevel;
15 23
import com.vaadin.server.FontAwesome;
24
import com.vaadin.server.UserError;
25
import com.vaadin.ui.AbstractField;
16 26
import com.vaadin.ui.AbstractOrderedLayout;
17 27
import com.vaadin.ui.Alignment;
18 28
import com.vaadin.ui.Button;
......
126 136
    // ------------------------ event handler ------------------------ //
127 137

  
128 138
    private class SaveHandler implements CommitHandler {
139

  
129 140
        private static final long serialVersionUID = 2047223089707080659L;
130 141

  
131 142
        @Override
......
160 171
        try {
161 172
            fieldGroup.commit();
162 173
        } catch (CommitException e) {
163
            Notification.show("Error saving", Type.ERROR_MESSAGE);
174
            fieldGroup.getFields().forEach(f -> ((AbstractField)f).setValidationVisible(true));
175
            if(e.getCause() != null && e.getCause() instanceof FieldGroupInvalidValueException){
176
                FieldGroupInvalidValueException invalidValueException = (FieldGroupInvalidValueException)e.getCause();
177
                updateFieldNotifications(invalidValueException.getInvalidFields());
178
                Notification.show("The entered data in " + invalidValueException.getInvalidFields().size() + " fields is incomplete or invalid.");
179
            } else {
180
                Logger.getLogger(this.getClass()).error("Error saving", e);
181
                Notification.show("Error saving", Type.ERROR_MESSAGE);
182
            }
164 183
        }
165 184
    }
166 185

  
186
    /**
187
     * @param invalidFields
188
     */
189
    private void updateFieldNotifications(Map<Field<?>, InvalidValueException> invalidFields) {
190
        for(Field<?> f : invalidFields.keySet()){
191
            if(f instanceof AbstractField){
192
                String message = invalidFields.get(f).getHtmlMessage();
193
                ((AbstractField)f).setComponentError(new UserError(message, ContentMode.HTML, ErrorLevel.ERROR));
194
            }
195
        }
196

  
197
    }
198

  
167 199
    // ------------------------ field adding methods ------------------------ //
168 200

  
201

  
169 202
    protected TextField addTextField(String caption, String propertyId) {
170 203
        return addField(new TextField(caption), propertyId);
171 204
    }

Also available in: Unified diff