123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package com.vaadin.tests.minitutorials.v70;
-
- import com.vaadin.legacy.data.validator.LegacyAbstractValidator;
- import com.vaadin.legacy.data.validator.LegacyEmailValidator;
- import com.vaadin.navigator.View;
- import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
- import com.vaadin.shared.ui.MarginInfo;
- import com.vaadin.ui.Alignment;
- import com.vaadin.ui.Button;
- import com.vaadin.ui.Button.ClickEvent;
- import com.vaadin.ui.CustomComponent;
- import com.vaadin.ui.PasswordField;
- import com.vaadin.ui.TextField;
- import com.vaadin.ui.VerticalLayout;
- import com.vaadin.ui.themes.Reindeer;
-
- public class SimpleLoginView extends CustomComponent
- implements View, Button.ClickListener {
-
- public static final String NAME = "login";
-
- private final TextField user;
-
- private final PasswordField password;
-
- private final Button loginButton;
-
- public SimpleLoginView() {
- setSizeFull();
-
- // Create the user input field
- user = new TextField("User:");
- user.setWidth("300px");
- user.setRequired(true);
- user.setInputPrompt("Your username (eg. joe@email.com)");
- user.addValidator(
- new LegacyEmailValidator("Username must be an email address"));
- user.setInvalidAllowed(false);
-
- // Create the password input field
- password = new PasswordField("Password:");
- password.setWidth("300px");
- password.addValidator(new PasswordValidator());
- password.setRequired(true);
- password.setValue("");
- password.setNullRepresentation("");
-
- // Create login button
- loginButton = new Button("Login", this);
-
- // Add both to a panel
- VerticalLayout fields = new VerticalLayout(user, password, loginButton);
- fields.setCaption(
- "Please login to access the application. (test@test.com/passw0rd)");
- fields.setSpacing(true);
- fields.setMargin(new MarginInfo(true, true, true, false));
- fields.setSizeUndefined();
-
- // The view root layout
- VerticalLayout viewLayout = new VerticalLayout(fields);
- viewLayout.setSizeFull();
- viewLayout.setComponentAlignment(fields, Alignment.MIDDLE_CENTER);
- viewLayout.setStyleName(Reindeer.LAYOUT_BLUE);
- setCompositionRoot(viewLayout);
- }
-
- @Override
- public void enter(ViewChangeEvent event) {
- // focus the username field when user arrives to the login view
- user.focus();
- }
-
- /*
- * Validator for validating the passwords
- */
- private static final class PasswordValidator
- extends LegacyAbstractValidator<String> {
-
- public PasswordValidator() {
- super("The password provided is not valid");
- }
-
- @Override
- protected boolean isValidValue(String value) {
- /*
- * Password must be at least 8 characters long and contain at least
- * one number
- */
- if (value != null
- && (value.length() < 8 || !value.matches(".*\\d.*"))) {
- return false;
- }
- return true;
- }
-
- @Override
- public Class<String> getType() {
- return String.class;
- }
- }
-
- @Override
- public void buttonClick(ClickEvent event) {
-
- /*
- * Validate the fields using the navigator. By using validors for the
- * fields we reduce the amount of queries we have to use to the database
- * for wrongly entered passwords
- */
- if (!user.isValid() || !password.isValid()) {
- return;
- }
-
- String username = user.getValue();
- String password = this.password.getValue();
-
- /*
- * Validate username and password with database here. For examples sake
- * I use a dummy username and password.
- */
- boolean isValid = username.equals("test@test.com")
- && password.equals("passw0rd");
-
- if (isValid) {
- // Store the current user in the service session
- getSession().setAttribute("user", username);
-
- // Navigate to main view
- getUI().getNavigator().navigateTo(SimpleLoginMainView.NAME);
-
- } else {
-
- // Wrong password clear the password field and refocuses it
- this.password.setValue(null);
- this.password.focus();
- }
- }
- }
|