package gw.search uses gw.api.database.IQueryBeanResult uses gw.api.util.DisplayableException uses java.io.Serializable /** * Abstract class defining a search criteria used for searching via the UI. */ @ReadOnly abstract class EntitySearchCriteria implements Serializable { /** * Return null if we have valid search criteria. Otherwise, return the error message. */ abstract protected property get InvalidSearchCriteriaMessage() : String /** * Return true if we have valid search criteria. */ final property get HasValidSearchCriteria() : boolean { return InvalidSearchCriteriaMessage == null } /** * Return null if we have sufficient information for a meaningful search. Otherwise * return the error message. */ abstract protected property get MinimumSearchCriteriaMessage() : String /** * Return true if we have sufficient information for a meaningful search. */ final property get HasMinimumSearchCriteria() : boolean { return MinimumSearchCriteriaMessage == null } /** * Execute a search for this search criteria and return the result. */ abstract protected function doSearch() : IQueryBeanResult /** * Throw the MinimumSearchCriteriaMessage as a DisplayableException if * this search criteria doesn't have enough information. Otherwise * execute the search and return the result. */ final function performSearch() : IQueryBeanResult { if (not HasValidSearchCriteria) { throw new DisplayableException(InvalidSearchCriteriaMessage) } if (not HasMinimumSearchCriteria) { throw new DisplayableException(MinimumSearchCriteriaMessage) } return doSearch() as IQueryBeanResult } }