001package org.biopax.paxtools.impl.level3;
002
003import org.biopax.paxtools.model.BioPAXElement;
004import org.biopax.paxtools.model.level3.ChemicalStructure;
005import org.biopax.paxtools.model.level3.StructureFormatType;
006import org.hibernate.annotations.Cache;
007import org.hibernate.annotations.CacheConcurrencyStrategy;
008import org.hibernate.annotations.DynamicInsert;
009import org.hibernate.annotations.DynamicUpdate;
010import org.hibernate.annotations.Proxy;
011import org.hibernate.search.annotations.Analyze;
012import org.hibernate.search.annotations.Field;
013import org.hibernate.search.annotations.Indexed;
014
015import javax.persistence.Column;
016import javax.persistence.Entity;
017import javax.persistence.Enumerated;
018import javax.persistence.Transient;
019
020@Entity
021@Proxy(proxyClass= ChemicalStructure.class)
022@Indexed
023@DynamicUpdate @DynamicInsert
024@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
025public class ChemicalStructureImpl extends L3ElementImpl implements ChemicalStructure
026{
027        private StructureFormatType structureFormat;
028
029        private String structureData;
030
031        public ChemicalStructureImpl() {
032        }
033
034        @Transient
035        public Class<? extends ChemicalStructure> getModelInterface()
036        {
037                return ChemicalStructure.class;
038        }
039
040        protected boolean semanticallyEquivalent(BioPAXElement element)
041        {
042                if(!(element instanceof ChemicalStructure))
043                        return false;
044                
045                final ChemicalStructure that = (ChemicalStructure) element;
046
047                return
048                        (structureData != null ?
049                                structureData.equals(that.getStructureData()) :
050                                that.getStructureData() == null)
051                                &&
052
053                                (structureFormat != null ?
054                                        structureFormat.equals(that.getStructureFormat()) :
055                                        that.getStructureFormat() == null);
056        }
057
058        public int equivalenceCode()
059        {
060                int result =
061                        29 + (structureFormat != null ? structureFormat.hashCode() : 0);
062                result = 29 * result +
063                        (structureData != null ? structureData.hashCode() : 0);
064                return result;
065        }
066
067        //
068        // ChemicalStructure interface implementation
069        //
070        /////////////////////////////////////////////////////////////////////////////
071
072        @Field(name=FIELD_KEYWORD, analyze=Analyze.YES)
073        @Column(columnDefinition="LONGTEXT")
074        public String getStructureData()
075        {
076                return structureData;
077        }
078
079        public void setStructureData(String structureData)
080        {
081                this.structureData = structureData;
082        }
083
084        @Enumerated
085        @Field(name=FIELD_KEYWORD, analyze=Analyze.YES)
086        public StructureFormatType getStructureFormat()
087        {
088                return structureFormat;
089        }
090
091        public void setStructureFormat(StructureFormatType structureFormat)
092        {
093                this.structureFormat = structureFormat;
094        }
095}