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.krad.service; 17 18 import org.kuali.rice.krad.bo.BusinessObject; 19 import org.kuali.rice.krad.bo.ExternalizableBusinessObject; 20 import org.kuali.rice.krad.bo.ModuleConfiguration; 21 import org.kuali.rice.krad.datadictionary.BusinessObjectEntry; 22 import org.springframework.beans.factory.InitializingBean; 23 import org.springframework.context.ApplicationContextAware; 24 25 import java.util.List; 26 import java.util.Map; 27 import java.util.Properties; 28 29 /** 30 * Defines service methods for module services 31 * 32 * @author Kuali Rice Team (rice.collab@kuali.org) 33 */ 34 public interface ModuleService extends InitializingBean, ApplicationContextAware { 35 36 /** 37 * This method returns the module configuration. 38 * 39 * @return 40 */ 41 public ModuleConfiguration getModuleConfiguration(); 42 43 /** 44 * This method determines whether this service is responsible for the business object class passed in, or not. 45 * 46 * @param businessObjectClass 47 * @return 48 */ 49 public boolean isResponsibleFor(Class businessObjectClass); 50 51 /** 52 * This method determines whether this service is responsible for the given jobname, or not. 53 * 54 * @param jobName 55 * @return 56 */ 57 public boolean isResponsibleForJob(String jobName); 58 59 /** 60 * This method returns the list of primary keys for the EBO. 61 * 62 * @param businessObjectInterfaceClass 63 * @return 64 */ 65 public List listPrimaryKeyFieldNames(Class businessObjectInterfaceClass); 66 67 /** 68 * This method returns a list of alternate primary keys. This is used when the "real" primary 69 * key is not the only one that can be used. For example, documentType has "documentTypeId" 70 * as its primary key, but the "name" could also be used. 71 * A List of Lists is returned because because there can be component keys: 72 * Ex: 73 * {name, date} 74 * {department, personId} 75 * 76 * @param businessObjectInterfaceClass 77 * @return List of List of Strings. 78 */ 79 public List<List<String>> listAlternatePrimaryKeyFieldNames(Class businessObjectInterfaceClass); 80 81 /** 82 * This method gets the business object dictionary entry for the passed in externalizable business object class. 83 * 84 * @param businessObjectInterfaceClass 85 * @return 86 */ 87 public BusinessObjectEntry getExternalizableBusinessObjectDictionaryEntry(Class businessObjectInterfaceClass); 88 89 /** 90 * This method gets the externalizable business object, given its type and a map of primary keys and values 91 * 92 * @param businessObjectClass 93 * @param fieldValues 94 * @return 95 */ 96 public <T extends ExternalizableBusinessObject> T getExternalizableBusinessObject(Class<T> businessObjectClass, 97 Map<String, Object> fieldValues); 98 99 /** 100 * This method gets the list of externalizable business objects, given its type and a map of primary keys and 101 * values. 102 * 103 * @param businessObjectClass 104 * @param fieldValues 105 * @return 106 */ 107 public <T extends ExternalizableBusinessObject> List<T> getExternalizableBusinessObjectsList( 108 Class<T> businessObjectClass, Map<String, Object> fieldValues); 109 110 /** 111 * This method gets the list of externalizable business objects for lookup, given its type and a map of primary keys 112 * and values. 113 * 114 * @param <T> 115 * @param businessObjectClass 116 * @param fieldValues 117 * @param unbounded 118 * @return 119 */ 120 public <T extends ExternalizableBusinessObject> List<T> getExternalizableBusinessObjectsListForLookup( 121 Class<T> businessObjectClass, Map<String, Object> fieldValues, boolean unbounded); 122 123 /** 124 * Returns a URL so that the inquiry framework may redirect a user to the appropriate (possibly 125 * external) website at which to view inquiry information 126 * 127 * @param inquiryDataObjectClass - a {@link ExternalizableBusinessObject} managed by this module 128 * @param parameters - any inquiry parameters, and the primary key values of the inquiry class would be 129 * in here 130 * @return String URL where externalizable object information may be viewed 131 */ 132 public String getExternalizableDataObjectInquiryUrl(Class<?> inquiryDataObjectClass, Properties parameters); 133 134 /** 135 * Returns a URL so that the lookup framework may redirect a user to the appropriate (possibly 136 * external) website at which to the data for the object may be searched 137 * 138 * @param inquiryDataObjectClass - a {@link ExternalizableBusinessObject} managed by this module 139 * @param parameters - any parameters for the lookup call 140 * @return String URL where externalizable object information may be searched 141 */ 142 public String getExternalizableDataObjectLookupUrl(Class<?> inquiryDataObjectClass, Properties parameters); 143 144 /** 145 * This method returns a URL so that the inquiry framework may redirect a user to the appropriate (possibly 146 * external) website 147 * at which to view inquiry information. 148 * 149 * @param inquiryBusinessObjectClass a {@link ExternalizableBusinessObject} managed by this module 150 * @param parameters any inquiry parameters, and the primary key values of the inquiryBusinessObjectClass would be 151 * in here 152 * @return a URL where externalizable business object information may be viewed. 153 * @deprecated legacy KNS call, replaced by {@link #getExternalizableDataObjectInquiryUrl(Class, java.util.Properties)} 154 * in KRAD 155 */ 156 @Deprecated 157 public String getExternalizableBusinessObjectInquiryUrl(Class inquiryBusinessObjectClass, 158 Map<String, String[]> parameters); 159 160 /** 161 * This method gets the lookup url for the given externalizable business object properties. 162 * 163 * @param parameters 164 * @return 165 * @deprecated legacy KNS call, replaced by {@link #getExternalizableDataObjectLookupUrl(Class, java.util.Properties)} 166 * in KRAD 167 */ 168 @Deprecated 169 public String getExternalizableBusinessObjectLookupUrl(Class inquiryBusinessObjectClass, 170 Map<String, String> parameters); 171 172 /** 173 * This method retrieves the externalizable business object, if it is not already populated 174 * with the matching primary key values. 175 * 176 * @param businessObject 177 * @param currentInstanceExternalizableBO 178 * @param externalizableRelationshipName 179 * @return 180 */ 181 public <T extends ExternalizableBusinessObject> T retrieveExternalizableBusinessObjectIfNecessary( 182 BusinessObject businessObject, T currentInstanceExternalizableBO, String externalizableRelationshipName); 183 184 /** 185 * This method retrieves a list of externalizable business objects given a business object, 186 * name of the relationship between the business object and the externalizable business object, and 187 * the externalizable business object class. 188 * 189 * @param businessObject 190 * @param externalizableRelationshipName 191 * @param externalizableClazz 192 * @return 193 */ 194 public <T extends ExternalizableBusinessObject> List<T> retrieveExternalizableBusinessObjectsList( 195 BusinessObject businessObject, String externalizableRelationshipName, Class<T> externalizableClazz); 196 197 /** 198 * This method determines whether or not a bo class is externalizable. 199 * 200 * @param boClass 201 * @return 202 */ 203 public boolean isExternalizable(Class boClass); 204 205 /** 206 * @param boClass 207 * @return 208 */ 209 public boolean isExternalizableBusinessObjectLookupable(Class boClass); 210 211 /** 212 * @param boClass 213 * @return 214 */ 215 public boolean isExternalizableBusinessObjectInquirable(Class boClass); 216 217 /** 218 * @param <T> 219 * @param boClass 220 * @return 221 */ 222 public <T extends ExternalizableBusinessObject> T createNewObjectFromExternalizableClass(Class<T> boClass); 223 224 /** 225 * For a given ExternalizableBusinessObject interface, return the implementation class provided by this module. 226 */ 227 public <E extends ExternalizableBusinessObject> Class<E> getExternalizableBusinessObjectImplementation( 228 Class<E> externalizableBusinessObjectInterface); 229 230 /** 231 * This method determines whether or not this module is currently locked 232 */ 233 public boolean isLocked(); 234 } 235