ParameterConverter.java
package common.http;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import java.time.format.DateTimeParseException;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.OptionalInt;
import java.util.OptionalLong;
/**
* Classe di utilità che permette di accedere a parametri di un {@link HttpServletRequest} nel tipo desiderato
*/
public class ParameterConverter {
private final HttpServletRequest request;
/**
* Costruttore unico dell'oggetto.
* @param request L'oggetto {@link HttpServletRequest} rappresentante la richiesta in corso
*/
@Inject
public ParameterConverter(HttpServletRequest request){
this.request = request;
}
/**
* Restituisce il valore di un parametro di richiesta come intero
* @param parameterKey Una stringa che specifica il nome del parametro
* @return Un {@link OptionalInt} contenente l'intero; {@link OptionalInt#empty()} se il parametro
* non è stato trovato o se il parsing ha avuto esito negativo
* @see Integer#parseInt(String)
*/
public OptionalInt getIntParameter(String parameterKey){
String parameter = request.getParameter(parameterKey);
if(parameter == null || parameter.isBlank())
return OptionalInt.empty();
try{
return OptionalInt.of(Integer.parseInt(parameter.trim()));
} catch (NumberFormatException e){
return OptionalInt.empty();
}
}
/**
* Restituisce il valore di un parametro di richiesta come double
* @param parameterKey Una stringa che specifica il nome del parametro
* @return Un {@link OptionalDouble} contenente il double; {@link OptionalDouble#empty()} se il parametro
* non è stato trovato o se il parsing ha avuto esito negativo
* @see Double#parseDouble(String)
*/
public OptionalDouble getDoubleParameter(String parameterKey){
String parameter = request.getParameter(parameterKey);
if(parameter == null || parameter.isBlank())
return OptionalDouble.empty();
try{
return OptionalDouble.of(Double.parseDouble(parameter.trim()));
} catch (NumberFormatException e){
return OptionalDouble.empty();
}
}
/**
* Restituisce il valore di un parametro di richiesta come long
* @param parameterKey Una stringa che specifica il nome del parametro
* @return Un {@link OptionalLong} contenente il long; {@link OptionalLong#empty()} se il parametro
* non è stato trovato o se il parsing ha avuto esito negativo
* @see Long#parseLong(String)
*/
public OptionalLong getLongParameter(String parameterKey) {
String parameter = request.getParameter(parameterKey);
if (parameter == null || parameter.isBlank())
return OptionalLong.empty();
try {
return OptionalLong.of(Long.parseLong(parameter.trim()));
} catch (NumberFormatException e) {
return OptionalLong.empty();
}
}
/**
* Restituisce il valore di un parametro di richiesta come {@link LocalDate}. La conversione segue il formato "YYYY-mm-DD"
* @param parameterKey Una stringa che specifica il nome del parametro
* @return Un {@link Optional<LocalDate>} contenente l'oggetto; {@link Optional#empty()} se il parametro
* non è stato trovato o se il parsing ha avuto esito negativo
* @see LocalDate#parse(CharSequence)
*/
public Optional<LocalDate> getDateParameter(String parameterKey){
String parameter = request.getParameter(parameterKey);
if (parameter == null || parameter.isBlank())
return Optional.empty();
try {
return Optional.of(LocalDate.parse(parameter.trim()));
} catch (DateTimeParseException e) {
return Optional.empty();
}
}
}