001package org.biopax.paxtools.model.level3;
002
003import java.util.Set;
004
005
006public interface PhysicalEntity extends Entity, Controller
007{
008
009
010        // Inverse of COMPONENT
011
012        Set<Complex> getComponentOf();
013
014
015        /**
016         * A cellular location, e.g. 'cytoplasm'. This should reference a term in the <a
017         * href="http://www.obofoundry.org/cgi-bin/detail.cgi?id=cellular_component">Gene Ontology Cellular
018         * Component</a> ontology. The location referred to by this property should be as specific as is
019         * known. If an interaction is known to occur in multiple locations, separate interactions (and
020         * physicalEntities) must be created for each different location.  If the location of a participant
021         * in a complex is unspecified, it may be assumed to be the same location as that of the complex.
022         * 
023         * A molecule in two different cellular locations are considered two different physical entities.
024         *
025         * @return cellular location of this physical entity
026         */
027        CellularLocationVocabulary getCellularLocation();
028
029        /**
030         * A cellular location, e.g. 'cytoplasm'. This should reference a term in the <a
031         * href="http://www.obofoundry.org/cgi-bin/detail.cgi?id=cellular_component">Gene Ontology Cellular
032         * Component</a> ontology. The location referred to by this property should be as specific as is
033         * known. If an interaction is known to occur in multiple locations, separate interactions (and
034         * physicalEntities) must be created for each different location.  If the location of a participant
035         * in a complex is unspecified, it may be assumed to be the same location as that of the complex.
036         * 
037         * A molecule in two different cellular locations are considered two different physical entities.
038         *
039         * @param newCellularLocation for this physical entity
040         */
041        void setCellularLocation(CellularLocationVocabulary newCellularLocation);
042
043        boolean hasEquivalentFeatures(PhysicalEntity that);
044        
045        boolean hasEquivalentCellularLocation(PhysicalEntity that);
046        
047        // Property MODIFIED-AT
048
049        Set<EntityFeature> getFeature();
050
051        void addFeature(EntityFeature feature);
052
053        void removeFeature(EntityFeature feature);
054
055
056
057        // Property NOT-MODIFIED-AT
058
059        Set<EntityFeature> getNotFeature();
060
061        void addNotFeature(EntityFeature feature);
062
063        void removeNotFeature(EntityFeature feature);
064
065
066
067        //Property memberPhysicalEntity
068
069        /**
070         * Please avoid using this property in your BioPAX L3 models
071         * unless absolutely sure/required, for there is an alternative way 
072         * (using PhysicalEntity/entityReference/memberEntityReference), and 
073         * this will probably be deprecated in the future BioPAX releases.
074         * It's usually hard to say what this relationship (grouping) means...
075         * @return member physical entities
076         */
077        Set<PhysicalEntity> getMemberPhysicalEntity();
078
079        void addMemberPhysicalEntity(PhysicalEntity memberPhysicalEntity);
080
081        void removeMemberPhysicalEntity(PhysicalEntity memberPhysicalEntity);
082
083
084
085        //Inverse of property memberPhysicalEntity
086        Set<PhysicalEntity> getMemberPhysicalEntityOf();
087
088
089
090        /**
091         * Overridden to provide better downcasting
092        */
093        Class<? extends PhysicalEntity> getModelInterface();
094}
095