1 /** 2 * Copyright 2005-2016 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.kuali.rice.krms.api.repository.function; 17 18 import org.kuali.rice.core.api.mo.common.Identifiable; 19 import org.kuali.rice.core.api.mo.common.Versioned; 20 import org.kuali.rice.core.api.mo.common.active.Inactivatable; 21 import org.kuali.rice.krms.api.repository.category.CategoryDefinitionContract; 22 import org.kuali.rice.krms.api.repository.type.KrmsTypeDefinition; 23 24 import java.util.List; 25 26 /** 27 * Defines the contract for a function definition. A function definition can be 28 * defined by clients integrating with KRMS in order to implement custom logic 29 * which they may require as part of rule execution and evaluation. These can 30 * then be used in simple propositions. 31 * 32 * <p>The function definition itself defines various metadata about the function 33 * including it's name, return type, and expected parameter types. The actual 34 * implementation of the function is retrieved through the type defined by 35 * {@link #getTypeId()}. 36 * 37 * @author Kuali Rice Team (rice.collab@kuali.org) 38 * 39 */ 40 public interface FunctionDefinitionContract extends Versioned, Identifiable, Inactivatable { 41 42 /** 43 * Returns the namespace code of this function definition. All functions 44 * have a namespace and this value can never be null or blank. The 45 * combination of namespace plus name must be unique within the entire 46 * repository of functions. 47 * 48 * @return the namespace code of this function definition 49 */ 50 String getNamespace(); 51 52 /** 53 * Returns the name of this function definition. All functions have a name 54 * and this value can never be null or blank. The combination of namespace 55 * plus name must be unique within the entire repository of functions. 56 * 57 * @return the name of this function definition 58 */ 59 String getName(); 60 61 /** 62 * Returns the description of this function definition. The description is 63 * intended to provide more information about a function and it's 64 * appropriate usage. The description is optional. 65 * 66 * @return the description of this function definition 67 */ 68 String getDescription(); 69 70 /** 71 * Returns the type of the return value of the function defined by this 72 * function definition. This can be one of a set of "built-in" data types 73 * or a custom data type represented as a fully qualified java class name. 74 * All functions must have a return type so this method should never return 75 * null or blank. 76 * 77 * @return the return type of this function definition 78 */ 79 String getReturnType(); 80 81 /** 82 * Returns the id of the {@link KrmsTypeDefinition} which defines the 83 * actual implementation of this function such that it can be loaded into 84 * the engine and executed. 85 * 86 * @return the type id of this function definition 87 */ 88 String getTypeId(); 89 90 /** 91 * Returns an ordered, immutable list of the parameters which this function 92 * definition requires. This list can be empty (in the case of a function 93 * which has no arguments) but will never be null. 94 * 95 * @return the list of parameters for this function definition 96 */ 97 List<? extends FunctionParameterDefinitionContract> getParameters(); 98 99 /** 100 * Returns an ordered list of the categories which this function 101 * definition requires. This list can be empty (in the case of a function 102 * which has no arguments) but will never be null. 103 * 104 * @return the list of categories for this function definition 105 */ 106 List<? extends CategoryDefinitionContract> getCategories(); 107 108 }