package com.github.ruediste1.btrbck.dom; import java.nio.file.Path; import java.util.Comparator; import java.util.UUID; import org.joda.time.DateTime; import org.joda.time.format.ISODateTimeFormat; /** * Represents a snapshot of the working directory of a {@link Stream}. */ public class Snapshot { public static final Comparator<Snapshot> COMPARATOR_NR = new Comparator<Snapshot>() { @Override public int compare(Snapshot o1, Snapshot o2) { return Integer.compare(o1.nr, o2.nr); } }; /** * Number of the snapshot. The next snapshot number is determined by the * length of the {@link VersionHistory} of the {@link Stream} */ public int nr; /** * Instant the snapshot has been taken */ public DateTime date; /** * {@link Stream} the snapshot belongs to */ public Stream stream; public UUID senderStreamId; public Snapshot() {} public Snapshot(int nr, DateTime date, Stream stream) { super(); this.nr = nr; this.date = date; this.stream = stream; } public Path getSnapshotDir() { return stream.getSnapshotsDir().resolve(getSnapshotName()); } public String getSnapshotName() { return String.format("%d_%s", nr, date.toString(ISODateTimeFormat.dateTime())); } @Override public String toString() { return getSnapshotName(); } public static Snapshot parse(Stream stream, String name) { Snapshot snapshot = new Snapshot(); snapshot.stream = stream; int idx = name.indexOf("_"); snapshot.date = ISODateTimeFormat.dateTimeParser().withOffsetParsed() .parseDateTime(name.substring(idx + 1)); snapshot.nr = Integer.parseInt(name.substring(0, idx)); return snapshot; } }