package mireka.filter.local.table; import java.util.Locale; import mireka.address.LocalPart; /** * This implementation does case-insensitive comparisons using the US locale. * The standard SMTP only allows US-ASCII characters. Note that case sensitive * mailbox names are also allowed by the standard. An extension allows non-ASCII * characters and case insensitivity, but doesn't specify rules for that. E.g. * the final delivery mailbox address must also specify a Locale. * * @see <a href="http://tools.ietf.org/html/rfc5336">RFC 5336 SMTP Extension for * Internationalized Email Addresses</a> */ public class CaseInsensitiveLocalPartSpecification implements LocalPartSpecification { private String unescapedText; private String unescapedTextInLowerCase; public CaseInsensitiveLocalPartSpecification() { // setValue() will be used to initialize this instance } public CaseInsensitiveLocalPartSpecification(String displayableName) { setValue(displayableName); } @Override public boolean isSatisfiedBy(LocalPart localPart) { String recipientLocalPartInLowerCase = localPart.displayableName().toLowerCase(Locale.US); return recipientLocalPartInLowerCase.equals(unescapedTextInLowerCase); } public void setValue(String displayableName) { this.unescapedText = displayableName; this.unescapedTextInLowerCase = displayableName.toLowerCase(Locale.US); } @Override public String toString() { return unescapedText; } }