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 }