001 /** 002 * Copyright 2005-2013 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.setViewTemplates(new ArrayList<String>()); 059 060 // clear all view pages exception the current page 061 PageGroup currentPage = view.getCurrentPage(); 062 063 List<Component> pages = new ArrayList<Component>(); 064 pages.add(currentPage); 065 view.setItems(pages); 066 067 cleanContainer(view); 068 069 view.getViewIndex().clearIndexesAfterRender(); 070 } 071 072 /** 073 * Cleans a collection group instance removing the items and collection prototypes (note add line fields 074 * are keep around to support the add line action) 075 * 076 * @param collectionGroup collection group instance to clean 077 */ 078 public static void cleanCollectionGroup(CollectionGroup collectionGroup) { 079 collectionGroup.setAddLineLabel(null); 080 collectionGroup.setAddLineActions(new ArrayList<Action>()); 081 collectionGroup.setLineActions(new ArrayList<Action>()); 082 collectionGroup.setSubCollections(new ArrayList<CollectionGroup>()); 083 collectionGroup.setActiveCollectionFilter(null); 084 collectionGroup.setFilters(new ArrayList<CollectionFilter>()); 085 086 cleanContainer(collectionGroup); 087 } 088 089 /** 090 * General purpose method to clean any container, removes all nested components except the items list 091 * 092 * @param container container instance to clean 093 */ 094 public static void cleanContainer(Container container) { 095 container.setHeader(null); 096 container.setFooter(null); 097 container.setHelp(null); 098 container.setLayoutManager(null); 099 container.setInstructionalMessage(null); 100 container.setTemplateOptions(new HashMap<String, String>()); 101 container.setComponentModifiers(new ArrayList<ComponentModifier>()); 102 container.setPropertyReplacers(new ArrayList<PropertyReplacer>()); 103 } 104 105 /** 106 * Cleans an input field instance removing the control and inherited component properties 107 * 108 * @param inputField input field instance to clean 109 */ 110 public static void cleanInputField(InputField inputField) { 111 inputField.setControl(null); 112 inputField.setInstructionalMessage(null); 113 inputField.setConstraintMessage(null); 114 inputField.setInquiry(null); 115 inputField.setLabel(null); 116 inputField.setTemplateOptions(new HashMap<String, String>()); 117 inputField.setComponentModifiers(new ArrayList<ComponentModifier>()); 118 inputField.setPropertyReplacers(new ArrayList<PropertyReplacer>()); 119 } 120 }