001package org.biopax.paxtools.impl.level3;
002
003import org.biopax.paxtools.model.BioPAXElement;
004import org.biopax.paxtools.model.level3.SequenceInterval;
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.ManyToOne;
015import javax.persistence.Transient;
016
017@Entity
018@Proxy(proxyClass = SequenceInterval.class)
019@Indexed
020@DynamicUpdate @DynamicInsert
021@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
022public class SequenceIntervalImpl extends SequenceLocationImpl
023        implements SequenceInterval {
024
025    private SequenceSite sequenceIntervalBegin;
026    private SequenceSite sequenceIntervalEnd;
027
028    public SequenceIntervalImpl() {
029    }
030
031    //
032    // utilityClass (BioPAXElement) interface implementation
033    //
034    ////////////////////////////////////////////////////////////////////////////
035    @Transient
036    public Class<? extends SequenceInterval> getModelInterface() {
037        return SequenceInterval.class;
038    }
039
040    protected boolean semanticallyEquivalent(BioPAXElement element) {
041        if (!(element instanceof SequenceInterval))
042            return false;
043
044        final SequenceInterval that = (SequenceInterval) element;
045        return
046          sequenceIntervalBegin != null &&
047          sequenceIntervalBegin.isEquivalent(that.getSequenceIntervalBegin()) &&
048          sequenceIntervalEnd != null &&
049          sequenceIntervalEnd.isEquivalent(that.getSequenceIntervalEnd());
050    }
051
052    public int equivalenceCode() {
053        int result = 29 + (sequenceIntervalBegin != null ?
054                sequenceIntervalBegin.equivalenceCode() : 0);
055        result = 29 * result +
056                (sequenceIntervalEnd != null ? sequenceIntervalEnd.equivalenceCode() :
057                        0);
058        return result;
059    }
060
061    //
062    // sequenceInterval interface implementation
063    //
064    ////////////////////////////////////////////////////////////////////////////
065    @ManyToOne(targetEntity = SequenceSiteImpl.class)//, cascade={CascadeType.ALL})
066    public SequenceSite getSequenceIntervalBegin() {
067        return sequenceIntervalBegin;
068    }
069
070    public void setSequenceIntervalBegin(SequenceSite sequenceIntervalBegin) {
071        this.sequenceIntervalBegin = sequenceIntervalBegin;
072    }
073
074    @ManyToOne(targetEntity = SequenceSiteImpl.class)//, cascade={CascadeType.ALL})
075    public SequenceSite getSequenceIntervalEnd() {
076        return sequenceIntervalEnd;
077    }
078
079    public void setSequenceIntervalEnd(SequenceSite sequenceIntervalEnd) {
080        this.sequenceIntervalEnd = sequenceIntervalEnd;
081    }
082
083    @Override
084    public String toString()
085    {
086        return this.getSequenceIntervalBegin()+"-"+this.getSequenceIntervalEnd();
087    }
088
089}
090