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.module.purap.businessobject.options; 017 018 import java.util.ArrayList; 019 import java.util.Arrays; 020 import java.util.Collection; 021 import java.util.Collections; 022 import java.util.Comparator; 023 import java.util.Iterator; 024 import java.util.List; 025 import java.util.Set; 026 027 import org.kuali.kfs.module.purap.PurapConstants.PurchaseOrderStatuses; 028 import org.kuali.kfs.module.purap.businessobject.PurchaseOrderStatus; 029 import org.kuali.kfs.module.purap.businessobject.Status; 030 import org.kuali.kfs.sys.context.SpringContext; 031 import org.kuali.rice.kns.service.KeyValuesService; 032 import org.kuali.rice.core.util.KeyLabelPair; 033 034 /** 035 * Value Finder for Purchase Order Statuses. 036 */ 037 public class PurchaseOrderStatusValuesFinder extends PurApStatusKeyValuesBase { 038 039 /** 040 * Overide this method to sort the PO statuses for proper display. 041 * 042 * @see org.kuali.kfs.module.purap.businessobject.options.PurApStatusKeyValuesBase#getKeyValues() 043 */ 044 public List getKeyValues() { 045 // get all PO statuses 046 KeyValuesService boService = SpringContext.getBean(KeyValuesService.class); 047 Collection<Status> statuses = boService.findAll(getStatusClass()); 048 049 Set<String> incompleteCodes = PurchaseOrderStatuses.INCOMPLETE_STATUSES; 050 Set<String> completeCodes = PurchaseOrderStatuses.COMPLETE_STATUSES; 051 052 List<Status> incompleteStatus = new ArrayList<Status>(); 053 List<Status> completeStatus = new ArrayList<Status>(); 054 List<Status> unsorted = new ArrayList<Status>(); 055 056 for (Status status : statuses) { 057 if (incompleteCodes.contains(status.getStatusCode())) { 058 incompleteStatus.add(status); 059 } else if (completeCodes.contains(status.getStatusCode())) { 060 completeStatus.add(status); 061 } else { 062 unsorted.add(status); 063 } 064 } 065 066 Comparator<Status> comparator = new Status(); 067 Collections.sort(incompleteStatus, comparator); 068 Collections.sort(completeStatus, comparator); 069 Collections.sort(unsorted, comparator); 070 071 // generate output 072 List labels = new ArrayList(); 073 074 labels.add(new KeyLabelPair("INCOMPLETE", "INCOMPLETE STATUSES")); 075 for (Status status : incompleteStatus) { 076 labels.add(new KeyLabelPair(status.getStatusCode(), "- "+status.getStatusDescription())); 077 } 078 079 labels.add(new KeyLabelPair("COMPLETE", "COMPLETE STATUSES")); 080 for (Status status : completeStatus) { 081 labels.add(new KeyLabelPair(status.getStatusCode(), "- "+status.getStatusDescription())); 082 } 083 084 if (!unsorted.isEmpty()) 085 labels.add(new KeyLabelPair("UNSORTED", "Unsorted Statuses")); 086 for (Status status : unsorted) { 087 labels.add(new KeyLabelPair(status.getStatusCode(), "- "+status.getStatusDescription())); 088 } 089 090 091 return labels; 092 } 093 094 /** 095 * @see org.kuali.kfs.module.purap.businessobject.options.PurApStatusKeyValuesBase#getStatusClass() 096 */ 097 @Override 098 public Class getStatusClass() { 099 return PurchaseOrderStatus.class; 100 } 101 102 103 }