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.coa.businessobject.inquiry; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 021 import org.kuali.kfs.coa.service.OrganizationReversionService; 022 import org.kuali.kfs.sys.businessobject.inquiry.KfsInquirableImpl; 023 import org.kuali.kfs.sys.context.SpringContext; 024 import org.kuali.rice.kns.bo.BusinessObject; 025 import org.kuali.rice.kns.web.ui.Field; 026 import org.kuali.rice.kns.web.ui.Row; 027 import org.kuali.rice.kns.web.ui.Section; 028 029 public class OrganizationReversionInquirable extends KfsInquirableImpl { 030 private OrganizationReversionService organizationReversionService; 031 032 /** 033 * Overridden to take out details with inactive categories 034 * @see org.kuali.rice.kns.inquiry.KualiInquirableImpl#getSections(org.kuali.rice.kns.bo.BusinessObject) 035 */ 036 @Override 037 public List<Section> getSections(BusinessObject bo) { 038 List<Section> sections = super.getSections(bo); 039 if (organizationReversionService == null) { 040 organizationReversionService = SpringContext.getBean(OrganizationReversionService.class); 041 } 042 for (Section section : sections) { 043 for (Row row : section.getRows()) { 044 List<Field> updatedFields = new ArrayList<Field>(); 045 for (Field field : row.getFields()) { 046 if (shouldIncludeField(field)) { 047 updatedFields.add(field); 048 } 049 } 050 row.setFields(updatedFields); 051 } 052 } 053 return sections; 054 } 055 056 /** 057 * Determines if the given field should be included in the updated row, once we take out inactive categories 058 * @param field the field to check 059 * @return true if the field should be included (ie, it doesn't describe an organization reversion with an inactive category); false otherwise 060 */ 061 protected boolean shouldIncludeField(Field field) { 062 boolean includeField = true; 063 if (field.getContainerRows() != null) { 064 for (Row containerRow : field.getContainerRows()) { 065 for (Field containedField : containerRow.getFields()) { 066 if (containedField.getPropertyName().matches("organizationReversionDetail\\[\\d+\\]\\.organizationReversionCategoryCode")) { 067 final String categoryValue = containedField.getPropertyValue(); 068 includeField = organizationReversionService.isCategoryActive(categoryValue); 069 } 070 } 071 } 072 } 073 return includeField; 074 } 075 }