001    /**
002     * Copyright 2010-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.common.util.property.processor;
017    
018    import java.util.List;
019    import java.util.Properties;
020    
021    import org.kuali.common.util.Mode;
022    import org.kuali.common.util.PropertyUtils;
023    import org.kuali.common.util.property.Constants;
024    import org.kuali.common.util.property.GlobalPropertiesMode;
025    
026    public class GlobalOverrideProcessor implements PropertyProcessor {
027    
028            GlobalPropertiesMode globalPropertiesMode;
029            Mode propertyOverwriteMode;
030            List<String> includes;
031            List<String> excludes;
032    
033            public GlobalOverrideProcessor() {
034                    this(Constants.DEFAULT_GLOBAL_PROPERTIES_MODE, Constants.DEFAULT_PROPERTY_OVERWRITE_MODE);
035            }
036    
037            public GlobalOverrideProcessor(GlobalPropertiesMode globalPropertiesMode) {
038                    this(globalPropertiesMode, Constants.DEFAULT_PROPERTY_OVERWRITE_MODE);
039            }
040    
041            public GlobalOverrideProcessor(GlobalPropertiesMode globalPropertiesMode, Mode propertyOverwriteMode) {
042                    super();
043                    this.globalPropertiesMode = globalPropertiesMode;
044                    this.propertyOverwriteMode = propertyOverwriteMode;
045            }
046    
047            @Override
048            public void process(Properties properties) {
049                    Properties global = PropertyUtils.getProperties(properties, globalPropertiesMode);
050                    List<String> keys = PropertyUtils.getSortedKeys(properties, includes, excludes);
051                    for (String key : keys) {
052                            String newValue = global.getProperty(key);
053                            PropertyUtils.addOrOverrideProperty(properties, key, newValue, propertyOverwriteMode);
054                    }
055            }
056    
057            public GlobalPropertiesMode getGlobalPropertiesMode() {
058                    return globalPropertiesMode;
059            }
060    
061            public void setGlobalPropertiesMode(GlobalPropertiesMode globalPropertiesMode) {
062                    this.globalPropertiesMode = globalPropertiesMode;
063            }
064    
065            public Mode getPropertyOverwriteMode() {
066                    return propertyOverwriteMode;
067            }
068    
069            public void setPropertyOverwriteMode(Mode propertyOverwriteMode) {
070                    this.propertyOverwriteMode = propertyOverwriteMode;
071            }
072    
073            public List<String> getIncludes() {
074                    return includes;
075            }
076    
077            public void setIncludes(List<String> includes) {
078                    this.includes = includes;
079            }
080    
081            public List<String> getExcludes() {
082                    return excludes;
083            }
084    
085            public void setExcludes(List<String> excludes) {
086                    this.excludes = excludes;
087            }
088    
089    }