package liquibase.changelog.filter;
import liquibase.changelog.ChangeSet;
import liquibase.changelog.RanChangeSet;
import liquibase.util.ISODateFormat;
import liquibase.util.StringUtils;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ExecutedAfterChangeSetFilter implements ChangeSetFilter {
private final Date date;
private Set<String> changeLogsAfterDate = new HashSet<String>();
public ExecutedAfterChangeSetFilter(Date date, List<RanChangeSet> ranChangeSets) {
this.date = date;
for (RanChangeSet ranChangeSet : ranChangeSets) {
if (ranChangeSet.getDateExecuted() != null && ranChangeSet.getDateExecuted().getTime() > date.getTime()) {
changeLogsAfterDate.add(changeLogToString(ranChangeSet.getId(), ranChangeSet.getAuthor(), ranChangeSet.getChangeLog()));
}
}
}
private String changeLogToString(String id, String author, String changeLog) {
return id+":"+author+":"+changeLog;
}
@Override
public ChangeSetFilterResult accepts(ChangeSet changeSet) {
if (changeLogsAfterDate.contains(changeLogToString(changeSet.getId(), changeSet.getAuthor(), changeSet.getFilePath()))) {
return new ChangeSetFilterResult(true, "Change set ran after "+ new ISODateFormat().format(new java.sql.Timestamp(date.getTime())), this.getClass());
} else {
return new ChangeSetFilterResult(false, "Change set ran before "+ new ISODateFormat().format(new java.sql.Timestamp(date.getTime())), this.getClass());
}
}
}