package com.github.ruediste1.btrbck.dom; import java.nio.file.Path; import java.util.ArrayList; import java.util.UUID; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElementRef; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.joda.time.DateTime; import org.joda.time.Interval; import org.joda.time.Period; import com.google.common.base.Objects; /** * Represents a stream of snaphots. Streams live in a {@link StreamRepository}. */ @XmlRootElement public class Stream { /** * Unique ID of the stream */ @XmlTransient public UUID id; /** * Name of the stream */ @XmlTransient public String name; /** * Period during which all snapshots are retained */ @XmlAttribute @XmlJavaTypeAdapter(PeriodAdapter.class) public Period initialRetentionPeriod; /** * {@link StreamRepository} this stream is part of */ @XmlTransient public StreamRepository streamRepository; /** * History of {@link Snapshot}s and restore operations which were made in * this stream */ @XmlTransient public VersionHistory versionHistory; /** * The interval at which to create automatic snaphots */ @XmlAttribute @XmlJavaTypeAdapter(PeriodAdapter.class) public Period snapshotInterval; @XmlElementRef public final ArrayList<Retention> retentions = new ArrayList<>(); public Path getStreamConfigFile() { return getStreamMetaDirectory().resolve(name + ".xml"); } public Path getStreamUuidFile() { return getStreamMetaDirectory().resolve(name + ".id"); } public Path getStreamMetaDirectory() { return streamRepository.getBaseDirectory().resolve(name); } public Path getSnapshotsDir() { return getStreamMetaDirectory().resolve("snapshots"); } public Path getReceiveTempDir() { return getStreamMetaDirectory().resolve("receiveTmp"); } public Path getVersionHistoryFile() { return getStreamMetaDirectory().resolve("versions.xml"); } public Path getSnapshotSenderIdFile(String snapshotName) { return getSnapshotsDir().resolve(snapshotName + ".senderId"); } @Override public String toString() { return Objects.toStringHelper(this).add("id", id).add("name", name) .add("repo", streamRepository.rootDirectory.toAbsolutePath()) .toString(); } public Interval getInitialRetentionInterval(DateTime now) { return new Interval(initialRetentionPeriod, now); } }