001package org.biopax.paxtools.impl.level3;
002
003import org.biopax.paxtools.model.BioPAXElement;
004import org.biopax.paxtools.model.level3.PositionStatusType;
005import org.biopax.paxtools.model.level3.SequenceSite;
006import org.hibernate.annotations.Cache;
007import org.hibernate.annotations.CacheConcurrencyStrategy;
008import org.hibernate.annotations.Proxy;
009import org.hibernate.annotations.DynamicInsert;
010import org.hibernate.annotations.DynamicUpdate; 
011import org.hibernate.search.annotations.Indexed;
012
013import javax.persistence.Entity;
014import javax.persistence.Enumerated;
015import javax.persistence.Transient;
016
017@Entity
018@Proxy(proxyClass= SequenceSite.class)
019@Indexed
020@DynamicUpdate @DynamicInsert
021@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
022public class SequenceSiteImpl extends SequenceLocationImpl implements SequenceSite
023{
024
025        private PositionStatusType positionStatus;
026        private int sequencePosition = UNKNOWN_INT;
027
028        public SequenceSiteImpl()
029    {
030        }
031
032        @Transient
033    public Class<? extends SequenceSite> getModelInterface()
034        {
035                return SequenceSite.class;
036        }
037
038        protected boolean semanticallyEquivalent(BioPAXElement element)
039        {
040                if(!(element instanceof SequenceSite))
041                        return false;
042                
043                final SequenceSite that = (SequenceSite) element;
044                return sequencePosition == that.getSequencePosition() &&
045                    positionStatus != null ?
046                                        positionStatus.equals(that.getPositionStatus()) :
047                                        that.getPositionStatus() == null;
048        }
049
050        public int equivalenceCode()
051        {
052                int result = 29 + sequencePosition;
053                result = 29 * result +
054                        (positionStatus != null ? positionStatus.hashCode() : 0);
055                return result;
056        }
057
058    @Override
059    public String toString()
060    {
061        return String.valueOf(this.getSequencePosition());
062    }
063
064    //
065        // sequenceSite interface implementation
066        //
067        ////////////////////////////////////////////////////////////////////////////
068
069        // Property POSITION-STATUS
070    @Enumerated
071        public PositionStatusType getPositionStatus()
072        {
073                return positionStatus;
074        }
075
076        public void setPositionStatus(PositionStatusType positionStatus)
077        {
078                this.positionStatus = positionStatus;
079        }
080
081    // Property sequence-POSITION
082    
083        public int getSequencePosition()
084        {
085                return sequencePosition;
086        }
087
088        public void setSequencePosition(int sequencePosition)
089        {
090                this.sequencePosition = sequencePosition;
091        }
092}