001 /** 002 * Copyright 2005-2012 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.rice.krad.uif.util; 017 018 import org.kuali.rice.krad.uif.component.Component; 019 import org.kuali.rice.krad.uif.component.PropertyReplacer; 020 import org.kuali.rice.krad.uif.container.CollectionFilter; 021 import org.kuali.rice.krad.uif.container.CollectionGroup; 022 import org.kuali.rice.krad.uif.container.Container; 023 import org.kuali.rice.krad.uif.container.PageGroup; 024 import org.kuali.rice.krad.uif.element.Action; 025 import org.kuali.rice.krad.uif.field.InputField; 026 import org.kuali.rice.krad.uif.modifier.ComponentModifier; 027 import org.kuali.rice.krad.uif.view.View; 028 029 import java.util.ArrayList; 030 import java.util.HashMap; 031 import java.util.List; 032 033 /** 034 * Utility class for trimming component instances for storage 035 * 036 * <p> 037 * Invoked to trim the view instance before storing on the form as the post view. Certain information is keep 038 * around to support post methods that need to operate on the previous view configuration. Examples include component 039 * refresh and collection add/delete line. 040 * </p> 041 * 042 * @author Kuali Rice Team (rice.collab@kuali.org) 043 */ 044 public class ViewCleaner { 045 046 /** 047 * Cleans a view instance removing all pages except the current page and then invoking the view 048 * index to perform cleaning on contained components 049 * 050 * @param view - view instance to clean 051 */ 052 public static void cleanView(View view) { 053 view.setApplicationHeader(null); 054 view.setApplicationFooter(null); 055 view.setNavigation(null); 056 view.setPage(null); 057 view.setViewMenuLink(null); 058 view.setClientSideState(new HashMap<String, Object>()); 059 view.setViewTemplates(new ArrayList<String>()); 060 061 // clear all view pages exception the current page 062 PageGroup currentPage = view.getCurrentPage(); 063 064 List<Component> pages = new ArrayList<Component>(); 065 pages.add(currentPage); 066 view.setItems(pages); 067 068 cleanContainer(view); 069 070 view.getViewIndex().clearIndexesAfterRender(); 071 } 072 073 /** 074 * Cleans a collection group instance removing the items and collection prototypes (note add line fields 075 * are keep around to support the add line action) 076 * 077 * @param collectionGroup - collection group instance to clean 078 */ 079 public static void cleanCollectionGroup(CollectionGroup collectionGroup) { 080 collectionGroup.setAddLineLabel(null); 081 collectionGroup.setAddLineActions(new ArrayList<Action>()); 082 collectionGroup.setLineActions(new ArrayList<Action>()); 083 collectionGroup.setSubCollections(new ArrayList<CollectionGroup>()); 084 collectionGroup.setActiveCollectionFilter(null); 085 collectionGroup.setFilters(new ArrayList<CollectionFilter>()); 086 087 cleanContainer(collectionGroup); 088 } 089 090 /** 091 * General purpose method to clean any container, removes all nested components except the items list 092 * 093 * @param container - container instance to clean 094 */ 095 public static void cleanContainer(Container container) { 096 container.setHeader(null); 097 container.setFooter(null); 098 container.setHelp(null); 099 container.setLayoutManager(null); 100 container.setInstructionalMessage(null); 101 container.setTemplateOptions(new HashMap<String, String>()); 102 container.setComponentModifiers(new ArrayList<ComponentModifier>()); 103 container.setPropertyReplacers(new ArrayList<PropertyReplacer>()); 104 } 105 106 /** 107 * Cleans an input field instance removing the control and inherited component properties 108 * 109 * @param inputField - input field instance to clean 110 */ 111 public static void cleanInputField(InputField inputField) { 112 inputField.setControl(null); 113 inputField.setInstructionalMessage(null); 114 inputField.setConstraintMessage(null); 115 inputField.setInquiry(null); 116 inputField.setLabel(null); 117 inputField.setTemplateOptions(new HashMap<String, String>()); 118 inputField.setComponentModifiers(new ArrayList<ComponentModifier>()); 119 inputField.setPropertyReplacers(new ArrayList<PropertyReplacer>()); 120 } 121 }