package de.micromata.borgbutler.data; import de.micromata.borgbutler.config.BorgRepoConfig; import de.micromata.borgbutler.json.borg.BorgCache; import de.micromata.borgbutler.json.borg.BorgEncryption; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.SortedSet; import java.util.TreeSet; /** * Part of Borg json objects to refer objects to repositories. */ public class Repository implements Serializable { private static Logger log = LoggerFactory.getLogger(Repository.class); private static final long serialVersionUID = 1278802519434516280L; /** * The repo configured for borg. * * @see BorgRepoConfig#getRepo() */ String name; /** * A name describing this config. Only used for displaying purposes. This is automatically set with the name * of the repository configuration. * * @see BorgRepoConfig#getDisplayName() */ String displayName; private String id; /** * Date given by Borg server. */ private String lastModified; /** * Last date of getting this object from Borg server. */ private String lastCacheRefresh; private String location; private String securityDir; private BorgCache cache; private BorgEncryption encryption; /** * Might be null. */ private SortedSet archives; public Repository add(Archive archive) { synchronized (this) { if (this.archives == null) { this.archives = new TreeSet<>(); } } synchronized (this.archives) { this.archives.add(archive); } return this; } public Archive getArchive(String idOrName) { if (archives == null) { log.warn("Can't get archive '" + idOrName + "' from repository '" + name + "'. Archives not yet loaded or don't exist."); return null; } synchronized (this.archives) { for (Archive archive : archives) { if (StringUtils.equals(idOrName, archive.getId()) || StringUtils.equals(idOrName, archive.getName())) { return archive; } } } log.warn("Archive '" + idOrName + "' not found in repository '" + name + "'."); return null; } /** * Is borg list repo already called? * * @return */ public boolean isArchivesLoaded() { return CollectionUtils.isNotEmpty(archives); } public Collection getArchives() { if (this.archives == null) { return null; } synchronized (this.archives) { return Collections.unmodifiableSet(this.archives); } } public String getName() { return this.name; } public String getDisplayName() { return this.displayName; } public String getId() { return this.id; } public String getLastModified() { return this.lastModified; } public String getLastCacheRefresh() { return this.lastCacheRefresh; } public String getLocation() { return this.location; } public String getSecurityDir() { return this.securityDir; } public BorgCache getCache() { return this.cache; } public BorgEncryption getEncryption() { return this.encryption; } public void setName(String name) { this.name = name; } public void setDisplayName(String displayName) { this.displayName = displayName; } public void setId(String id) { this.id = id; } public void setLastModified(String lastModified) { this.lastModified = lastModified; } public void setLastCacheRefresh(String lastCacheRefresh) { this.lastCacheRefresh = lastCacheRefresh; } public void setLocation(String location) { this.location = location; } public void setSecurityDir(String securityDir) { this.securityDir = securityDir; } public void setCache(BorgCache cache) { this.cache = cache; } public void setEncryption(BorgEncryption encryption) { this.encryption = encryption; } public void setArchives(SortedSet archives) { this.archives = archives; } }