Coverage Report - org.kuali.spring.util.SystemAwarePropertiesRetriever
 
Classes in this File Line Coverage Branch Coverage Complexity
SystemAwarePropertiesRetriever
0%
0/39
0%
0/18
3.333
SystemAwarePropertiesRetriever$1
0%
0/1
N/A
3.333
 
 1  
 package org.kuali.spring.util;
 2  
 
 3  
 import org.springframework.util.Assert;
 4  
 
 5  
 public class SystemAwarePropertiesRetriever extends PropertiesRetriever {
 6  0
     SystemPropertiesMode mode = SystemPropertiesMode.SYSTEM_PROPERTIES_MODE_FALLBACK;
 7  0
     boolean searchEnvironment = true;
 8  
 
 9  
     public SystemAwarePropertiesRetriever() {
 10  0
         this(SystemPropertiesMode.SYSTEM_PROPERTIES_MODE_FALLBACK, true);
 11  0
     }
 12  
 
 13  
     public SystemAwarePropertiesRetriever(SystemPropertiesMode mode, boolean searchEnvironment) {
 14  0
         super();
 15  0
         this.mode = mode;
 16  0
         this.searchEnvironment = searchEnvironment;
 17  0
     }
 18  
 
 19  
     @Override
 20  
     public String retrieveValue(String key) {
 21  0
         Assert.notNull(mode);
 22  0
         String environmentProperty = SystemUtils.getEnvironmentPropertyIgnoreExceptions(key);
 23  0
         String property = super.retrieveValue(key);
 24  0
         String systemProperty = SystemUtils.getSystemPropertyIgnoreExceptions(key);
 25  
 
 26  0
         if (isUseSystemProperty(systemProperty, property)) {
 27  0
             return systemProperty;
 28  
         }
 29  0
         if (isUseEnvironmentProperty(environmentProperty, property)) {
 30  0
             return environmentProperty;
 31  
         }
 32  0
         return property;
 33  
     }
 34  
 
 35  
     protected boolean isUseSystemProperty(String systemProperty, String regularProperty) {
 36  
         // The system property is null, don't use it
 37  0
         if (systemProperty == null) {
 38  0
             return false;
 39  
         }
 40  
 
 41  0
         switch (mode) {
 42  
         case SYSTEM_PROPERTIES_MODE_NEVER:
 43  
             // We've been instructed to always ignore system properties
 44  0
             return false;
 45  
         case SYSTEM_PROPERTIES_MODE_OVERRIDE:
 46  
             // The system property is not null and system properties always win
 47  0
             return true;
 48  
         case SYSTEM_PROPERTIES_MODE_FALLBACK:
 49  
             // The system property is not null, but we can only use it if the regular property is null
 50  0
             if (regularProperty == null) {
 51  0
                 return true;
 52  
             } else {
 53  0
                 return false;
 54  
             }
 55  
         default:
 56  
             // The system properties mode is unknown
 57  0
             throw new IllegalArgumentException("Unknown system properties mode [" + mode + "] Available modes are "
 58  
                     + SystemPropertiesMode.values());
 59  
         }
 60  
     }
 61  
 
 62  
     protected boolean isUseEnvironmentProperty(String environmentProperty, String regularProperty) {
 63  
         // Always ignore environment properties
 64  0
         if (!searchEnvironment) {
 65  0
             return false;
 66  
         }
 67  
 
 68  
         // The environment property is null, don't use it
 69  0
         if (environmentProperty == null) {
 70  0
             return false;
 71  
         }
 72  
 
 73  
         // Never use an environment property over a regular property
 74  0
         if (regularProperty != null) {
 75  0
             return false;
 76  
         }
 77  
 
 78  
         // The regular property is null and the environment property is not
 79  0
         return true;
 80  
     }
 81  
 
 82  
     public boolean isSearchEnvironment() {
 83  0
         return searchEnvironment;
 84  
     }
 85  
 
 86  
     public void setSearchEnvironment(boolean searchEnvironment) {
 87  0
         this.searchEnvironment = searchEnvironment;
 88  0
     }
 89  
 
 90  
     public SystemPropertiesMode getMode() {
 91  0
         return mode;
 92  
     }
 93  
 
 94  
     public void setMode(SystemPropertiesMode mode) {
 95  0
         this.mode = mode;
 96  0
     }
 97  
 
 98  
 }