| /* |
| * Copyright 2010 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.sample.validation.client; |
| |
| import com.google.gwt.core.client.GWT; |
| import com.google.gwt.event.dom.client.ClickEvent; |
| import com.google.gwt.event.dom.client.KeyCodes; |
| import com.google.gwt.event.dom.client.KeyUpEvent; |
| import com.google.gwt.resources.client.CssResource; |
| import com.google.gwt.safehtml.shared.SafeHtml; |
| import com.google.gwt.sample.validation.shared.ClientGroup; |
| import com.google.gwt.sample.validation.shared.Person; |
| import com.google.gwt.uibinder.client.UiBinder; |
| import com.google.gwt.uibinder.client.UiField; |
| import com.google.gwt.uibinder.client.UiHandler; |
| import com.google.gwt.user.client.rpc.AsyncCallback; |
| import com.google.gwt.user.client.ui.Button; |
| import com.google.gwt.user.client.ui.Composite; |
| import com.google.gwt.user.client.ui.DialogBox; |
| import com.google.gwt.user.client.ui.HTML; |
| import com.google.gwt.user.client.ui.Label; |
| import com.google.gwt.user.client.ui.TextBox; |
| import com.google.gwt.user.client.ui.Widget; |
| |
| import java.util.Set; |
| |
| import javax.validation.ConstraintViolation; |
| import javax.validation.ConstraintViolationException; |
| import javax.validation.Validation; |
| import javax.validation.Validator; |
| import javax.validation.groups.Default; |
| |
| /** |
| * Display the Validation sample. |
| */ |
| public class ValidationView extends Composite { |
| interface MyStyle extends CssResource { |
| String error(); |
| } |
| |
| interface ValidationViewUiBinder extends UiBinder<Widget, ValidationView> { |
| } |
| |
| /** |
| * The message displayed to the user when the server cannot be reached or |
| * returns an error. |
| */ |
| private static final String SERVER_ERROR = "An error occurred while " |
| + "attempting to contact the server. Please check your network " |
| + "connection and try again."; |
| |
| private static ValidationViewUiBinder uiBinder = GWT.create(ValidationViewUiBinder.class); |
| |
| @UiField |
| Button closeButton; |
| |
| @UiField |
| DialogBox dialogBox; |
| |
| @UiField |
| Label errorLabel; |
| |
| @UiField |
| TextBox nameField; |
| |
| @UiField |
| Button sendButton; |
| |
| @UiField |
| HTML serverResponse; |
| |
| @UiField |
| MyStyle style; |
| |
| @UiField |
| Label textToServer; |
| |
| private final GreetingServiceAsync greetingService; |
| |
| private final Person person; |
| |
| public ValidationView(Person person, GreetingServiceAsync greetingService) { |
| |
| this.person = person; |
| |
| this.greetingService = greetingService; |
| initWidget(uiBinder.createAndBindUi(this)); |
| |
| nameField.setText(person.getName()); |
| } |
| |
| @UiHandler("closeButton") |
| public void doClick(ClickEvent e) { |
| dialogBox.hide(); |
| sendButton.setEnabled(true); |
| sendButton.setFocus(true); |
| } |
| |
| @UiHandler("sendButton") |
| void onClick(ClickEvent e) { |
| sendPersonToServer(); |
| } |
| |
| @UiHandler("sendButton") |
| void onKeyPress(KeyUpEvent e) { |
| if (e.getNativeKeyCode() == KeyCodes.KEY_ENTER) { |
| sendPersonToServer(); |
| } |
| } |
| |
| /** |
| * Send the person from the nameField to the server and wait for a response. |
| */ |
| private void sendPersonToServer() { |
| errorLabel.setText(""); |
| person.setName(nameField.getText()); |
| |
| Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); |
| Set<ConstraintViolation<Person>> violations = validator.validate(person, |
| Default.class, ClientGroup.class); |
| if (!violations.isEmpty()) { |
| StringBuffer errorMessage = new StringBuffer(); |
| for (ConstraintViolation<Person> constraintViolation : violations) { |
| if (errorMessage.length() == 0) { |
| errorMessage.append('\n'); |
| } |
| errorMessage.append(constraintViolation.getMessage()); |
| } |
| errorLabel.setText(errorMessage.toString()); |
| return; |
| } |
| sendButton.setEnabled(false); |
| textToServer.setText(person.getName()); |
| serverResponse.setText(""); |
| greetingService.greetServer(person, new AsyncCallback<SafeHtml>() { |
| public void onFailure(Throwable caught) { |
| if (caught instanceof ConstraintViolationException) { |
| ConstraintViolationException violationException = (ConstraintViolationException) caught; |
| Set<ConstraintViolation<?>> violations = violationException.getConstraintViolations(); |
| StringBuffer sb = new StringBuffer(); |
| for (ConstraintViolation<?> constraintViolation : violations) { |
| sb.append(constraintViolation.getPropertyPath().toString()) // |
| .append(":") // |
| .append(constraintViolation.getMessage()) // |
| .append("\n"); |
| } |
| errorLabel.setText(sb.toString()); |
| sendButton.setEnabled(true); |
| sendButton.setFocus(true); |
| return; |
| } |
| |
| // Show the RPC error message to the user |
| dialogBox.setText("Remote Procedure Call - Failure"); |
| serverResponse.addStyleName(style.error()); |
| serverResponse.setHTML(SERVER_ERROR); |
| dialogBox.center(); |
| closeButton.setFocus(true); |
| } |
| |
| public void onSuccess(SafeHtml result) { |
| dialogBox.setText("Remote Procedure Call"); |
| serverResponse.removeStyleName(style.error()); |
| serverResponse.setHTML(result); |
| dialogBox.center(); |
| closeButton.setFocus(true); |
| } |
| }); |
| } |
| } |