001 /** 002 * Copyright 2010-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.common.util.spring; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 import java.util.Map; 021 import java.util.Properties; 022 023 import org.kuali.common.util.Assert; 024 import org.kuali.common.util.FormatUtils; 025 import org.kuali.common.util.PropertyUtils; 026 import org.kuali.common.util.property.PropertiesContext; 027 import org.slf4j.Logger; 028 import org.slf4j.LoggerFactory; 029 import org.springframework.beans.factory.FactoryBean; 030 import org.springframework.util.CollectionUtils; 031 032 /** 033 * @deprecated 034 */ 035 @Deprecated 036 public class ProjectPropertiesLoaderFactoryBean implements FactoryBean<Properties> { 037 038 private static final Logger logger = LoggerFactory.getLogger(ProjectPropertiesLoaderFactoryBean.class); 039 040 List<String> locations; 041 boolean singleton = true; 042 org.kuali.common.util.property.ProjectPropertiesComparator comparator; 043 044 @Override 045 public Properties getObject() { 046 Assert.isFalse(CollectionUtils.isEmpty(locations), "locations is empty"); 047 long start = System.currentTimeMillis(); 048 List<org.kuali.common.util.property.ProjectProperties> pps = new ArrayList<org.kuali.common.util.property.ProjectProperties>(); 049 // Extract any ProjectProperties beans anywhere in the context 050 for (String location : locations) { 051 Map<String, org.kuali.common.util.property.ProjectProperties> beans = SpringUtils.getAllBeans(location, org.kuali.common.util.property.ProjectProperties.class); 052 logger.info("Located {} sets of project properties", beans.size()); 053 054 List<org.kuali.common.util.property.ProjectProperties> list = new ArrayList<org.kuali.common.util.property.ProjectProperties>(); 055 // Add them to a list 056 for (org.kuali.common.util.property.ProjectProperties bean : beans.values()) { 057 list.add(bean); 058 } 059 // Sort them by sequence (only relevant if there is more than one which there typically is not) 060 pps.addAll(list); 061 } 062 063 // Cycle through the list we have adding in properties as we go 064 Properties properties = new Properties(); 065 for (org.kuali.common.util.property.ProjectProperties pp : pps) { 066 PropertiesContext ctx = pp.getPropertiesContext(); 067 Properties combined = PropertyUtils.combine(properties, ctx.getProperties()); 068 ctx.setProperties(combined); 069 Properties loaded = PropertyUtils.load(ctx); 070 properties.putAll(loaded); 071 } 072 String elapsed = FormatUtils.getTime(System.currentTimeMillis() - start); 073 logger.info("Loaded {} properties. Total time: {}", properties.size(), elapsed); 074 return properties; 075 } 076 077 @Override 078 public Class<Properties> getObjectType() { 079 return Properties.class; 080 } 081 082 @Override 083 public boolean isSingleton() { 084 return singleton; 085 } 086 087 public void setSingleton(boolean singleton) { 088 this.singleton = singleton; 089 } 090 091 public List<String> getLocations() { 092 return locations; 093 } 094 095 public void setLocations(List<String> locations) { 096 this.locations = locations; 097 } 098 099 public org.kuali.common.util.property.ProjectPropertiesComparator getComparator() { 100 return comparator; 101 } 102 103 public void setComparator(org.kuali.common.util.property.ProjectPropertiesComparator comparator) { 104 this.comparator = comparator; 105 } 106 107 }