This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new 115f294968 OAK-11753: Remove usage of Guava base.CaseFormat (#2336)
115f294968 is described below
commit 115f294968ac589a0eb138a3f68b3afabd74b2ef
Author: Julian Reschke <[email protected]>
AuthorDate: Wed Jul 2 21:19:11 2025 +0200
OAK-11753: Remove usage of Guava base.CaseFormat (#2336)
---
.../index/elastic/index/ElasticCustomAnalyzer.java | 3 +--
.../index/ElasticCustomAnalyzerMappings.java | 3 +--
.../index/elastic/index/ElasticIndexHelper.java | 22 ++++++++++++++++++++++
.../elastic/index/ElasticIndexHelperTest.java | 19 +++++++++++++++++++
4 files changed, 43 insertions(+), 4 deletions(-)
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzer.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzer.java
index 78eb71460b..95d5c22ebc 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzer.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzer.java
@@ -24,7 +24,6 @@ import
co.elastic.clients.elasticsearch._types.analysis.TokenFilterDefinition;
import co.elastic.clients.elasticsearch._types.analysis.TokenizerDefinition;
import co.elastic.clients.elasticsearch.indices.IndexSettingsAnalysis;
import co.elastic.clients.json.JsonData;
-import org.apache.jackrabbit.guava.common.base.CaseFormat;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.PropertyState;
@@ -350,7 +349,7 @@ public class ElasticCustomAnalyzer {
// and take the last part
String name = anlClassTokens[anlClassTokens.length - 1];
// all options in elastic are in snake case
- name = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, name);
+ name = ElasticIndexHelper.convertUpperCamelToLowerUnderscore(name);
// if it ends with analyzer we need to get rid of it
if (name.endsWith("_analyzer")) {
name = name.substring(0, name.length() - "_analyzer".length());
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzerMappings.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzerMappings.java
index 640c85e9c9..24d580c180 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzerMappings.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticCustomAnalyzerMappings.java
@@ -16,7 +16,6 @@
*/
package org.apache.jackrabbit.oak.plugins.index.elastic.index;
-import org.apache.jackrabbit.guava.common.base.CaseFormat;
import org.apache.lucene.analysis.AbstractAnalysisFactory;
import org.apache.lucene.analysis.charfilter.MappingCharFilterFactory;
import org.apache.lucene.analysis.cjk.CJKBigramFilterFactory;
@@ -233,7 +232,7 @@ public class ElasticCustomAnalyzerMappings {
LUCENE_ELASTIC_TRANSFORMERS.put(AbstractAnalysisFactory.class,
luceneParams ->
luceneParams.entrySet().stream()
.collect(Collectors.toMap(
- entry ->
CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, entry.getKey()),
+ entry ->
ElasticIndexHelper.convertUpperCamelToLowerUnderscore(entry.getKey()),
Map.Entry::getValue, // keep the original value
(oldValue, newValue) -> oldValue, // in case
of duplicate keys, keep the old value
LinkedHashMap::new // preserve the original
order
diff --git
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelper.java
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelper.java
index f7f40c0450..fe484d7b1f 100644
---
a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelper.java
+++
b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelper.java
@@ -408,6 +408,28 @@ class ElasticIndexHelper {
return typeMapping.properties();
}
+ /**
+ * Convert a String from (upper case) CamelCase to lowercase underscore
+ * @param string
+ * @return converted string (best effort)
+ */
+ protected static String convertUpperCamelToLowerUnderscore(String string) {
+ StringBuilder result = new StringBuilder();
+ for (char c : string.toCharArray()) {
+ // start?
+ if (result.length() == 0) {
+ result.append(Character.toLowerCase(c));
+ } else {
+ if (Character.isUpperCase(c)) {
+ result.append('_');
+ }
+ result.append(Character.toLowerCase(c));
+ }
+ }
+
+ return result.toString();
+ }
+
//
https://discuss.elastic.co/t/reusing-internal-implementation-to-transform-json-mapping-to-es-mapping/300597/3
/**
diff --git
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelperTest.java
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelperTest.java
index 02b28fb016..0186f459ef 100644
---
a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelperTest.java
+++
b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/index/ElasticIndexHelperTest.java
@@ -36,6 +36,7 @@ import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import java.util.Map;
+import java.util.function.Function;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
@@ -392,4 +393,22 @@ public class ElasticIndexHelperTest {
assertThat(status._kind(), is(Property.Kind.Keyword));
}
+ private void testCamelConversion(Function<String, String> f) {
+ assertEquals("foo_bar", f.apply("FooBar"));
+ assertEquals("foo_bar", f.apply("fooBar"));
+ assertEquals("foo _bar", f.apply("foo Bar"));
+ assertEquals("foo _bar", f.apply("Foo Bar"));
+ assertEquals("f_o_o__b_a_r", f.apply("FOO_BAR"));
+ assertEquals("foo__bar", f.apply("Foo_Bar"));
+ assertEquals("foo_bar ", f.apply("FooBar "));
+ assertEquals(" _foo_bar", f.apply(" FooBar"));
+ assertEquals(" _foo_bar", f.apply(" FooBar"));
+ }
+
+
+ // verify that convertUpperCamelToLowerUnderscore does what it's supposed
to do (see OAK-11753)
+ @Test
+ public void testCamelConversionOurs() {
+
testCamelConversion(ElasticIndexHelper::convertUpperCamelToLowerUnderscore);
+ }
}