1 /* 2 * Copyright 2007-2008 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); you may not use this file except in 5 * compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.opensource.org/licenses/ecl2.php 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS 10 * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific 11 * language governing permissions and limitations under the License. 12 */ 13 package org.kuali.rice.kns.web.struts.action; 14 15 import org.apache.commons.lang.StringUtils; 16 import org.apache.struts.util.MessageResources; 17 import org.apache.struts.util.PropertyMessageResourcesFactory; 18 import org.kuali.rice.core.config.ConfigContext; 19 import org.kuali.rice.kns.util.KNSConstants; 20 import org.kuali.rice.kns.web.struts.action.KualiPropertyMessageResources; 21 22 /** 23 * A custom MessageResourceFactory that delegates to the KualiConfigurationService's pre-loaded properties. 24 * 25 * This factory can be used in struts-config.xml files by specifying a factory attribute in the <message-resources/> tag. 26 * Example: 27 * <message-resources 28 * factory="org.kuali.rice.kns.web.struts.action.KualiPropertyMessageResourcesFactory" 29 * parameter="SampleApplicationResources" /> 30 */ 31 public class KualiPropertyMessageResourcesFactory extends PropertyMessageResourcesFactory { 32 33 private static final long serialVersionUID = 9045578011738154255L; 34 35 /** 36 * Uses KualiPropertyMessageResources, which allows multiple property files to be loaded into the defalt message set. 37 * 38 * @see org.apache.struts.util.MessageResourcesFactory#createResources(java.lang.String) 39 */ 40 @Override 41 public MessageResources createResources(String config) { 42 if (StringUtils.isBlank(config)) { 43 final String propertyConfig = (String)ConfigContext.getCurrentContextConfig().getProperties().get(KNSConstants.MESSAGE_RESOURCES); 44 config = removeSpacesAround(propertyConfig); 45 } 46 return new KualiPropertyMessageResources(this, config, this.returnNull); 47 } 48 49 /** 50 * Removes the spaces around the elements on a csv list of elements. 51 * <p> 52 * A null input will return a null output. 53 * </p> 54 * 55 * @param csv a list of elements in csv format e.g. foo, bar, baz 56 * @return a list of elements in csv format without spaces e.g. foo,bar,baz 57 */ 58 private String removeSpacesAround(String csv) { 59 if (csv == null) { 60 return null; 61 } 62 63 final StringBuilder result = new StringBuilder(); 64 for (final String value : csv.split(",")) { 65 if (!"".equals(value.trim())) { 66 result.append(value.trim()); 67 result.append(","); 68 } 69 } 70 71 //remove trailing comma 72 int i = result.lastIndexOf(","); 73 if (i != -1) { 74 result.deleteCharAt(i); 75 } 76 77 return result.toString(); 78 } 79 80 }