001package org.biopax.paxtools.impl.level3;
002
003import org.biopax.paxtools.model.level3.NucleicAcidReference;
004import org.biopax.paxtools.model.level3.NucleicAcidRegionReference;
005import org.biopax.paxtools.model.level3.SequenceLocation;
006import org.biopax.paxtools.model.level3.SequenceRegionVocabulary;
007import org.biopax.paxtools.util.BPCollections;
008import org.hibernate.annotations.*;
009
010import javax.persistence.Entity;
011import javax.persistence.JoinTable;
012import javax.persistence.ManyToMany;
013import javax.persistence.ManyToOne;
014import java.util.Set;
015
016@Entity
017@Proxy(proxyClass= NucleicAcidReference.class)
018@DynamicUpdate @DynamicInsert
019@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
020public abstract class NucleicAcidRegionReferenceImpl extends NucleicAcidReferenceImpl
021                implements NucleicAcidRegionReference
022{
023
024        private SequenceLocation absoluteRegion;
025
026        private Set<SequenceRegionVocabulary> regionType;
027
028        private NucleicAcidReference containerEntityReference;
029
030        private Set<NucleicAcidReference> subRegionOf;
031
032        public NucleicAcidRegionReferenceImpl()
033        {
034                regionType = BPCollections.I.createSafeSet();
035                subRegionOf = BPCollections.I.createSafeSet();
036        }
037
038    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
039        @ManyToMany(targetEntity = NucleicAcidReferenceImpl.class, mappedBy = "subRegion")
040        public Set<NucleicAcidReference> getSubRegionOf()
041        {
042                return subRegionOf;
043        }
044
045        protected void setSubRegionOf(Set<NucleicAcidReference> subRegionOf)
046        {
047                this.subRegionOf = subRegionOf;
048        }
049
050
051        @ManyToOne(targetEntity = SequenceLocationImpl.class)
052        public SequenceLocation getAbsoluteRegion()
053        {
054                return this.absoluteRegion;
055        }
056
057        public void setAbsoluteRegion(SequenceLocation absoluteRegion)
058        {
059                this.absoluteRegion = absoluteRegion;
060
061        }
062
063        @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
064        @ManyToMany(targetEntity = SequenceRegionVocabularyImpl.class)
065        @JoinTable(name = "regionType")
066        public Set<SequenceRegionVocabulary> getRegionType()
067        {
068                return this.regionType;
069        }
070
071        public void addRegionType(SequenceRegionVocabulary regionType)
072        {
073                if (regionType != null) this.regionType.add(regionType);
074        }
075
076        public void removeRegionType(SequenceRegionVocabulary regionType)
077        {
078                if (regionType != null) this.regionType.remove(regionType);
079        }
080
081        protected void setRegionType(Set<SequenceRegionVocabulary> regionType)
082        {
083                this.regionType = regionType;
084        }
085
086}