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