001package org.biopax.paxtools.model.level3;
002
003import java.util.Set;
004
005/**
006 * Definition: An interaction in which one entity regulates, modifies, or otherwise influences a continuant entity,
007 * i.e. pathway or interaction.
008 *
009 * Usage: Conceptually, physical entities are involved in interactions (or events) and the events are controlled or
010 * modified, not the physical entities themselves. For example, a kinase activating a protein is a frequent event in
011 * signaling pathways and is usually represented as an 'activation' arrow from the kinase to the substrate in
012 * signaling diagrams. This is an abstraction, called "Activity Flow" representation,
013 * that can be ambiguous without context. In BioPAX, this information should be captured as the kinase catalyzing
014 * (via an instance of the catalysis class) a Biochemical Reaction in which the substrate is phosphorylated.
015 * Subclasses of control define types specific to the biological process that is being controlled and should be used
016 * instead of the generic "control" class when applicable.
017 *
018 * A control can potentially have multiple controllers. This acts as a logical AND,
019 * i.e. both controllers are needed to regulate the  controlled event. Alternatively multiple controllers can control
020 * the same event and this acts as a logical OR, i.e. any one of them is sufficient to regulate the controlled event.
021 * Using this structure it is possible to describe arbitrary control logic using BioPAX.
022 *
023 * Rationale: Control can be temporally non-atomic, for example a pathway can control another pathway in BioPAX.
024 * Synonyms: regulation, mediation
025 *
026 * Examples: A small molecule that inhibits a pathway by an unknown mechanism.
027 */
028public interface Control extends Interaction
029{
030
031
032        /**
033         * The entity that is controlled, e.g., in a biochemical reaction, the reaction is controlled by an enzyme.
034         * Controlled is a sub-property of participants.
035         * @return The entity that is controlled
036         */
037        public Set<Process> getControlled();
038
039        /**
040         * The entity that is controlled, e.g., in a biochemical reaction, the reaction is controlled by an enzyme.
041         * Controlled is a sub-property of participants.
042         * @param controlled The entity that is controlled
043         */
044        public void addControlled(Process controlled);
045
046        /**
047         * The entity that is controlled, e.g., in a biochemical reaction, the reaction is controlled by an enzyme.
048         * Controlled is a sub-property of participants.
049         * @param controlled The entity that is controlled
050         */
051        public void removeControlled(Process controlled);
052
053
054        /**
055         * The controlling entity, e.g., in a biochemical reaction, an enzyme is the controlling entity of the reaction.
056         * Controller is a sub-property of participants.
057         * @return The controlling entity
058         */
059        public Set<Controller> getController();
060
061        /**
062         * The controlling entity, e.g., in a biochemical reaction, an enzyme is the controlling entity of the reaction.
063         * Controller is a sub-property of participants.
064         * @param controller The controlling entity
065         */
066        public void addController(Controller controller);
067
068        /**
069         * The controlling entity, e.g., in a biochemical reaction, an enzyme is the controlling entity of the reaction.
070         * Controller is a sub-property of participants.
071         * @param controller The controlling entity
072         */
073        public void removeController(Controller controller);
074
075
076        /**
077         * Defines the nature of the control relationship between the CONTROLLER and the CONTROLLED entities.
078         *
079         * @return control type
080         */
081        public ControlType getControlType();
082
083        /**
084         * Sets the controlType BioPAX property value, which
085         * fefines the nature of the control relationship between the CONTROLLER and the CONTROLLED entities.
086         * @param controlType new control type value
087         */
088        public void setControlType(ControlType controlType);
089
090}