package net.thucydides.core.matchers; import ch.lambdaj.function.convert.Converter; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import static ch.lambdaj.Lambda.convert; import static net.thucydides.core.matchers.dates.BeanFields.fieldValueIn; class BeanUniquenessMatcher implements BeanCollectionMatcher { private final String fieldName; public BeanUniquenessMatcher(String fieldName) { this.fieldName = fieldName; } @Override public boolean matches(Object target) { return matches((Collection) target); //To change body of implemented methods use File | Settings | File Templates. } public <T> boolean matches(Collection<T> elements) { List<Object> allFieldValues = convert(elements, new FieldValueExtractor()); Set<Object> uniquefieldValues = new HashSet<Object>(); uniquefieldValues.addAll(allFieldValues); return (uniquefieldValues.size() == elements.size()); } public class FieldValueExtractor implements Converter<Object, Object> { @Override public Object convert(Object bean) { return fieldValueIn(bean).forField(fieldName); } } @Override public String toString() { return "each " + fieldName + " is different"; } }