Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .mvn/jvm.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--sun-misc-unsafe-memory-access=allow
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>3.4.0</version>
<version>3.10.3</version>
<configuration>
<java>
<googleJavaFormat>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,19 @@
import com.DesktopApplicationClientJava.validation.LastNameValidator;
import com.DesktopApplicationClientJava.validation.PasswordValidator;
import com.DesktopApplicationClientJava.validation.ThirdNameValidator;
import com.DesktopApplicationClientJava.validation.utils.Validator;
import com.DesktopApplicationClientJava.validation.utils.FieldErrorDecoration;
import java.util.UUID;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import net.synedra.validatorfx.Validator;

public class LoginFormController extends Controller {
private final Validator validator = new Validator();

@FXML private TextField firstNameField;
@FXML private Label firstNameErrorLabel;
private FieldError firstNameError;
Expand Down Expand Up @@ -49,13 +52,35 @@ private void initialize() {
emailError = new FieldError(emailErrorLabel);
passwordError = new FieldError(passwordErrorLabel);

emailField.textProperty().addListener((o, a, b) -> emailError.hide());
passwordField.textProperty().addListener((o, a, b) -> passwordError.hide());
setupValidation();
}

private void setupValidation() {
FirstNameValidator.createCheck(validator, firstNameField.textProperty())
.decoratingWith(FieldErrorDecoration.forError(firstNameError))
.decorates(firstNameField)
.immediateClear();
LastNameValidator.createCheck(validator, lastNameField.textProperty())
.decoratingWith(FieldErrorDecoration.forError(lastNameError))
.decorates(lastNameField)
.immediateClear();
ThirdNameValidator.createCheck(validator, thirdNameField.textProperty())
.decoratingWith(FieldErrorDecoration.forError(thirdNameError))
.decorates(thirdNameField)
.immediateClear();
EmailValidator.createCheck(validator, emailField.textProperty())
.decoratingWith(FieldErrorDecoration.forError(emailError))
.decorates(emailField)
.immediateClear();
PasswordValidator.createCheck(validator, passwordField.textProperty())
.decoratingWith(FieldErrorDecoration.forError(passwordError))
.decorates(passwordField)
.immediateClear();
}

@FXML
private void onSubmit(ActionEvent event) {
if (!isValid()) return;
if (!validator.validate()) return;

User user =
authenticate(firstNameField.getText(), lastNameField.getText(), emailField.getText());
Expand All @@ -65,45 +90,6 @@ private void onSubmit(ActionEvent event) {
navigator.goTo("/fxml/Search.fxml");
}

private boolean isValid() {
return isFirstNameValid()
& isLastNameValid()
& isThirdNameValid()
& isEmailValid()
& isPasswordValid();
}

private boolean isFirstNameValid() {
return isFieldValid(firstNameField, new FirstNameValidator(), firstNameError);
}

private boolean isLastNameValid() {
return isFieldValid(lastNameField, new LastNameValidator(), lastNameError);
}

private boolean isThirdNameValid() {
return isFieldValid(thirdNameField, new ThirdNameValidator(), thirdNameError);
}

private boolean isEmailValid() {
return isFieldValid(emailField, new EmailValidator(), emailError);
}

private boolean isPasswordValid() {
return isFieldValid(passwordField, new PasswordValidator(), passwordError);
}

private boolean isFieldValid(TextField field, Validator validator, FieldError errorLabel) {
String input = field.getText();
var error = validator.isValid(input);
if (error == null) {
errorLabel.hide();
return true;
}
errorLabel.show(error);
return false;
}

private User authenticate(String firstName, String lastName, String email) {
return new User(UUID.randomUUID(), email, Role.USER, firstName, lastName, true);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.DesktopApplicationClientJava.validation;

import com.DesktopApplicationClientJava.validation.utils.AbstractValidator;
import com.DesktopApplicationClientJava.validation.utils.ErrorMessages;
import com.DesktopApplicationClientJava.validation.utils.ValidatorHelpers;
import javafx.beans.value.ObservableValue;
import net.synedra.validatorfx.Check;
import net.synedra.validatorfx.Validator;

public class EmailValidator extends AbstractValidator {
public final class EmailValidator {
public static final String FIELD_NAME = "Почта";
public static final int MIN_EMAIL_LENGTH = 5;
public static final int MAX_EMAIL_LENGTH = 100;
private static final String KEY = "value";

public String isValid(String input) {
private EmailValidator() {}

public static String validate(String input) {
if (ValidatorHelpers.isEmpty(input)) return ErrorMessages.Required;
if (ValidatorHelpers.isShorterThan(input, MIN_EMAIL_LENGTH))
return ErrorMessages.MinLength(FIELD_NAME, MIN_EMAIL_LENGTH);
Expand All @@ -18,4 +23,15 @@ public String isValid(String input) {
if (!ValidatorHelpers.includes(input, "@")) return ErrorMessages.IncorrectFormat;
return null;
}

public static void check(Check.Context context) {
String error = validate(context.get(KEY));
if (error != null) {
context.error(error);
}
}

public static Check createCheck(Validator validator, ObservableValue<String> property) {
return validator.createCheck().dependsOn(KEY, property).withMethod(EmailValidator::check);
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
package com.DesktopApplicationClientJava.validation;

import com.DesktopApplicationClientJava.validation.utils.AbstractValidator;
import com.DesktopApplicationClientJava.validation.utils.ErrorMessages;
import com.DesktopApplicationClientJava.validation.utils.ValidatorHelpers;
import javafx.beans.value.ObservableValue;
import net.synedra.validatorfx.Check;
import net.synedra.validatorfx.Validator;

public class FirstNameValidator extends AbstractValidator {
public final class FirstNameValidator {
public static final String FIELD_NAME = "Имя";
private static final int MIN_LENGTH = 2;
private static final String KEY = "value";

public String isValid(String input) {
private FirstNameValidator() {}

public static String validate(String input) {
if (ValidatorHelpers.isEmpty(input)) return ErrorMessages.Required;
if (ValidatorHelpers.isShorterThan(input, MIN_LENGTH))
return ErrorMessages.MinLength(FIELD_NAME, MIN_LENGTH);
return null;
}

public static void check(Check.Context context) {
String error = validate(context.get(KEY));
if (error != null) {
context.error(error);
}
}

public static Check createCheck(Validator validator, ObservableValue<String> property) {
return validator.createCheck().dependsOn(KEY, property).withMethod(FirstNameValidator::check);
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
package com.DesktopApplicationClientJava.validation;

import com.DesktopApplicationClientJava.validation.utils.AbstractValidator;
import com.DesktopApplicationClientJava.validation.utils.ErrorMessages;
import com.DesktopApplicationClientJava.validation.utils.ValidatorHelpers;
import javafx.beans.value.ObservableValue;
import net.synedra.validatorfx.Check;
import net.synedra.validatorfx.Validator;

public class LastNameValidator extends AbstractValidator {
public final class LastNameValidator {
public static final String FIELD_NAME = "Фамилия";
public static final int MIN_LENGTH = 2;
private static final String KEY = "value";

public String isValid(String input) {
private LastNameValidator() {}

public static String validate(String input) {
if (ValidatorHelpers.isEmpty(input)) return ErrorMessages.Required;
if (ValidatorHelpers.isShorterThan(input, MIN_LENGTH))
return ErrorMessages.MinLength(FIELD_NAME, MIN_LENGTH);
return null;
}

public static Check createCheck(Validator validator, ObservableValue<String> property) {
return validator.createCheck().dependsOn(KEY, property).withMethod(LastNameValidator::check);
}

public static void check(Check.Context context) {
String error = validate(context.get(KEY));
if (error != null) {
context.error(error);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,36 @@
package com.DesktopApplicationClientJava.validation;

import com.DesktopApplicationClientJava.validation.utils.AbstractValidator;
import com.DesktopApplicationClientJava.validation.utils.ErrorMessages;
import com.DesktopApplicationClientJava.validation.utils.ValidatorHelpers;
import javafx.beans.value.ObservableValue;
import net.synedra.validatorfx.Check;
import net.synedra.validatorfx.Validator;

public class PasswordValidator extends AbstractValidator {
public final class PasswordValidator {
public static final String FIELD_NAME = "Пароль";
public static final int MIN_LENGTH = 8;
public static final int MAX_LENGTH = 64;
private static final String KEY = "value";

public String isValid(String input) {
private PasswordValidator() {}

public static String validate(String input) {
if (ValidatorHelpers.isEmpty(input)) return ErrorMessages.Required;
if (ValidatorHelpers.isShorterThan(input, MIN_LENGTH))
return ErrorMessages.MinLength(FIELD_NAME, MIN_LENGTH);
if (ValidatorHelpers.isLongerThan(input, MAX_LENGTH))
return ErrorMessages.MaxLength(FIELD_NAME, MAX_LENGTH);
return null;
}

public static void check(Check.Context context) {
String error = validate(context.get(KEY));
if (error != null) {
context.error(error);
}
}

public static Check createCheck(Validator validator, ObservableValue<String> property) {
return validator.createCheck().dependsOn(KEY, property).withMethod(PasswordValidator::check);
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,30 @@
package com.DesktopApplicationClientJava.validation;

import com.DesktopApplicationClientJava.validation.utils.AbstractValidator;
import com.DesktopApplicationClientJava.validation.utils.ErrorMessages;
import com.DesktopApplicationClientJava.validation.utils.ValidatorHelpers;
import javafx.beans.value.ObservableValue;
import net.synedra.validatorfx.Check;
import net.synedra.validatorfx.Validator;

public class ThirdNameValidator extends AbstractValidator {
public final class ThirdNameValidator {
public static final String FIELD_NAME = "Отчество";
private static final String KEY = "value";

@Override
public String isValid(String input) {
private ThirdNameValidator() {}

public static String validate(String input) {
if (ValidatorHelpers.isEmpty(input)) return ErrorMessages.Required;
return null;
}

public static void check(Check.Context context) {
String error = validate(context.get(KEY));
if (error != null) {
context.error(error);
}
}

public static Check createCheck(Validator validator, ObservableValue<String> property) {
return validator.createCheck().dependsOn(KEY, property).withMethod(ThirdNameValidator::check);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.DesktopApplicationClientJava.validation.utils;

import com.DesktopApplicationClientJava.utils.FieldError;
import java.util.function.Function;
import javafx.scene.Node;
import net.synedra.validatorfx.Decoration;
import net.synedra.validatorfx.ValidationMessage;

public final class FieldErrorDecoration {
private FieldErrorDecoration() {}

public static Function<ValidationMessage, Decoration> forError(FieldError error) {
return message ->
new Decoration() {
@Override
public void add(Node target) {
error.show(message.getText());
}

@Override
public void remove(Node target) {
error.hide();
}
};
}
}

This file was deleted.

Loading
Loading