1 /** 2 * Copyright 2005-2012 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.impl.repository; 17 18 import java.util.List; 19 import java.util.Map; 20 21 import org.kuali.rice.krms.api.repository.type.KrmsAttributeDefinition; 22 23 24 public interface KrmsAttributeDefinitionService { 25 26 /** 27 * This will create a {@link KrmsAttributeDefinition} exactly like the parameter passed in. 28 * 29 * @param attributeDefinition - KrmsAttributeDefinition 30 * @throws IllegalArgumentException if the attribute definition is null 31 * @throws IllegalStateException if the attribute definition already exists in the system 32 */ 33 public KrmsAttributeDefinition createAttributeDefinition(KrmsAttributeDefinition attributeDefinition); 34 35 /** 36 * This will update a {@link KrmsAttributeDefinition}. 37 * 38 * 39 * @param attributeDefinition - KrmsAttributeDefinition 40 * @throws IllegalArgumentException if the attribute definition is null 41 * @throws IllegalStateException if the attribute definition does not exist in the system 42 */ 43 public void updateAttributeDefinition(KrmsAttributeDefinition attributeDefinition); 44 45 /** 46 * Lookup a KrmsAttributeDefinition based on the given id. 47 * 48 * @param id the given KrmsAttributeDefinition id 49 * @return a KrmsAttributeDefinition object with the given id. A null reference is returned if an invalid or 50 * non-existant id is supplied. 51 */ 52 public KrmsAttributeDefinition getAttributeDefinitionById(String id); 53 54 /** 55 * Get a KrmsAttributeDefinition object based on name and namespace 56 * 57 * @param name the given name 58 * @param namespace the given type namespace 59 * @return A KrmsAttributeDefinition object with the given namespace and name if one with that name and namespace 60 * exists. Otherwise, null is returned. 61 * @throws IllegalStateException if multiple KrmsAttributeDefinitions exist with the same name and namespace 62 */ 63 public KrmsAttributeDefinition getAttributeDefinitionByNameAndNamespace(String name, String namespace); 64 65 /** 66 * Returns all KrmsAttributeDefinition that for a given namespace. 67 * 68 * @return all KrmsAttributeDefinition for a namespace 69 */ 70 public List<KrmsAttributeDefinition> findAttributeDefinitionsByNamespace(String namespace); 71 72 73 /** 74 * Returns all KrmsAttributeDefinition that for a given type. 75 * 76 * @return all KrmsAttributeDefinition for a type. May be empty, will not be null; 77 */ 78 public List<KrmsAttributeDefinition> findAttributeDefinitionsByType(String typeId); 79 80 81 /** 82 * Returns all KrmsAttributeDefinitions 83 * 84 * @return all KrmsAttributeDefinitions 85 */ 86 public List<KrmsAttributeDefinition> findAllAttributeDefinitions(); 87 88 /** 89 * This method converts a collection of name/value attribute pairs to 90 * id/value attribute pairs. 91 * <p> 92 * At the api layer, attributes are represented as name/value pairs. 93 * However, in the database, the names of the attribute and the values are 94 * stored separately. The attribute definitions contain the attribute names. 95 * All defined attributes(for the various krms entity types) are stored 96 * together in a single table. The attribute values themselves are stored 97 * in separate tables for each entity type, and then reference the attribute 98 * definitions by the attribute definition id. 99 * <p> 100 * This method converts the name/value pairs to id/value pairs so they 101 * can be searched from a single table. This simplifies the queries for 102 * attributes. 103 * <p> 104 * 105 * @param attributesByName - a Map<String/String> containing the name/value 106 * pairs for the set of attributes. 107 * @param namespace - the namespace code of the set of attributes 108 * @return a Map<String,String> containing the id/value pairs for the set 109 * of attributes. 110 */ 111 public Map<String,String> convertAttributeKeys(Map<String,String> attributesByName, String namespace); 112 113 /** 114 * This method gets the attribute definition ID for a given attribute 115 * 116 * @param attributeName - the name of the attribute 117 * @param namespace - the namespace code of the attribute 118 * @return - the attribute definition id 119 */ 120 public String getKrmsAttributeId( String attributeName, String namespace); 121 122 /** 123 * This method gets a KrmsAttributeDefinitionBo object for a given attribute. 124 * 125 * @param attributeName - the name of the attribute 126 * @param namespace - the namespace code of the attribute 127 * @return - the attribute definition id 128 */ 129 public KrmsAttributeDefinitionBo getKrmsAttributeBo( String attributeName, String namespace); 130 131 /** 132 * This method clears the cache of AttributeDefinitionBo objects. 133 * <p> 134 * Since searching for attribute definitions is a common operation, 135 * the attribute definitions fetched from the database are cached to 136 * improve performance. 137 * <p> 138 */ 139 public void clearCache(); 140 141 }