Coverage Report - org.kuali.rice.krad.service.DataObjectMetaDataService
 
Classes in this File Line Coverage Branch Coverage Complexity
DataObjectMetaDataService
N/A
N/A
1
 
 1  
 /*
 2  
  * Copyright 2011 The Kuali Foundation
 3  
  *
 4  
  * Licensed under the Educational Community License, Version 1.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/ecl1.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.service;
 17  
 
 18  
 import org.kuali.rice.krad.bo.BusinessObjectRelationship;
 19  
 import org.kuali.rice.krad.datadictionary.RelationshipDefinition;
 20  
 
 21  
 import java.util.List;
 22  
 import java.util.Map;
 23  
 
 24  
 /**
 25  
  * Provides metadata such as relationships and key fields for data objects
 26  
  *
 27  
  * <p>
 28  
  * Service provides a facade to the various services for retrieving metadata
 29  
  * within the framework, such as the <code>DataDictionaryService</code> and
 30  
  * the <code>PersistenceService</code>
 31  
  * </p>
 32  
  *
 33  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 34  
  */
 35  
 public interface DataObjectMetaDataService {
 36  
 
 37  
     /**
 38  
      * Checks the DataDictionary and OJB Repository File to determine the primary
 39  
      * fields names for a given class.
 40  
      *
 41  
      * @param clazz - the Class to check for primary keys
 42  
      * @return a list of the primary key field names or an empty list if none are found
 43  
      */
 44  
     public List<String> listPrimaryKeyFieldNames(Class<?> clazz);
 45  
 
 46  
     /**
 47  
      * Determines the primary keys for the class of the given object, then for each
 48  
      * key field retrieves the value from the object instance and populates the return
 49  
      * map with the primary key name as the map key and the object value as the map value
 50  
      *
 51  
      * @param dataObject - object whose primary key field name,value pairs you want
 52  
      * @return a Map containing the names and values of fields for the given class which
 53  
      *         are designated as key fields in the OJB repository file or DataDictionary
 54  
      * @throws IllegalArgumentException if the given Object is null
 55  
      */
 56  
     public Map<String, ?> getPrimaryKeyFieldValues(Object dataObject);
 57  
 
 58  
     /**
 59  
      * Determines the primary keys for the class of the given object, then for each
 60  
      * key field retrieves the value from the object instance and populates the return
 61  
      * map with the primary key name as the map key and the object value as the map value
 62  
      *
 63  
      * @param dataObject - object whose primary key field name,value pairs you want
 64  
      * @param sortFieldNames - if true, the returned Map will iterate through its entries sorted by fieldName
 65  
      * @return a Map containing the names and values of fields for the given class which
 66  
      *         are designated as key fields in the OJB repository file or DataDictionary
 67  
      * @throws IllegalArgumentException if the given Object is null
 68  
      */
 69  
     public Map<String, ?> getPrimaryKeyFieldValues(Object dataObject, boolean sortFieldNames);
 70  
 
 71  
     /**
 72  
      * Compares two dataObject instances for equality of type and key values using toString()
 73  
      * of each value for comparison purposes.
 74  
      *
 75  
      * @param do1
 76  
      * @param do2
 77  
      * @return boolean indicating whether the two objects are equal.
 78  
      */
 79  
     public boolean equalsByPrimaryKeys(Object do1, Object do2);
 80  
 
 81  
     /**
 82  
      * Attempts to find a relationship for the given attribute within the given
 83  
      * data object
 84  
      *
 85  
      * <p>
 86  
      * First the data dictionary is queried to find any relationship definitions
 87  
      * setup that include the attribute, if found the
 88  
      * <code>BusinessObjectRetationship</code> is build from that. If not and
 89  
      * the data object class is persistent, relationships are retrieved from the
 90  
      * persistence service. Nested attributes are handled in addition to
 91  
      * external business objects. If multiple relationships are found, the one
 92  
      * that contains the least amount of joining keys is returned
 93  
      * </p>
 94  
      *
 95  
      * @param dataObject - data object instance that contains the attribute
 96  
      * @param dataObjectClass - class for the data object that contains the attribute
 97  
      * @param attributeName - property name for the attribute
 98  
      * @param attributePrefix - property prefix for the attribute
 99  
      * @param keysOnly - indicates whether only primary key fields should be returned
 100  
      * in the relationship
 101  
      * @param supportsLookup - indicates whether the relationship should support lookup
 102  
      * @param supportsInquiry - indicates whether the relationship should support inquiry
 103  
      * @return BusinessObjectRelationship for the attribute, or null if not
 104  
      *         found
 105  
      */
 106  
     public BusinessObjectRelationship getDataObjectRelationship(Object dataObject, Class<?> dataObjectClass,
 107  
             String attributeName, String attributePrefix, boolean keysOnly, boolean supportsLookup,
 108  
             boolean supportInquiry);
 109  
 
 110  
     /**
 111  
      * Fetches the RelationshipDefinition for the attribute with the given name within
 112  
      * the given class
 113  
      *
 114  
      * @param dataObjectClass - data object class that contains the attribute
 115  
      * @param attributeName - property name for the attribute
 116  
      * @return RelationshipDefinition for the attribute, or null if not found
 117  
      */
 118  
     public RelationshipDefinition getDictionaryRelationship(Class<?> dataObjectClass, String attributeName);
 119  
 
 120  
     /**
 121  
      * Returns the attribute to be associated with for object level markings.  This would
 122  
      * be the field chosen for inquiry links etc.
 123  
      *
 124  
      * @param dataObjectClass - data object class to obtain title attribute of
 125  
      * @return property name of title attribute or null if data object entry not found
 126  
      * @throws IllegalArgumentException if the given Class is null
 127  
      */
 128  
     public String getTitleAttribute(Class<?> dataObjectClass);
 129  
 
 130  
     /**
 131  
      * Indicates whether notes are supported by the given data object class, currently this
 132  
      * can only be true for business objects
 133  
      *
 134  
      * @param dataObjectClass - class for data object to check
 135  
      * @return boolean true if notes are supported for data object, false if notes are not supported
 136  
      */
 137  
     public boolean areNotesSupported(Class dataObjectClass);
 138  
 }