package ru.hflabs.rcd.event.modify;
import com.google.common.base.Predicate;
import org.springframework.util.CollectionUtils;
import ru.hflabs.rcd.model.Historical;
import ru.hflabs.rcd.model.change.ChangeSet;
import ru.hflabs.rcd.model.change.Diff;
import ru.hflabs.rcd.model.change.History;
import java.util.Collection;
/**
* Класс <class>ChangeEvent</class> содержит информацию о событии изменения объектов
*
* @see ChangeSet
* @see History
*/
public class ChangeEvent extends ModifyEvent {
private static final long serialVersionUID = -9070933249467205777L;
public ChangeEvent(Object source, ChangeSet<?> changeSet) {
super(source, changeSet);
}
/**
* Выполняет фильтрацию измененных объектов по переданному предикату
*
* @param expectedClass ожидаемый класс объектов
* @param predicate предикат из коллекции изменений
* @return Возвращает коллекцию объектов, которые удовлетворяют предикату
*/
public <T extends Historical> Collection<T> getChangedByPredicate(Class<T> expectedClass, final Predicate<Collection<Diff>> predicate) {
return getChanged(expectedClass, new Predicate<T>() {
@Override
public boolean apply(T input) {
History history = input.getHistory();
return history != null &&
!CollectionUtils.isEmpty(history.getDiffs()) &&
predicate.apply(history.getDiffs());
}
});
}
}