001package co.codewizards.cloudstore.local.persistence;
002
003import javax.jdo.annotations.Discriminator;
004import javax.jdo.annotations.DiscriminatorStrategy;
005import javax.jdo.annotations.Index;
006import javax.jdo.annotations.Indices;
007import javax.jdo.annotations.Inheritance;
008import javax.jdo.annotations.InheritanceStrategy;
009import javax.jdo.annotations.NullValue;
010import javax.jdo.annotations.PersistenceCapable;
011import javax.jdo.annotations.Persistent;
012import javax.jdo.annotations.Queries;
013import javax.jdo.annotations.Query;
014
015@PersistenceCapable
016@Inheritance(strategy=InheritanceStrategy.NEW_TABLE)
017@Discriminator(strategy=DiscriminatorStrategy.VALUE_MAP)
018@Indices({
019        @Index(name="Modification_remoteRepository_localRevision", members={"remoteRepository", "localRevision"}),
020})
021@Queries({
022        @Query(name="getModificationsAfter_remoteRepository_localRevision", value="SELECT WHERE this.remoteRepository == :remoteRepository && this.localRevision > :localRevision"),
023        @Query(name="getModificationsBeforeOrEqual_remoteRepository_localRevision", value="SELECT WHERE this.remoteRepository == :remoteRepository && this.localRevision <= :localRevision")
024})
025public abstract class Modification extends Entity implements AutoTrackLocalRevision {
026
027        @Persistent(nullValue=NullValue.EXCEPTION)
028        private RemoteRepository remoteRepository;
029
030        private long localRevision;
031
032        /**
033         * Gets the remote repository to which this modification must be synced.
034         * @return the remote repository to which this modification must be synced.
035         */
036        public RemoteRepository getRemoteRepository() {
037                return remoteRepository;
038        }
039
040        public void setRemoteRepository(RemoteRepository remoteRepository) {
041                this.remoteRepository = remoteRepository;
042        }
043
044        @Override
045        public long getLocalRevision() {
046                return localRevision;
047        }
048        @Override
049        public void setLocalRevision(long revision) {
050                this.localRevision = revision;
051        }
052}