private static final JsonElement createValueElement(String key, Configuration configuration) {
		
		String value = configuration.getString(key);
		Object actualValue = configuration.getProperty(key);
		Matcher floatMatcher = IS_FLOATING_NUMBER_PATTERN.matcher(value);
		floatMatcher.find();
		
		Matcher intMatcher = IS_INTEGER_PATTERN.matcher(value);
		intMatcher.find();
		
		boolean isDecimal = floatMatcher.matches();
		boolean isInteger = intMatcher.matches();
		boolean isArray = List.class.isAssignableFrom(actualValue.getClass());
		
		if(isArray){
			JsonArray jsonArray = new JsonArray();
			for(String arrayValue : configuration.getStringArray(key)){
				jsonArray.add(new JsonPrimitive(arrayValue));
			}
			return jsonArray;
		}
		
		if(isInteger){
			return new JsonPrimitive(configuration.getInt(key));
		}
		
		if(isDecimal){
			return new JsonPrimitive(configuration.getBigDecimal(key));
		}
		
		// boolean and other complex type mappings happen under the hood by GSON
		return new JsonPrimitive(value.toString());
	}