// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.wiki;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
public class PageVersionPruner {
public static int daysTillVersionsExpire = 14;
public static void pruneVersions(FileSystemPage page, Collection<VersionInfo> versions) throws Exception {
List<VersionInfo> versionsList = makeSortedVersionList(versions);
if (versions.size() > 0) {
VersionInfo lastVersion = versionsList.get(versionsList.size() - 1);
GregorianCalendar expirationDate = makeVersionExpirationDate(lastVersion);
for (Iterator<VersionInfo> iterator = versionsList.iterator(); iterator.hasNext();) {
VersionInfo version = iterator.next();
removeVersionIfExpired(page, version, expirationDate);
}
}
}
private static List<VersionInfo> makeSortedVersionList(Collection<VersionInfo> versions) throws Exception {
List<VersionInfo> versionsList = new ArrayList<VersionInfo>(versions);
Collections.sort(versionsList);
return versionsList;
}
private static GregorianCalendar makeVersionExpirationDate(VersionInfo lastVersion) throws Exception {
Date dateOfLastVersion = lastVersion.getCreationTime();
GregorianCalendar expirationDate = new GregorianCalendar();
expirationDate.setTime(dateOfLastVersion);
expirationDate.add(Calendar.DAY_OF_MONTH, -(daysTillVersionsExpire));
return expirationDate;
}
private static void removeVersionIfExpired(FileSystemPage page, VersionInfo version, GregorianCalendar expirationDate) throws Exception {
Calendar thisDate = new GregorianCalendar();
thisDate.setTime(version.getCreationTime());
if (thisDate.before(expirationDate) || thisDate.equals(expirationDate))
page.removeVersion(version.getName());
}
}