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 }