1 /** 2 * Copyright 2005-2015 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.krad.data.metadata; 17 18 import com.google.common.annotations.Beta; 19 import org.kuali.rice.krad.data.provider.annotation.UifAutoCreateViewType; 20 21 import java.util.Collection; 22 import java.util.List; 23 24 25 /** 26 * Metadata for a given data object type. 27 * 28 * <p> 29 * References the data object class and contains lists of all the attributes, collections, and relationships within 30 * the class. 31 * </p> 32 * 33 * @author Kuali Rice Team (rice.collab@kuali.org) 34 */ 35 public interface DataObjectMetadata extends MetadataCommon { 36 37 /** 38 * Gets metadata object type. 39 * 40 * <p> 41 * The type represented by this metadata object. Usually this will simply contain the class name created 42 * by the persistence layer when it is loaded from the database. 43 * </p> 44 * 45 * @return metadata object type. Will never return null. 46 */ 47 Class<?> getType(); 48 49 /** 50 * Gets attributes defined on the data object. 51 * 52 * <p> 53 * Gets all the attributes defined on the data object in the order given by the MetadataProvider. This may or may not 54 * be the same as the backing object's (table) and is most likely the order in which they appear in the source 55 * persistence metadata (XML or annotations). 56 * </p> 57 * 58 * @return Data object attributes. Will never return null. Will return an empty list if no attributes defined. 59 */ 60 List<DataObjectAttribute> getAttributes(); 61 62 /** 63 * Gets child collections. 64 * 65 * <p> 66 * Gets all the child collections defined on the data object in the order given by the MetadataProvider. 67 * </p> 68 * 69 * @return Child collections. Will never return null. Will return an empty list if no collections defined. 70 */ 71 List<DataObjectCollection> getCollections(); 72 73 /** 74 * Gets child relationships. 75 * 76 * <p> 77 * Gets all the child relationships defined on the data object in the order given by the MetadataProvider. 78 * </p> 79 * 80 * @return Child relationships. Will never return null. Will return an empty list if no relationships defined. 81 */ 82 List<DataObjectRelationship> getRelationships(); 83 84 /** 85 * Gets attribute metadata. 86 * 87 * <p> 88 * Get the named attribute's metadata from the data object. 89 * </p> 90 * 91 * @return <b>null</b> if the attributeName does not exist, the associated {@link DataObjectAttribute} otherwise. 92 */ 93 DataObjectAttribute getAttribute(String attributeName); 94 95 /** 96 * Gets the named collection's metadata from the data object. 97 * 98 * <p> 99 * The name is the property on the data object which holds 100 * the {@link Collection}. 101 * </p> 102 * 103 * @return <b>null</b> if the attributeName does not exist, the associated {@link DataObjectCollection} otherwise. 104 */ 105 DataObjectCollection getCollection(String collectionName); 106 107 /** 108 * Gets the named relationship's metadata from the data object. 109 * 110 * <p> 111 * The name is the property on the data object which holds the related business object's instance. 112 * </p> 113 * 114 * @return <b>null</b> if the attributeName does not exist, the associated {@link DataObjectRelationship} otherwise. 115 */ 116 DataObjectRelationship getRelationship(String relationshipName); 117 118 /** 119 * Gets attribute relationships. 120 * 121 * <p> 122 * Returns all relationships of which the given attribute is part of the foreign key relationship. 123 * </p> 124 * 125 * @return The list of relationship metadata objects or an empty list if none found. 126 */ 127 List<DataObjectRelationship> getRelationshipsInvolvingAttribute(String attributeName); 128 129 /** 130 * Gets relationship of last attribute. 131 * 132 * <p> 133 * Returns a single relationship for which the given attribute is the last in the foreign key relationship. 134 * </p> 135 * 136 * @return <b>null</b> if no relationship's foreign key set ends wit the given field. The 137 * {@link DataObjectRelationship} otherwise. 138 */ 139 DataObjectRelationship getRelationshipByLastAttributeInRelationship(String attributeName); 140 141 /** 142 * Get the list of primary key attribute names for this data object. 143 * 144 * @return primary key attribute names. 145 */ 146 List<String> getPrimaryKeyAttributeNames(); 147 148 /** 149 * List of attribute names which form a "user friendly" key. (As opposed to a sequence number as used by some parts 150 * of the system). 151 * 152 * <p> 153 * An example here would be the KIM Role object where the Role ID is the primary key, but the Namespace and Name 154 * properties form the user-visible and enterable key. 155 * </p> 156 * 157 * @return a list containing the business key attributes names for the data object. 158 */ 159 List<String> getBusinessKeyAttributeNames(); 160 161 /** 162 * Returns true if the list of primary key names and business key attribute names are different. 163 * 164 * @return true if the list of primary key names and business key attributes are different, false if they are the 165 * same. 166 */ 167 Boolean hasDistinctBusinessKey(); 168 169 /** 170 * Gets primary display attribute name 171 * 172 * <p> 173 * This is the field on the object which best represents it on displays. It will be used to build 174 * inquiry links and determine where to place quickfinder links. Usually this will be the the primary key 175 * or the last field of the primary key if there are multiple fields. 176 * </p> 177 * <p> 178 * If not specified by the provider, the base implementation will default it to the last attribute in the 179 * primaryKeyAttributeNames list. 180 * </p> 181 * 182 * @return the name of the attribute to use for primary display purposes. 183 */ 184 String getPrimaryDisplayAttributeName(); // KNS: titleAttribute 185 186 /** 187 * Determines whether optimistic locking is supported. 188 * 189 * <p> 190 * Returns true if the underlying ORM tool performs optimistic locking checks on this object before saving. Under 191 * the KNS, this was done via the versionNumber property and appropriate OJB configuration. In JPA, this is linked 192 * to the @Version annotation. 193 * </p> 194 * 195 * @return true if this data object is configured for optimistic locking. 196 */ 197 boolean isSupportsOptimisticLocking(); 198 199 /** 200 * BETA: Gets auto create uif view types. 201 * 202 * <p> 203 * Returns collections of uif view types that should be auto created. 204 * </p> 205 * 206 * @return collection of uif view types. 207 */ 208 @Beta 209 Collection<UifAutoCreateViewType> getAutoCreateUifViewTypes(); 210 211 /** 212 * BETA: Determines where view type should be auto created. 213 * 214 * <p> 215 * Determines whether the specified uif view type can be auto created. 216 * </p> 217 * 218 * @return true if this uif view type should be auto created. 219 */ 220 @Beta 221 boolean shouldAutoCreateUifViewOfType(UifAutoCreateViewType viewType); 222 }