/** * */ package org.gcube.portlets.user.invitefriends.client.validation; import java.util.HashSet; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Path; import javax.validation.metadata.ConstraintDescriptor; import org.gcube.portlets.user.invitefriends.client.validation.ValidationErrorsView.UserDetails; import com.google.gwt.activity.shared.AbstractActivity; import com.google.gwt.editor.client.EditorDriver; import com.google.gwt.event.shared.EventBus; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.validation.client.impl.PathImpl; /** * Showcase for ErrorEditors validation decoration of TextBoxes. * * @author ivangsa * */ public class ValidationErrorsActivity extends AbstractActivity implements ValidationErrorsView.Delegate { private ValidationErrorsView view; /** * @see com.google.gwt.activity.shared.Activity#start(com.google.gwt.user.client.ui.AcceptsOneWidget, com.google.gwt.event.shared.EventBus) */ @Override public void start(AcceptsOneWidget panel, EventBus eventBus) { view = new ValidationErrorsViewImpl(this); panel.setWidget(view); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public boolean onSendClick() { EditorDriver editorDriver = view.getEditorDriver(); UserDetails login = editorDriver.flush(); Set> violations = validate(login); /* This will decorate widgets implementing HasEditorErrors with validation messages */ return editorDriver.setConstraintViolations( (Set) violations); } private Set> validate(UserDetails user2InviteBean){ Set> violations = new HashSet>(); if(user2InviteBean.getEmail() == null || "".equals(user2InviteBean.getEmail().trim())) { violations.add(buildNotNullConstraintViolation(user2InviteBean, "email")); } else if (!isValidEmailAddress(user2InviteBean.getEmail())) { violations.add(buildInvalidEmailAddressConstraintViolation(user2InviteBean, "email")); } return violations; } private ConstraintViolation buildNotNullConstraintViolation(final UserDetails bean, final String path) { return new ConstraintViolation() { @Override public String getMessage() { return "must not be empty"; } @Override public String getMessageTemplate() { return null; } @Override public UserDetails getRootBean() { return bean; } @Override public Class getRootBeanClass() { return UserDetails.class; } @Override public Object getLeafBean() { return bean; } @Override public Path getPropertyPath() { return new PathImpl().append(path); } @Override public Object getInvalidValue() { return null; } @Override public ConstraintDescriptor getConstraintDescriptor() { return null; } }; } private ConstraintViolation buildInvalidEmailAddressConstraintViolation(final UserDetails bean, final String path) { return new ConstraintViolation() { @Override public String getMessage() { return "email address must be valid"; } @Override public String getMessageTemplate() { return null; } @Override public UserDetails getRootBean() { return bean; } @Override public Class getRootBeanClass() { return UserDetails.class; } @Override public Object getLeafBean() { return bean; } @Override public Path getPropertyPath() { return new PathImpl().append(path); } @Override public Object getInvalidValue() { return null; } @Override public ConstraintDescriptor getConstraintDescriptor() { return null; } }; } /** * * @param emailValue * @return */ private boolean isValidEmailAddress(String emailValue) { if(emailValue == null) return true; String emailPattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.(?:[a-zA-Z]{2,6})$"; boolean valid = false; if(emailValue.getClass().toString().equals(String.class.toString())) { valid = ((String)emailValue).matches(emailPattern); } else { valid = ((Object)emailValue).toString().matches(emailPattern); } return valid; } }