001package co.codewizards.cloudstore.local.persistence; 002 003import java.util.UUID; 004 005import javax.jdo.annotations.Discriminator; 006import javax.jdo.annotations.DiscriminatorStrategy; 007import javax.jdo.annotations.NullValue; 008import javax.jdo.annotations.PersistenceCapable; 009import javax.jdo.annotations.Persistent; 010import javax.jdo.annotations.Unique; 011 012/** 013 * A {@code Repository} represents a repository inside the database. 014 * <p> 015 * Every repository consists of a directory including all its sub-directories and files together with one 016 * meta-data-directory containing a database. Inside this database, the local repository itself is represented 017 * by a {@link LocalRepository} instance. 018 * <p> 019 * The local repository can be connected as a client to zero or more remote repositories. For each such remote 020 * repository there is one {@link RemoteRepository} instance in the database. 021 * @author Marco หงุ่ยตระกูล-Schulze - marco at codewizards dot co 022 */ 023@PersistenceCapable 024@Discriminator(strategy=DiscriminatorStrategy.VALUE_MAP) 025@Unique(name="Repository_repositoryId", members="repositoryId") 026public abstract class Repository extends Entity 027{ 028 @Persistent(nullValue=NullValue.EXCEPTION) 029 private String repositoryId; 030 031 private long revision; 032 033 @Persistent(nullValue=NullValue.EXCEPTION) 034 private byte[] publicKey; 035 036 public Repository() { 037 this(null); 038 } 039 040 protected Repository(UUID repositoryId) { 041 this.repositoryId = repositoryId == null ? UUID.randomUUID().toString() : repositoryId.toString(); 042 } 043 044 public UUID getRepositoryId() { 045 return UUID.fromString(repositoryId); 046 } 047 048 public long getRevision() { 049 return revision; 050 } 051 public void setRevision(long revision) { 052 this.revision = revision; 053 } 054 055 public byte[] getPublicKey() { 056 return publicKey; 057 } 058 059 public void setPublicKey(byte[] publicKey) { 060 this.publicKey = publicKey; 061 } 062}