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.SmallMoleculeReference; 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.Boost; 012import org.hibernate.search.annotations.Field; 013import org.hibernate.search.annotations.Analyze; 014import org.hibernate.search.annotations.Indexed; 015import org.hibernate.search.annotations.Store; 016 017import javax.persistence.Entity; 018import javax.persistence.ManyToOne; 019import javax.persistence.Transient; 020 021@Entity 022@Proxy(proxyClass= SmallMoleculeReference.class) 023@Indexed 024@DynamicUpdate @DynamicInsert 025@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 026public class SmallMoleculeReferenceImpl extends EntityReferenceImpl implements SmallMoleculeReference 027{ 028 private String chemicalFormula; 029 private float molecularWeight = UNKNOWN_FLOAT; 030 private ChemicalStructure structure; 031 032 033 public SmallMoleculeReferenceImpl() { 034 } 035 036 // 037 // utilityClass interface implementation 038 // 039 //////////////////////////////////////////////////////////////////////////// 040 041 @Override @Transient 042 public Class<? extends SmallMoleculeReference> getModelInterface() 043 { 044 return SmallMoleculeReference.class; 045 } 046 047 048 049 @Field(name=FIELD_KEYWORD, store=Store.YES, analyze=Analyze.YES) 050 @Boost(1.1f) 051 public String getChemicalFormula() 052 { 053 return chemicalFormula; 054 } 055 056 public void setChemicalFormula(String formula) 057 { 058 chemicalFormula = formula; 059 } 060 061 // Property MOLECULAR-WEIGHT 062 063 public float getMolecularWeight() 064 { 065 return molecularWeight; 066 } 067 068 public void setMolecularWeight(float molecularWeight) 069 { 070 this.molecularWeight = molecularWeight; 071 } 072 073 // Property structure 074 @ManyToOne(targetEntity = ChemicalStructureImpl.class)//, cascade={CascadeType.ALL}) 075 public ChemicalStructure getStructure() 076 { 077 return structure; 078 } 079 080 public void setStructure(ChemicalStructure structure) 081 { 082 this.structure = structure; 083 } 084 085 @Override 086 protected boolean semanticallyEquivalent(BioPAXElement element) { 087 if(!(element instanceof SmallMoleculeReference)) return false; 088 SmallMoleculeReference that = (SmallMoleculeReference) element; 089 return (getChemicalFormula() != null 090 ? getChemicalFormula().equalsIgnoreCase(that.getChemicalFormula()) 091 : that.getChemicalFormula() == null) 092 && (getMolecularWeight() == that.getMolecularWeight()) 093 && (getStructure() != null 094 ? getStructure().isEquivalent(that.getStructure()) 095 : that.getStructure() == null) 096 && super.semanticallyEquivalent(element); 097 } 098}