package fr.openwide.core.basicapp.web.application.common.converter;
import java.util.Locale;
import org.apache.wicket.util.convert.ConversionException;
import org.apache.wicket.util.convert.converter.AbstractConverter;
import org.springframework.util.StringUtils;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import fr.openwide.core.basicapp.core.business.common.model.PhoneNumber;
import fr.openwide.core.commons.util.validator.PermissivePhoneNumberValidator;
public final class PhoneNumberConverter extends AbstractConverter<PhoneNumber> {
private static final long serialVersionUID = 7575610087030468757L;
@Override
public PhoneNumber convertToObject(String value, Locale locale) throws ConversionException {
String trimmedValue = StringUtils.trimAllWhitespace(value);
if (StringUtils.hasText(trimmedValue)) {
if (!PermissivePhoneNumberValidator.getInstance().isValid(trimmedValue)) {
throw newConversionException("Invalid phone number format", value, locale)
.setResourceKey("common.validator.phoneNumber");
}
return PhoneNumber.buildClean(trimmedValue);
}
return null;
}
@Override
public String convertToString(PhoneNumber value, Locale locale) {
if (value == null) {
return null;
}
if (value.isLocalFrench()) {
// Si le numéro est français, on ajoute un espace tous les 2 caractères
return Joiner.on(" ").join(Splitter.fixedLength(2).split(value.getValue()));
} else {
// Sinon on le renvoie brut
return value.getValue();
}
}
@Override
protected Class<PhoneNumber> getTargetType() {
return PhoneNumber.class;
}
}