001package org.biopax.paxtools.impl.level3; 002 003import org.biopax.paxtools.model.level3.Entity; 004import org.biopax.paxtools.model.level3.*; 005import org.biopax.paxtools.util.BPCollections; 006import org.biopax.paxtools.util.IllegalBioPAXArgumentException; 007import org.hibernate.annotations.*; 008import org.hibernate.search.annotations.Indexed; 009 010import javax.persistence.JoinTable; 011import javax.persistence.ManyToMany; 012import javax.persistence.ManyToOne; 013import javax.persistence.Transient; 014import java.util.Set; 015 016 017@javax.persistence.Entity 018@Proxy(proxyClass= ExperimentalForm.class) 019@Indexed 020@DynamicUpdate @DynamicInsert 021@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 022public class ExperimentalFormImpl extends L3ElementImpl implements ExperimentalForm 023{ 024 025 private Entity experimentalFormEntity; 026 private Set<ExperimentalFormVocabulary> experimentalFormDescription; 027 private Set<EntityFeature> experimentalFeature; 028 029 /** 030 * Constructor. 031 */ 032 public ExperimentalFormImpl() 033 { 034 this.experimentalFormDescription = BPCollections.I.createSafeSet(); 035 this.experimentalFeature = BPCollections.I.createSafeSet(); 036 } 037 038 // 039 // BioPAXElement interface implementation 040 // 041 //////////////////////////////////////////////////////////////////////////// 042 043 @Transient 044 public Class<? extends ExperimentalForm> getModelInterface() 045 { 046 return ExperimentalForm.class; 047 } 048 049 @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 050 @ManyToMany(targetEntity = ExperimentalFormVocabularyImpl.class) 051 @JoinTable(name="experimentalFormDescription") 052 public Set<ExperimentalFormVocabulary> getExperimentalFormDescription() 053 { 054 return experimentalFormDescription; 055 } 056 057 public void addExperimentalFormDescription( 058 ExperimentalFormVocabulary experimentalFormType) 059 { 060 if(experimentalFormType != null) 061 this.experimentalFormDescription.add(experimentalFormType); 062 } 063 064 public void removeExperimentalFormDescription( 065 ExperimentalFormVocabulary experimentalFormType) 066 { 067 if(experimentalFormType != null) 068 this.experimentalFormDescription.remove(experimentalFormType); 069 } 070 071 public void setExperimentalFormDescription( 072 Set<ExperimentalFormVocabulary> experimentalFormDescription) 073 { 074 this.experimentalFormDescription = experimentalFormDescription; 075 } 076 077 @ManyToOne(targetEntity = EntityImpl.class)//, cascade={CascadeType.ALL}) 078 public Entity getExperimentalFormEntity() 079 { 080 return experimentalFormEntity; 081 } 082 083 084 public void setExperimentalFormEntity(Entity experimentalFormEntity) 085 { 086 if(experimentalFormEntity == null) { 087 this.experimentalFormEntity = null; 088 } else if(PhysicalEntity.class.isAssignableFrom(experimentalFormEntity.getClass()) 089 || Gene.class.isInstance(experimentalFormEntity)) { 090 this.experimentalFormEntity = experimentalFormEntity; 091 } else { 092 throw new IllegalBioPAXArgumentException( 093 "Argument type is not yet supported: " 094 + experimentalFormEntity.getModelInterface()); 095 } 096 } 097 098 @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 099 @ManyToMany(targetEntity = EntityFeatureImpl.class) 100 @JoinTable(name="experimentalFeature") 101 public Set<EntityFeature> getExperimentalFeature() 102 { 103 return experimentalFeature; 104 } 105 106 public void setExperimentalFeature(Set<EntityFeature> experimentalFeature) 107 { 108 this.experimentalFeature = experimentalFeature; 109 } 110 111 public void addExperimentalFeature(EntityFeature experimentalFeature) 112 { 113 if(experimentalFeature != null) 114 this.experimentalFeature.add(experimentalFeature); 115 } 116 117 public void removeExperimentalFeature(EntityFeature experimentalFeature) 118 { 119 if(experimentalFeature != null) 120 this.experimentalFeature.remove(experimentalFeature); 121 } 122}