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}