package fitnesse.wiki.fs; import fitnesse.wiki.VersionInfo; import fitnesse.util.Clock; import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ZipFileVersionInfo extends VersionInfo { public static final Pattern COMPEX_NAME_PATTERN = Pattern.compile("(?:([a-zA-Z][^\\-]*)-)?(?:\\d+-)?(\\d{14})"); public static SimpleDateFormat makeVersionTimeFormat() { //SimpleDateFormat is not thread safe, so we need to create each instance independently. return new SimpleDateFormat("yyyyMMddHHmmss"); } private final File file; public ZipFileVersionInfo(String complexName, String author, Date creationTime, File file) { super(complexName, author, creationTime); this.file = file; } public static ZipFileVersionInfo makeVersionInfo(File file) { String complexName = makeVersionName(file); Matcher match = COMPEX_NAME_PATTERN.matcher(complexName); String author = ""; Date creationTime = Clock.currentDate(); if (match.find()) { author = match.group(1); if (author == null) author = ""; try { creationTime = makeVersionTimeFormat().parse(match.group(2)); } catch (ParseException e) { throw new IllegalStateException(e); } } return new ZipFileVersionInfo(complexName, author, creationTime, file); } private static String makeVersionName(final File file) { final String name = file.getName(); return name.substring(0, name.length() - 4); } public File getFile() { return file; } }