001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.sys.document.workflow; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 021 import org.kuali.kfs.sys.context.SpringContext; 022 import org.kuali.rice.kew.docsearch.DocSearchCriteriaDTO; 023 import org.kuali.rice.kew.docsearch.DocSearchDTO; 024 import org.kuali.rice.kew.docsearch.SearchAttributeCriteriaComponent; 025 import org.kuali.rice.kew.docsearch.StandardDocumentSearchResultProcessor; 026 import org.kuali.rice.kew.doctype.bo.DocumentType; 027 import org.kuali.rice.kns.datadictionary.DocumentEntry; 028 import org.kuali.rice.kns.datadictionary.SearchingAttribute; 029 import org.kuali.rice.kns.datadictionary.SearchingTypeDefinition; 030 import org.kuali.rice.kns.service.DataDictionaryService; 031 import org.kuali.rice.kns.web.ui.Column; 032 033 public class KFSDocumentSearchResultProcessor extends StandardDocumentSearchResultProcessor { 034 035 @Override 036 public List<Column> constructColumnList(DocSearchCriteriaDTO criteria,List<DocSearchDTO> docSearchResultRows) { 037 List<Column> tempColumns = new ArrayList<Column>(); 038 List<Column> customDisplayColumnNames = getAndSetUpCustomDisplayColumns(criteria); 039 if ((!getShowAllStandardFields()) && (getOverrideSearchableAttributes())) { 040 // use only what is contained in displayColumns 041 this.addAllCustomColumns(tempColumns, criteria, customDisplayColumnNames); 042 } else if (getShowAllStandardFields() && (getOverrideSearchableAttributes())) { 043 // do standard fields and use displayColumns for searchable 044 // attributes 045 this.addStandardSearchColumns(tempColumns,docSearchResultRows); 046 this.addAllCustomColumns(tempColumns, criteria,customDisplayColumnNames); 047 } else if ((!getShowAllStandardFields()) && (!getOverrideSearchableAttributes())) { 048 // do displayColumns and then do standard searchable attributes 049 this.addCustomStandardCriteriaColumns(tempColumns, criteria, customDisplayColumnNames); 050 this.addSearchableAttributeColumnsNoOverrides(tempColumns,criteria); 051 } else if (getShowAllStandardFields() && !getOverrideSearchableAttributes()) { 052 this.addStandardSearchColumns(tempColumns,docSearchResultRows); 053 } 054 055 List<Column> columns = new ArrayList<Column>(); 056 this.addRouteHeaderIdColumn(columns); 057 columns.addAll(tempColumns); 058 this.addRouteLogColumn(columns); 059 return columns; 060 } 061 062 063 /** 064 * Checks the Data Dictionary to verify the visibility of the fields and adds them to the result. 065 * @param criteria used to get DocumentEntry 066 * @return List of DocumentSearchColumns to be displayed 067 */ 068 protected List<Column> getCustomDisplayColumns(DocSearchCriteriaDTO criteria) { 069 070 SearchAttributeCriteriaComponent displayCriteria = getSearchableAttributeByFieldName("displayType"); 071 List<Column> columns = new ArrayList<Column>(); 072 073 074 boolean documentDisplay = ((displayCriteria != null) && ("document".equals(displayCriteria.getValue()))); 075 if (documentDisplay) { 076 077 DocumentType documentType = getDocumentType(criteria.getDocTypeFullName()); 078 DocumentEntry entry = getDocumentEntry(documentType); 079 if (entry != null && entry.getWorkflowAttributes() != null) { 080 DataDictionaryService ddService = SpringContext.getBean(DataDictionaryService.class); 081 082 List<SearchingTypeDefinition> searchingTypeDefinitions = entry.getWorkflowAttributes().getSearchingTypeDefinitions(); 083 List<String> searchableAttributeFieldNames = new ArrayList<String>(); 084 085 for (SearchingTypeDefinition searchingTypeDefinition : searchingTypeDefinitions) { 086 SearchingAttribute searchingAttribute = searchingTypeDefinition.getSearchingAttribute(); 087 if (searchingAttribute.isShowAttributeInResultSet()){ 088 String label = ddService.getAttributeLabel(searchingAttribute.getBusinessObjectClassName(), searchingAttribute.getAttributeName()); 089 searchableAttributeFieldNames.add(label); 090 addColumnUsingKey(columns, searchingAttribute.getAttributeName(), label, null); 091 } 092 } 093 addSearchableAttributeColumnsBasedOnFields(columns, getSearchCriteria(), searchableAttributeFieldNames); 094 } 095 096 } 097 return columns; 098 099 } 100 101 @Override 102 public List<Column> getAndSetUpCustomDisplayColumns(DocSearchCriteriaDTO criteria) { 103 List<Column> columns = getCustomDisplayColumns(criteria); 104 return super.setUpCustomDisplayColumns(criteria, columns); 105 } 106 107 108 /** 109 * Retrieves the data dictionary entry for the document being operated on by the given route context 110 * @param context the current route context 111 * @return the data dictionary document entry 112 */ 113 protected DocumentEntry getDocumentEntry(DocumentType documentType) { 114 return SpringContext.getBean(DataDictionaryService.class).getDataDictionary().getDocumentEntry(documentType.getName()); 115 } 116 117 @Override 118 public boolean getShowAllStandardFields() { 119 if (searchUsingDocumentInformationResults()) { 120 return false; 121 } 122 return true; 123 } 124 125 @Override 126 public boolean getOverrideSearchableAttributes() { 127 // TODO Auto-generated method stub 128 return false; 129 } 130 131 protected boolean searchUsingDocumentInformationResults() { 132 SearchAttributeCriteriaComponent displayCriteria = getSearchableAttributeByFieldName("displayType"); 133 return ((displayCriteria != null) && ("document".equals(displayCriteria.getValue()))); 134 } 135 136 }