package mireka.filter.local.table;
import mireka.address.Recipient;
import mireka.address.RemotePart;
import mireka.address.RemotePartContainingRecipient;
/**
* LocalRemoteCombinedRecipientSpecification combines a
* {@link LocalPartSpecification} with a {@link RemotePart} value, both must
* match to satisfy this specification.
*/
public class LocalRemoteCombinedRecipientSpecification implements
RecipientSpecification {
private LocalPartSpecification localPartSpecification;
private RemotePart remotePart;
public LocalRemoteCombinedRecipientSpecification(
LocalPartSpecification localPartSpecification, RemotePart remotePart) {
this.localPartSpecification = localPartSpecification;
this.remotePart = remotePart;
}
@Override
public boolean isSatisfiedBy(Recipient recipient) {
if (!localPartSpecification.isSatisfiedBy(recipient.localPart()))
return false;
if (!(recipient instanceof RemotePartContainingRecipient))
return false;
RemotePart recipientRemotePart =
((RemotePartContainingRecipient) recipient).getMailbox()
.getRemotePart();
return remotePart.equals(recipientRemotePart);
}
}