code: @Nullable
  	private static <T> T valueOrProperty(@Nullable final T value, @Nonnull final Property property, @Nullable final T defaultValue) {
  		if (!valueNullOrEmpty(value)) {
  			LOGGER.trace("using provided argument value {} for property {}", value, property);
  			return value;
  		} else if (hasProperty(property)) {
  			final T propertyValue = getProperty(property);
  			LOGGER.trace("using value {} from config file for property {}", propertyValue, property);
  			return propertyValue;
  		} else {
  			LOGGER.trace("no value provided as argument or in config file for property {}, using default value {}", property, defaultValue);
  			return defaultValue;
  		}
  	}
docs: Returns the given value if not null and not empty, otherwise tries to resolve the given property and if still not found resort to the default value if
  provided.
  <p>
  Null or blank values are never allowed, so they are always ignored.
  
  @return The value if not null or else the value from config file if provided or else <code>defaultValue</code>.