Validator.java
package controller.utils;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public final class Validator {
/**
* List di errori.
*/
private final List<String> errors;
/**
* Request da controllare.
*/
private final HttpServletRequest request;
/**
* Pattern per INT.
*/
private static final Pattern INT_PATTERN = Pattern.compile("^\\d+$");
/**
* Pattern per DOUBLE.
*/
private static final Pattern DOUBLE_PATTERN =
Pattern.compile("^(-)?(\\d+)(\\.\\d+)?$");
/**
* Pattern per NAME.
*/
private static final Pattern NAME_PATTERN =
Pattern.compile("^[A-Za-zà-ź \\s]{2,50}$");
/**
* Pattern per EMAIL.
*/
private static final Pattern EMAIL_PATTERN =
Pattern.compile("^[a-zA-Z0-9.!#$%&’*+=?^_`{|}~-]{1,29}+"
+ "@[a-zA-Z0-9-]{1,29}+(?:\\.[a-zA-Z0-9-]+){1,10}$");
/**
* Pattern per PASSWORD.
*/
private static final Pattern PASSWORD_PATTERN =
Pattern.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)"
+ "(?=.*[@$!%*?&._])[A-Za-z\\d@$!%*?&._]{8,32}$");
/**
* Pattern per CODICE FISCALE.
*/
private static final Pattern CODICE_FISCALE_PATTERN =
Pattern.compile("^[A-Z]{6}[0-9]{2}[A-Z]"
+ "[0-9]{2}[A-Z][0-9]{3}[A-Z]$");
/**
* Pattern per NUMERO DI TELEFONO.
*/
private static final Pattern PHONE_PATTERN = Pattern.compile("^\\d{10}$");
/**
* Pattern per INDIRIZZO.
*/
private static final Pattern ADDRESS_PATTERN =
Pattern.compile("[a-zA-Z0-9\\s]{1,74}+,\\s[0-9]{1,5}$");
/**
* Pattern per CITY.
*/
private static final Pattern CITY_PATTERN =
Pattern.compile("^[A-Za-zà-ź \s]{2,50}$");
/**
* Pattern per CAP.
*/
private static final Pattern CAP_PATTERN = Pattern.compile("^[0-9]{5}$");
/**
* Costruttore.
*
* @param requestt set della request per pullare gli int.
*/
public Validator(final HttpServletRequest requestt) {
errors = new ArrayList<>();
this.request = requestt;
}
/**
* Inserisce message nella lista se la condition è false.
*
* @param condition condizione.
* @param message messaggio.
* @return true se condition è vera false altrimenti.
*/
private boolean gatherError(final boolean condition, final String message) {
if (condition) {
return true;
} else {
errors.add(message);
return false;
}
}
/**
* checka se value != null o !value.isBlank().
*
* @param value valore da checkare.
* @return true o false.
*/
public boolean required(final String value) {
return value != null && !value.isBlank();
}
/**
* assertMatch tra value e regxp con eventuale msg di errore.
*
* @param value valore.
* @param regexp regexp.
* @param msg msg di errore.
* @return true se matcha, altrimenti false.
*/
public boolean assertMatch(final String value,
final Pattern regexp, final String msg) {
String param = request.getParameter(value);
boolean condition = required(param) && regexp.matcher(param).matches();
return gatherError(condition, msg);
}
/**
* Verifica CAP.
*
* @param value valore da controllare.
* @param msg msg di errore.
* @return true se value rispetta la regexp, false altrimenti.
*/
public boolean assertCAP(final String value, final String msg) {
return assertMatch(value, CAP_PATTERN, msg);
}
/**
* Verifica City.
*
* @param value valore da controllare.
* @param msg msg di errore.
* @return true se value rispetta la regexp, false altrimenti.
*/
public boolean assertCity(final String value, final String msg) {
return assertMatch(value, CITY_PATTERN, msg);
}
/**
* Verifica Indirizzo.
*
* @param value valore da controllare.
* @param msg msg di errore.
* @return true se value rispetta la regexp, false altrimenti.
*/
public boolean assertIndirizzo(final String value, final String msg) {
return assertMatch(value, ADDRESS_PATTERN, msg);
}
/**
* Verifica int.
*
* @param value valore da controllare.
* @param msg msg di errore.
* @return true se value rispetta la regexp, false altrimenti.
*/
public boolean assertInt(final String value, final String msg) {
return assertMatch(value, INT_PATTERN, msg);
}
/**
* Verifica Password.
*
* @param value valore da controllare.
* @param msg msg di errore.
* @return true se value rispetta la regexp, false altrimenti.
*/
public boolean assertPassword(final String value, final String msg) {
return assertMatch(value, PASSWORD_PATTERN, msg);
}
/**
* Verifica Email.
*
* @param value valore da controllare.
* @param msg msg di errore.
* @return true se value rispetta la regexp, false altrimenti.
*/
public boolean assertEmail(final String value, final String msg) {
return assertMatch(value, EMAIL_PATTERN, msg);
}
/**
* Verifica Phone.
*
* @param value valore da controllare.
* @param msg msg di errore.
* @return true se value rispetta la regexp, false altrimenti.
*/
public boolean assertPhone(final String value, final String msg) {
return assertMatch(value, PHONE_PATTERN, msg);
}
/**
* Verifica Nome/Cognome.
*
* @param value valore da controllare.
* @param msg msg di errore.
* @return true se value rispetta la regexp, false altrimenti.
*/
public boolean assertNameSurname(final String value, final String msg) {
return assertMatch(value, NAME_PATTERN, msg);
}
/**
* Verifica CF.
*
* @param value valore da controllare.
* @param msg msg di errore.
* @return true se value rispetta la regexp, false altrimenti.
*/
public boolean assertCF(final String value, final String msg) {
return assertMatch(value, CODICE_FISCALE_PATTERN, msg);
}
/**
* Check se un bean può essere castato in modo sicuro.
*
* @param type Istanza del Tipo con cui verificare la compatibilità.
* @param attr Object da castare.
* @return true se attr corrisponde, false altrimenti.
*/
public boolean isValidBean(final Class type, final Object attr) {
return (type != null
&& attr != null
&& (attr.getClass().getSimpleName().equals(
type.getSimpleName())));
}
/**
* Check per tutti i parametri di utente.
*
* @return true se rispetta le regexp, altrimenti false.
*/
public boolean assertUtente() {
if (assertNameSurname("nome", "Errore Input Nome")
&& assertNameSurname("cognome",
"Errore Input Cognome")
&& assertEmail("email", "Errore Input Email")
&& assertCF("cf", "Errore Input CF")
&& assertPassword("password",
"Errore Input Password")
&& assertCAP("cap", "Errore Input CAP")
&& assertIndirizzo("indirizzo",
"Errore Input Indirizzo")
&& assertCity("citta", "Errore Input City")
&& assertPhone("telefono",
"Errore Input Trap Phone")) {
return true;
}
return false;
}
}