## ============================================================================ ## Filename : FWAbstractDAOTemplate.vm ## Note(s) : This template is used to generate the base class for all DAO classes. ## ## Note: The generated code is dependent on the ThinkUI framework. ## Please refer to the SQL Client documentation for details. ## ## Copyright (c) 2007 ThinkUI Software Inc. All rights reserved. ## ============================================================================ ## ## **************************************************************************** ## The following variables are available in this template. For more ## information on any of the following variable, please refer to the user guide. ## **************************************************************************** ## $projectName ## $authorName ## $headerText ## $className ## $packageName ## $subPackageName ## $prjPkgName ## $prjClassPrefix ## $superClassName ## $date ## $codeGen ## #if ($packageName) package $packageName; #end #parse( "ClassHeaderInclude.vm" ) import thinkui.common.SearchCriteriaData; import thinkui.common.SearchResultsData; import thinkui.db.PseudoColumnValue; import thinkui.db.criteria.SearchCriteria; import thinkui.db.dao.AbstractDataAccessObject; import thinkui.db.dao.DataObjectManager; import thinkui.db.dao.QueryData; import ${subPackageName}.objects.AuditTrailDataObject; /** * Extends AbstractDataAccessObject to provided common methods for ${projectName} DAOs. */ public abstract class ${className} extends AbstractDataAccessObject { /** * ${className} constructor. */ public ${className}(DataObjectManager dataObjectManager) { super(dataObjectManager); } /** * Helper method to add the from/to create datetime criteria (if any). * If neither the from/to create datetime is specified, the original search criteria * is returned unmodified. * @return a search criteria with the from/to create datetime criteria added (if any). */ protected final SearchCriteria addFromToCreateDateTimeCriteria( SearchCriteriaData searchData, SearchCriteria criteria) { return addFromToDateTimeCriteria( searchData, criteria, AuditTrailDataObject.CREATE_DATETIME); } /** * Helper method to add the from/to date criteria (if any). * If neither the from/to date is specified, the original search criteria * is returned unmodified. * @return a search criteria with the from/to date criteria added (if any). */ protected final SearchCriteria addFromToDateTimeCriteria( SearchCriteriaData searchData, SearchCriteria criteria, String attrName) { java.util.Date fromDate = (java.util.Date) searchData.getValue("FROM_" + attrName); java.util.Date toDate = (java.util.Date) searchData.getValue("TO_" + attrName); if (fromDate != null) { criteria = criteria.and(attrName, SearchCriteria.GT_OR_EQ, fromDate); } if (toDate != null) { criteria = criteria.and(attrName, SearchCriteria.LT_OR_EQ, toDate); } return criteria; } /** * Helper method to populate the given audit trail data object with the PseudoColumnValue.NOW * for the create/update datetime columns (if any). The create datetime column is only * populated if it is not currently readonly. The update datetime column is only * populated if the column is not currently modified (i.e. a date has already been * explicitly specified). */ protected final void populatePseudoColumns(AuditTrailDataObject auditObject) { // Automatically populate the create/update columns if necessary. // Note: we can't rely only the database to populate these columns // because not all databases will support triggers/default values. if (!auditObject.isReadOnly(AuditTrailDataObject.CREATE_DATETIME)) { if (auditObject .isValueEmpty(AuditTrailDataObject.CREATE_DATETIME)) { auditObject.setValue( AuditTrailDataObject.CREATE_DATETIME, PseudoColumnValue.NOW); } } if (!auditObject.isModified(AuditTrailDataObject.UPDATE_DATETIME)) { auditObject.setValue( AuditTrailDataObject.UPDATE_DATETIME, PseudoColumnValue.NOW); } } /** * Helper method to set various search results parameters based on the values * specified in the specified query data. */ protected final void copyResults( SearchResultsData searchResults, QueryData queryData) { searchResults.setStartIndex(queryData.getStartIndex()); searchResults.setObjects(queryData.getSelectedObjects()); searchResults.setDataClass(queryData.getDataClass()); searchResults.setMoreObjects(queryData.hasMoreObjects()); if (!queryData.hasMoreObjects()) { searchResults.setCount( queryData.getStartIndex() + queryData.getSelectedObjects().size()); } } }