001    /**
002     * Copyright 2005-2014 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.krms.api.repository.proposition;
017    
018    import java.util.List;
019    
020    import org.kuali.rice.core.api.mo.common.Identifiable;
021    import org.kuali.rice.core.api.mo.common.Versioned;
022    
023    /**
024     * Defines the contract for a {@link PropositionDefinition}
025     *
026     * @see PropositionDefinition
027     *
028     * @author Kuali Rice Team (rice.collab@kuali.org)
029     */
030    public interface PropositionDefinitionContract extends Identifiable, Versioned {
031            /**
032             * Returns the description text for the KRMS proposition
033             * @return description for KRMS type.
034             */
035            public String getDescription();
036    
037            /**
038             * Returns the id of Proposition KrmsType of the proposition.
039             * It provides some context to what type of object of the KRMS type.
040             * @return the id of the KRMS type.
041             */
042            public String getTypeId();
043            
044            /**
045             * TReturns the ID of the rule this proposition belongs to.  May be null if this proposition has
046             * not yet been persisted.
047             * 
048             * @return the ID of the Rule this proposition belongs to.
049             */
050            public String getRuleId();
051    
052            /**
053             * <p>
054             * There are three main types of Propositions:
055             *   Compound Propositions - a proposition consisting of other propositions 
056             *      and a boolean algebra operator (AND, OR) defining how to evaluate 
057             *      those propositions.
058         *   Parameterized Propositions - a proposition which is parameterized by 
059         *      some set of values, evaluation logic is implemented by hand and 
060         *      returns true or false
061         *   Simple Propositions - a proposition of the form lhs op rhs where 
062         *          lhs=left-hand side, rhs=right-hand side, and op=operator
063             * </p>
064             * @return the proposition type code of the proposition
065             * <p>
066             *      Valid values are C = compound, P = parameterized, S = simple
067             * </p>
068             */
069            public String getPropositionTypeCode();
070            
071            /**
072             * Returns the parameter list of the proposition.
073             * Parameters are listed in Reverse Polish Notation.
074             * Parameters may be constants, terms, or functions.
075             * <p>
076             * Compound Propositions will have an empty parameter list.
077             * </p>
078             * @see PropositionParameter
079             * @return the Parameters related to the proposition
080             */
081            public List<? extends PropositionParameterContract> getParameters();
082            
083            /**
084             * Returns the op code to be used when evaluating compound
085             * propositions. 
086             * 
087             * @return the compound op code. 
088             *    valid values are A = and, O = or
089             */
090            public String getCompoundOpCode();
091            
092           /**
093             * Returns the sequence number used to order the 
094             * compound propositions
095             * 
096             * Note: this value is set by the service 
097             * 
098             * 
099             * @return the compound sequence number 
100             */
101            public Integer getCompoundSequenceNumber();
102    
103            /**
104             * 
105             * Returns the propositions which are contained in a
106             * compound proposition.
107             * 
108             * @return an ordered list of the Propositions which make up the compound
109             * proposition.
110             */
111            public List<? extends PropositionDefinitionContract> getCompoundComponents();
112    }