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}