/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.coa.document; import java.util.HashMap; import java.util.List; import java.util.Map; import org.kuali.kfs.coa.service.OrganizationService; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.FinancialSystemMaintainable; import org.kuali.rice.kns.document.MaintenanceDocument; import org.kuali.rice.kns.maintenance.Maintainable; import org.kuali.rice.kns.web.ui.Field; import org.kuali.rice.kns.web.ui.Row; import org.kuali.rice.kns.web.ui.Section; /** * This class overrides the getCoreSections method to provide specific field conversions for the postal code */ public class KualiOrgMaintainable extends FinancialSystemMaintainable { private static final long serialVersionUID = -3182120468758958991L; protected static final String KUALI_ORG_SECTION = "Edit Organization Code"; /** * Provides special field conversions for the Org.organizationZipCode * * @see org.kuali.rice.kns.maintenance.Maintainable#getCoreSections(org.kuali.rice.kns.maintenance.Maintainable) * * KRAD Conversion: Maintainable performs the logic to adds new fields to sections if * organization zip code field exists in the core sections. * The fields definitions are built here for the new section. They are not in data dictionary. */ @Override public List getCoreSections(MaintenanceDocument document, Maintainable oldMaintainable) { boolean fieldFound = false; boolean sectionFound = false; // walk the sections List<Section> sections = super.getCoreSections(document, oldMaintainable); for ( Section section : sections ) { // if this is the section we're looking for if (section.getSectionTitle().equalsIgnoreCase(KUALI_ORG_SECTION)) { // mark that we found the section sectionFound = true; // walk the rows List rows = section.getRows(); for ( Row row : section.getRows() ) { // walk the fields for ( Field field : row.getFields() ) { // if this is the field we're looking for ... if (field.getPropertyName().equalsIgnoreCase(KFSPropertyConstants.ORGANIZATION_ZIP_CODE)) { // build the fieldConversions for the UserID field lookup Map<String,String> fieldConversions = new HashMap<String,String>(3); fieldConversions.put(KFSPropertyConstants.CODE, KFSPropertyConstants.ORGANIZATION_ZIP_CODE); fieldConversions.put(KFSPropertyConstants.POSTAL_STATE_CODE, KFSPropertyConstants.ORGANIZATION_STATE_CODE); fieldConversions.put(KFSPropertyConstants.POSTAL_CITY_NAME, KFSPropertyConstants.ORGANIZATION_CITY_NAME); // add the fieldConversions, lookupParameters and the lookup class field.setFieldConversions(fieldConversions); // field.setLookupParameters(lookupParameters); // field.setQuickFinderClassNameImpl(Person.class.getName()); // mark that we've found the field fieldFound = true; break; } } // if we found the field, we don't need the rest of the rows if ( fieldFound ) { break; } } break; // we've found the section, no need to look further } } // if the section no longer exists, fail loudly if (!sectionFound) { throw new RuntimeException("There is no longer a section titled '" + KUALI_ORG_SECTION + "'. " + "As a result, the lookup setup will not work as expected and the maintenance document will be broken. The correct name needs to be set in the Constant in this class."); } // if the field was not found, fail loudly if (!fieldFound) { throw new RuntimeException("There is no longer a field titled '" + KFSPropertyConstants.ORGANIZATION_ZIP_CODE + "'. " + "As a result, the lookup setup will not work as expected and the maintenance document will be broken. The correct name needs to be set in the KFSPropertyConstants class."); } return sections; } /** * Override to purge the parent org cache when an organization is saved. */ @Override public void saveBusinessObject() { super.saveBusinessObject(); SpringContext.getBean(OrganizationService.class).flushParentOrgCache(); } }