001package org.biopax.paxtools.impl.level3; 002 003import org.biopax.paxtools.model.BioPAXElement; 004import org.biopax.paxtools.model.level3.BioSource; 005import org.biopax.paxtools.model.level3.SequenceEntityReference; 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.Field; 012import org.hibernate.search.annotations.Analyze; 013 014import javax.persistence.Entity; 015import javax.persistence.Lob; 016import javax.persistence.ManyToOne; 017 018@Entity 019@Proxy(proxyClass=SequenceEntityReference.class) 020@DynamicUpdate @DynamicInsert 021@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 022public abstract class SequenceEntityReferenceImpl extends EntityReferenceImpl 023 implements SequenceEntityReference 024{ 025 private BioSource organism; 026 private String sequence; 027 028 public SequenceEntityReferenceImpl() { 029 } 030 031 // 032 // referenceSequenceEntity interface implementation 033 // 034 //////////////////////////////////////////////////////////////////////////// 035 036 // Property organism 037 @ManyToOne(targetEntity = BioSourceImpl.class) 038 public BioSource getOrganism() 039 { 040 return organism; 041 } 042 043 public void setOrganism(BioSource organism) 044 { 045 this.organism = organism; 046 } 047 048 // Property sequence 049 050 @Lob 051 @Field(name=FIELD_SEQUENCE, analyze=Analyze.YES) 052 public String getSequence() 053 { 054 return sequence; 055 } 056 057 public void setSequence(String sequence) 058 { 059 this.sequence = sequence; 060 } 061 062 @Override 063 protected boolean semanticallyEquivalent(BioPAXElement element) { 064 if(!(element instanceof SequenceEntityReference)) return false; 065 SequenceEntityReference that = (SequenceEntityReference) element; 066 067 return getOrganism() != null 068 && getOrganism().isEquivalent(that.getOrganism()) 069 && getSequence() != null 070 && getSequence().equalsIgnoreCase(that.getSequence()); 071 072 } 073 074 @Override 075 public int equivalenceCode() 076 { 077 return this.organism==null || this.sequence==null? hashCode(): 078 this.organism.equivalenceCode()+17*this.sequence.hashCode(); 079 } 080}