org.kuali.rice.krad.lookup
Class LookupableImpl

java.lang.Object
  extended by org.kuali.rice.krad.uif.service.impl.ViewHelperServiceImpl
      extended by org.kuali.rice.krad.lookup.LookupableImpl
All Implemented Interfaces:
Serializable, Lookupable, ViewHelperService
Direct Known Subclasses:
AgendaLookupableHelperServiceImpl, GroupLookupableImpl, LookupableTravelImpl, PersonLookupableImpl, PropositionLookupableHelperServiceImpl, TravelLookupableImpl, UIRoleMemberLookupableImpl

public class LookupableImpl
extends ViewHelperServiceImpl
implements Lookupable

View helper service that implements Lookupable and executes a search using the LookupService.

Author:
Kuali Rice Team (rice.collab@kuali.org)
See Also:
LookupForm, LookupView, LookupService, Serialized Form

Constructor Summary
LookupableImpl()
           
 
Method Summary
 boolean allowsMaintenanceDeleteAction(Object dataObject)
          Determines if given data object has associated maintenance document that allows delete maintenance actions.
 boolean allowsMaintenanceEditAction(Object dataObject)
          Determines if given data object has associated maintenance document that allows edit maintenance actions.
 boolean allowsMaintenanceNewOrCopyAction()
          Determines if given data object has associated maintenance document that allows new or copy maintenance actions.
 void buildMaintenanceActionLink(Link actionLink, Object model, String maintenanceMethodToCall)
          Invoked to build a maintenance URL for a result row.
 void buildMultiValueSelectField(InputField selectField, Object model)
          Set the value for the input field control to contain the field conversion values for the line.
 void buildReturnUrlForResult(Link returnLink, Object model)
          Invoked to build the return URL for a result row.
 LookupableImpl copy()
          Creates a copy of this LookupableImpl.
protected  Collection<?> executeSearch(Map<String,String> adjustedSearchCriteria, List<String> wildcardAsLiteralSearchCriteria, boolean bounded, Integer searchResultsLimit)
          Invoked to execute the search with the given criteria and restrictions.
protected  void generateLookupResultsMessages(Map<String,String> searchCriteria, Collection<?> searchResults, boolean bounded, Integer searchResultsLimit)
          Generates messages for the user based on the search results.
protected  Map<String,InputField> getCriteriaFieldsForValidation(LookupView lookupView, LookupForm form)
          Returns the criteria fields in a map keyed by the field property name.
protected  DataObjectAuthorizationService getDataObjectAuthorizationService()
           
 Class<?> getDataObjectClass()
          Returns the class for the data object the lookup is configured with.
 DocumentDictionaryService getDocumentDictionaryService()
           
protected  EncryptionService getEncryptionService()
           
protected  LookupService getLookupService()
           
protected  String getMaintenanceActionUrl(LookupForm lookupForm, Object dataObject, String methodToCall, List<String> pkNames)
          Generates a URL to perform a maintenance action on the given result data object.
protected  String getMaintenanceDocumentTypeName()
          Returns the maintenance document type associated with the business object class or null if one does not exist.
protected  Map<String,String> getReturnKeyValues(LookupView lookupView, LookupForm lookupForm, Object dataObject)
          Returns a map of the configured return keys with their selected values.
protected  String getReturnUrl(LookupView lookupView, LookupForm lookupForm, Object dataObject)
          Builds the URL for returning the given data object result row.
protected  Properties getReturnUrlParameters(LookupView lookupView, LookupForm lookupForm, Object dataObject)
          Builds up a Properties object that will be used to provide the request parameters for the return URL link
protected  List<?> getSearchResultsForEBO(Map<String,String> searchCriteria, boolean unbounded)
          Performs a search against an ExternalizableBusinessObject by invoking the module service
protected  Map<String,String> getTranslatedReturnKeyValues(LookupView lookupView, LookupForm lookupForm, Object dataObject)
          Returns a map of the configured return keys translated to their corresponding field conversion with the associated values.
protected  List<String> identifyWildcardDisabledFields(LookupForm lookupForm, Map<String,String> searchCriteria)
          Determines which searchCriteria have been configured with wildcard characters disabled.
protected  boolean isResultReturnable(Object dataObject)
          Determines whether a given data object that's returned as one of the lookup's results is considered returnable, which means that for single-value lookups, a "return value" link may be rendered, and for multiple value lookups, a checkbox is rendered.
 Map<String,String> performClear(LookupForm form, Map<String,String> lookupCriteria)
          Invoked when the clear action is requested to reset the search fields to their initial default values.
 Collection<?> performSearch(LookupForm form, Map<String,String> searchCriteria, boolean bounded)
          Invoked to carry out the lookup search based on the given map of key/value search values.
protected  Map<String,String> processSearchCriteria(LookupForm lookupForm, Map<String,String> searchCriteria)
          Filters the search criteria to be used with the lookup.
 void setDataObjectAuthorizationService(DataObjectAuthorizationService dataObjectAuthorizationService)
           
 void setDataObjectClass(Class<?> dataObjectClass)
          Sets the class for the data object the lookup will be provided on.
 void setDocumentDictionaryService(DocumentDictionaryService documentDictionaryService)
           
 void setEncryptionService(EncryptionService encryptionService)
           
 void setLookupService(LookupService lookupService)
           
protected  void sortSearchResults(LookupForm form, List<?> searchResults)
          Sorts the given list of search results based on the lookup view's configured sort attributes.
protected  boolean validateSearchParameters(LookupForm form, Map<String,String> searchCriteria)
          Invoked to perform validation on the search criteria before the search is performed.
protected  void validateSearchParameterWildcardAndOperators(InputField inputField, String searchPropertyValue)
          Validates that any wildcards contained within the search value are valid wildcards and allowed for the property type for which the field is searching.
 
Methods inherited from class org.kuali.rice.krad.uif.service.impl.ViewHelperServiceImpl
addCustomContainerComponents, addLine, applyDefaultValues, applyDefaultValuesForCollectionLine, buildGrowlScript, buildInquiryLink, getConfigurationService, getDataDictionaryService, getDataObjectService, getDefaultValueForField, getExpressionEvaluatorFactory, getLegacyDataAdapter, getViewDictionaryService, linkAddedLine, logAndThrowRuntime, performAddLineValidation, performCustomApplyModel, performCustomFinalize, performCustomInitialization, performCustomViewFinalize, performCustomViewInitialization, performDeleteLineValidation, populateDefaultValueForField, populateViewFromRequestParameters, processAfterAddLine, processAfterDeleteLine, processAfterSaveLine, processAndAddLineObject, processBeforeAddLine, processBeforeSaveLine, processCollectionAddBlankLine, processCollectionAddLine, processCollectionDeleteLine, processCollectionSaveLine, processMultipleValueLookupResults, refreshReference, refreshReferences, retrieveEditModesAndActionFlags, setConfigurationService, setDataDictionaryService, setDataObjectService, setExpressionEvaluatorFactory, setLegacyDataAdapter, setViewContext, setViewDictionaryService
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.kuali.rice.krad.uif.service.ViewHelperService
addCustomContainerComponents, applyDefaultValues, applyDefaultValuesForCollectionLine, buildGrowlScript, buildInquiryLink, getDefaultValueForField, getExpressionEvaluatorFactory, performCustomApplyModel, performCustomFinalize, performCustomInitialization, performCustomViewFinalize, performCustomViewInitialization, populateDefaultValueForField, populateViewFromRequestParameters, processAfterAddLine, processAfterDeleteLine, processAfterSaveLine, processBeforeAddLine, processBeforeSaveLine, processCollectionAddBlankLine, processCollectionAddLine, processCollectionDeleteLine, processCollectionSaveLine, processMultipleValueLookupResults, refreshReference, refreshReferences, retrieveEditModesAndActionFlags, setViewContext
 

Constructor Detail

LookupableImpl

public LookupableImpl()
Method Detail

performSearch

public Collection<?> performSearch(LookupForm form,
                                   Map<String,String> searchCriteria,
                                   boolean bounded)
Invoked to carry out the lookup search based on the given map of key/value search values.

Specified by:
performSearch in interface Lookupable
Parameters:
form - lookup form instance containing the lookup data
searchCriteria - map of criteria currently set
bounded - indicates whether the results should be limited (if necessary) to the max search result limit configured
Returns:
the list of result objects, possibly bounded with CollectionIncomplete

executeSearch

protected Collection<?> executeSearch(Map<String,String> adjustedSearchCriteria,
                                      List<String> wildcardAsLiteralSearchCriteria,
                                      boolean bounded,
                                      Integer searchResultsLimit)
Invoked to execute the search with the given criteria and restrictions.

Parameters:
adjustedSearchCriteria - map of criteria that has been adjusted (encyrption, ebos, etc)
wildcardAsLiteralSearchCriteria - map of criteria to treat as literals (wildcards disabled)
bounded - indicates whether the search should be bounded
searchResultsLimit - for bounded searches, the result limit
Returns:
Collection collection of data object instances from the search results

processSearchCriteria

protected Map<String,String> processSearchCriteria(LookupForm lookupForm,
                                                   Map<String,String> searchCriteria)
Filters the search criteria to be used with the lookup.

Processing entails primarily of the removal of filtered and unused/blank search criteria. Encrypted field values are decrypted, and date range fields are combined into a single criteria entry.

In special cases additional non-valid criteria may be included. E.g. with the KIM User Control as a criteria the principal name may be passed so that it is displayed on the control. The filtering removes these values based on the viewPostMetadata. When calling the search directly (methodToCall=search) the viewPostMetadata is not set before filtering therefore non-valid criteria are not supported in these cases.

Parameters:
lookupForm - lookup form instance containing the lookup data
searchCriteria - map of criteria to process
Returns:
map of processed criteria

identifyWildcardDisabledFields

protected List<String> identifyWildcardDisabledFields(LookupForm lookupForm,
                                                      Map<String,String> searchCriteria)
Determines which searchCriteria have been configured with wildcard characters disabled.

Parameters:
lookupForm - form used to collect search criteria
searchCriteria - Map of property names and values to use as search parameters
Returns:
List of property names which have wildcard characters disabled

validateSearchParameters

protected boolean validateSearchParameters(LookupForm form,
                                           Map<String,String> searchCriteria)
Invoked to perform validation on the search criteria before the search is performed.

Parameters:
form - lookup form instance containing the lookup data
searchCriteria - map of criteria where key is search property name and value is search value (which can include wildcards)
Returns:
boolean true if validation was successful, false if there were errors and the search should not be performed

validateSearchParameterWildcardAndOperators

protected void validateSearchParameterWildcardAndOperators(InputField inputField,
                                                           String searchPropertyValue)
Validates that any wildcards contained within the search value are valid wildcards and allowed for the property type for which the field is searching.

Parameters:
inputField - attribute field instance for the field that is being searched
searchPropertyValue - value given for field to search for

generateLookupResultsMessages

protected void generateLookupResultsMessages(Map<String,String> searchCriteria,
                                             Collection<?> searchResults,
                                             boolean bounded,
                                             Integer searchResultsLimit)
Generates messages for the user based on the search results.

Messages are generated for the number of results, if the results exceed the result limit, and if the search was done using the primary keys for the data object.

Parameters:
searchCriteria - map of search criteria that was used for the search
searchResults - list of result data objects from the search
bounded - whether the search was bounded
searchResultsLimit - maximum number of search results to return

sortSearchResults

protected void sortSearchResults(LookupForm form,
                                 List<?> searchResults)
Sorts the given list of search results based on the lookup view's configured sort attributes.

First if the posted view exists we grab the sort attributes from it. This will take into account expressions that might have been configured on the sort attributes. If the posted view does not exist (because we did a search from a get request or form session storage is off), we get the sort attributes from the view that we will be rendered (and was initialized before controller call). However, expressions will not be evaluated yet, thus if expressions were configured we don't know the results and can not sort the list

Parameters:
form - lookup form instance containing view information
searchResults - list of search results to sort

getSearchResultsForEBO

protected List<?> getSearchResultsForEBO(Map<String,String> searchCriteria,
                                         boolean unbounded)
Performs a search against an ExternalizableBusinessObject by invoking the module service

Parameters:
searchCriteria - map of criteria currently set
unbounded - indicates whether the complete result should be returned. When set to false the result is limited (if necessary) to the max search result limit configured.
Returns:
list of result objects, possibly bounded

performClear

public Map<String,String> performClear(LookupForm form,
                                       Map<String,String> lookupCriteria)
Invoked when the clear action is requested to reset the search fields to their initial default values.

Specified by:
performClear in interface Lookupable
Parameters:
form - lookup form instance containing the lookup data
lookupCriteria - map of criteria currently set
Returns:
map of criteria with field values reset to defaults

buildReturnUrlForResult

public void buildReturnUrlForResult(Link returnLink,
                                    Object model)
Invoked to build the return URL for a result row.

Based on the line contained in the field context, the URL for returning the role is constructed and set as the href for the link. If a return link cannot be constructed the link should be set to not render

Specified by:
buildReturnUrlForResult in interface Lookupable
Parameters:
returnLink - link that will be used to render the return URL
model - lookup form containing the data

isResultReturnable

protected boolean isResultReturnable(Object dataObject)
Determines whether a given data object that's returned as one of the lookup's results is considered returnable, which means that for single-value lookups, a "return value" link may be rendered, and for multiple value lookups, a checkbox is rendered.

Note that this can be part of an authorization mechanism, but not the complete authorization mechanism. The component that invoked the lookup/ lookup caller (e.g. document, nesting lookup, etc.) needs to check that the object that was passed to it was returnable as well because there are ways around this method (e.g. crafting a custom return URL).

Parameters:
dataObject - an object from the search result set
Returns:
true if the row is returnable and false if it is not

getReturnUrl

protected String getReturnUrl(LookupView lookupView,
                              LookupForm lookupForm,
                              Object dataObject)
Builds the URL for returning the given data object result row.

Note return URL will only be built if a return location is specified on the lookup form

Parameters:
lookupView - lookup view instance containing lookup configuration
lookupForm - lookup form instance containing the data
dataObject - data object instance for the current line and for which the return URL is being built
Returns:
String return URL or blank if URL cannot be built

getReturnUrlParameters

protected Properties getReturnUrlParameters(LookupView lookupView,
                                            LookupForm lookupForm,
                                            Object dataObject)
Builds up a Properties object that will be used to provide the request parameters for the return URL link

Parameters:
lookupView - lookup view instance containing lookup configuration
lookupForm - lookup form instance containing the data
dataObject - data object instance for the current line and for which the return URL is being built
Returns:
Properties instance containing request parameters for return URL

getTranslatedReturnKeyValues

protected Map<String,String> getTranslatedReturnKeyValues(LookupView lookupView,
                                                          LookupForm lookupForm,
                                                          Object dataObject)
Returns a map of the configured return keys translated to their corresponding field conversion with the associated values.

Parameters:
lookupView - lookup view instance containing lookup configuration
lookupForm - lookup form instance containing the data
dataObject - data object instance
Returns:
Map map of translated return key/value pairs

getReturnKeyValues

protected Map<String,String> getReturnKeyValues(LookupView lookupView,
                                                LookupForm lookupForm,
                                                Object dataObject)
Returns a map of the configured return keys with their selected values.

Parameters:
lookupView - lookup view instance containing lookup configuration
lookupForm - lookup form instance containing the data
dataObject - data object instance
Returns:
Map map of return key/value pairs

buildMaintenanceActionLink

public void buildMaintenanceActionLink(Link actionLink,
                                       Object model,
                                       String maintenanceMethodToCall)
Invoked to build a maintenance URL for a result row.

Based on the line contained in the field context and the given maintenance method that should be called a URL is constructed and set as the action on the action link. If a maintenance link cannot be constructed the action link should be set to not render

Specified by:
buildMaintenanceActionLink in interface Lookupable
Parameters:
actionLink - link that will be used to return the maintenance URL
model - lookup form containing the data
maintenanceMethodToCall - name of the method that should be invoked in the maintenance controller

getMaintenanceActionUrl

protected String getMaintenanceActionUrl(LookupForm lookupForm,
                                         Object dataObject,
                                         String methodToCall,
                                         List<String> pkNames)
Generates a URL to perform a maintenance action on the given result data object.

Will build a URL containing keys of the data object to invoke the given maintenance action method within the maintenance controller

Parameters:
lookupForm - lookup form
dataObject - data object instance for the line to build the maintenance action link for
methodToCall - method name on the maintenance controller that should be invoked
pkNames - list of primary key field names for the data object whose key/value pairs will be added to the maintenance link
Returns:
String URL link for the maintenance action

buildMultiValueSelectField

public void buildMultiValueSelectField(InputField selectField,
                                       Object model)
Set the value for the input field control to contain the field conversion values for the line.

Creates and populate the value of the input field control. This value is built according to LookupForm.getFieldConversions() and allows for client side population of the returned fields without having to do an additional server call.

Specified by:
buildMultiValueSelectField in interface Lookupable
Parameters:
selectField - the InputField used to mark the lookup row as selected
model - lookup form containing the model data

allowsMaintenanceNewOrCopyAction

public boolean allowsMaintenanceNewOrCopyAction()
Determines if given data object has associated maintenance document that allows new or copy maintenance actions.

Returns:
boolean true if the maintenance new or copy action is allowed for the data object instance, false otherwise

allowsMaintenanceEditAction

public boolean allowsMaintenanceEditAction(Object dataObject)
Determines if given data object has associated maintenance document that allows edit maintenance actions.

Parameters:
dataObject - data object
Returns:
boolean true if the maintenance edit action is allowed for the data object instance, false otherwise

allowsMaintenanceDeleteAction

public boolean allowsMaintenanceDeleteAction(Object dataObject)
Determines if given data object has associated maintenance document that allows delete maintenance actions.

Parameters:
dataObject - data object
Returns:
boolean true if the maintenance delete action is allowed for the data object instance, false otherwise

getMaintenanceDocumentTypeName

protected String getMaintenanceDocumentTypeName()
Returns the maintenance document type associated with the business object class or null if one does not exist.

Returns:
String representing the maintenance document type name

getCriteriaFieldsForValidation

protected Map<String,InputField> getCriteriaFieldsForValidation(LookupView lookupView,
                                                                LookupForm form)
Returns the criteria fields in a map keyed by the field property name.

Parameters:
lookupView - lookup view instance to pull criteria fields from
form - lookup form instance containing the lookup data
Returns:
map of criteria fields

getDataObjectClass

public Class<?> getDataObjectClass()
Returns the class for the data object the lookup is configured with.

Specified by:
getDataObjectClass in interface Lookupable
Returns:
Class data object class

setDataObjectClass

public void setDataObjectClass(Class<?> dataObjectClass)
Sets the class for the data object the lookup will be provided on.

Specified by:
setDataObjectClass in interface Lookupable
Parameters:
dataObjectClass - - data object class for lookup

getDataObjectAuthorizationService

protected DataObjectAuthorizationService getDataObjectAuthorizationService()

setDataObjectAuthorizationService

public void setDataObjectAuthorizationService(DataObjectAuthorizationService dataObjectAuthorizationService)

getDocumentDictionaryService

public DocumentDictionaryService getDocumentDictionaryService()

setDocumentDictionaryService

public void setDocumentDictionaryService(DocumentDictionaryService documentDictionaryService)

getLookupService

protected LookupService getLookupService()

setLookupService

public void setLookupService(LookupService lookupService)

getEncryptionService

protected EncryptionService getEncryptionService()

setEncryptionService

public void setEncryptionService(EncryptionService encryptionService)

copy

public LookupableImpl copy()
Creates a copy of this LookupableImpl.

Returns:
a copy of this LookupableImpl


Copyright © 2005–2015 The Kuali Foundation. All rights reserved.