Merge branch '1.3.x'

This commit is contained in:
Stephane Nicoll 2016-06-27 12:08:04 +02:00
commit 6631136f91
3 changed files with 45 additions and 19 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2015 the original author or authors. * Copyright 2012-2016 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -17,11 +17,10 @@
package org.springframework.boot.configurationprocessor.metadata; package org.springframework.boot.configurationprocessor.metadata;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
@ -38,7 +37,7 @@ import org.springframework.util.ObjectUtils;
*/ */
public class ConfigurationMetadata { public class ConfigurationMetadata {
private static final Pattern CAMEL_CASE_PATTERN = Pattern.compile("([^A-Z-])([A-Z])"); private static final List<Character> SEPARATORS = Arrays.asList('-', '_');
private final MultiValueMap<String, ItemMetadata> items; private final MultiValueMap<String, ItemMetadata> items;
@ -160,23 +159,23 @@ public class ConfigurationMetadata {
} }
static String toDashedCase(String name) { static String toDashedCase(String name) {
Matcher matcher = CAMEL_CASE_PATTERN.matcher(name); StringBuilder sb = new StringBuilder();
StringBuffer result = new StringBuffer(); Character previous = null;
while (matcher.find()) { for (char current : name.toCharArray()) {
matcher.appendReplacement(result, getDashed(matcher)); if (SEPARATORS.contains(current)) {
} sb.append("-");
matcher.appendTail(result); }
return result.toString().toLowerCase(); else if (Character.isUpperCase(current) && previous != null
} && !SEPARATORS.contains(previous)) {
sb.append("-").append(current);
}
else {
sb.append(current);
}
previous = current;
private static String getDashed(Matcher matcher) {
String first = matcher.group(1);
String second = matcher.group(2);
if (first.equals("_")) {
// not a word for the binder
return first + second;
} }
return first + "-" + second; return sb.toString().toLowerCase();
} }
private static <T extends Comparable<T>> List<T> flattenValues( private static <T extends Comparable<T>> List<T> flattenValues(

View File

@ -32,6 +32,16 @@ public class ConfigurationMetadataTests {
assertThat(toDashedCase("simpleCamelCase")).isEqualTo("simple-camel-case"); assertThat(toDashedCase("simpleCamelCase")).isEqualTo("simple-camel-case");
} }
@Test
public void toDashedCaseUpperCamelCaseSuffix() {
assertThat(toDashedCase("myDLQ"), is("my-d-l-q"));
}
@Test
public void toDashedCaseUpperCamelCaseMiddle() {
assertThat(toDashedCase("someDLQKey"), is("some-d-l-q-key"));
}
@Test @Test
public void toDashedCaseWordsUnderscore() { public void toDashedCaseWordsUnderscore() {
assertThat(toDashedCase("Word_With_underscore")) assertThat(toDashedCase("Word_With_underscore"))
@ -62,6 +72,8 @@ public class ConfigurationMetadataTests {
@Test @Test
public void toDashedCaseUppercase() { public void toDashedCaseUppercase() {
assertThat(toDashedCase("UPPERCASE")).isEqualTo("uppercase"); assertThat(toDashedCase("UPPERCASE")).isEqualTo("uppercase");
public void toDashedCaseMultipleUnderscores() {
assertThat(toDashedCase("super___crazy"), is("super---crazy"));
} }
@Test @Test

View File

@ -170,6 +170,12 @@ public class PropertiesConfigurationFactoryTests {
assertThat(foo.fooBarURI).isEqualTo("baz"); assertThat(foo.fooBarURI).isEqualTo("baz");
} }
@Test
public void propertyWithAllUpperCaseInTheMiddleCanBeBound() throws Exception {
Foo foo = createFoo("foo-d-l-q-bar:baz");
assertEquals("baz", foo.fooDLQBar);
}
private Foo createFoo(final String values) throws Exception { private Foo createFoo(final String values) throws Exception {
setupFactory(); setupFactory();
return bindFoo(values); return bindFoo(values);
@ -204,6 +210,8 @@ public class PropertiesConfigurationFactoryTests {
private String fooBarURI; private String fooBarURI;
private String fooDLQBar;
public String getSpringFooBaz() { public String getSpringFooBaz() {
return this.spring_foo_baz; return this.spring_foo_baz;
} }
@ -244,6 +252,13 @@ public class PropertiesConfigurationFactoryTests {
this.fooBarURI = fooBarURI; this.fooBarURI = fooBarURI;
} }
public String getFooDLQBar() {
return this.fooDLQBar;
}
public void setFooDLQBar(String fooDLQBar) {
this.fooDLQBar = fooDLQBar;
}
} }
} }