001/**
002 * Copyright 2010-2014 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 */
016package org.kuali.common.util.spring;
017
018import java.util.ArrayList;
019import java.util.List;
020import java.util.Map;
021import java.util.Properties;
022
023import org.kuali.common.util.Assert;
024import org.kuali.common.util.FormatUtils;
025import org.kuali.common.util.PropertyUtils;
026import org.kuali.common.util.property.PropertiesContext;
027import org.slf4j.Logger;
028import org.slf4j.LoggerFactory;
029import org.springframework.beans.factory.FactoryBean;
030import org.springframework.util.CollectionUtils;
031
032/**
033 * @deprecated
034 */
035@Deprecated
036public 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}