diff --git a/confluence-xml/pom.xml b/confluence-xml/pom.xml
index 095ded06..8eeacb76 100644
--- a/confluence-xml/pom.xml
+++ b/confluence-xml/pom.xml
@@ -51,6 +51,11 @@
true
+
+ org.apache.commons
+ commons-lang3
+ 3.20.0
+
org.apache.commons
commons-compress
@@ -171,6 +176,11 @@
+
+ org.xwiki.contrib.user-common
+ user-common-formatter
+ 1.0.0-SNAPSHOT
+
diff --git a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/ConfluenceConverter.java b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/ConfluenceConverter.java
index 6a4e23ea..bb22bfc9 100644
--- a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/ConfluenceConverter.java
+++ b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/ConfluenceConverter.java
@@ -31,6 +31,7 @@
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.commons.lang3.StringUtils;
+import org.contrib.xwiki.usercommon.formatter.UserFormatterFactory;
import org.slf4j.Logger;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
@@ -135,6 +136,9 @@ public class ConfluenceConverter implements ConfluenceFilterReferenceConverter
@Inject
private Provider componentManagerProvider;
+ @Inject
+ private UserFormatterFactory userFormatterFactory;
+
/**
* @param name the name to validate
* @return the validated name
@@ -198,7 +202,7 @@ public String toGroupReferenceName(String groupName)
return groupName;
}
- return UsernameCleaner.format(format, Map.of("group", groupName));
+ return userFormatterFactory.create(Map.of("group", groupName)).format(format);
}
/**
@@ -240,7 +244,7 @@ public String convertUserNameToReferenceName(String userName)
return FORBIDDEN_USER_CHARACTERS.matcher(userName).replaceAll("_");
}
- return UsernameCleaner.format(userFormat, Map.of("username", userName));
+ return userFormatterFactory.create(Map.of("username", userName)).format(userFormat);
}
/**
diff --git a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/UsernameCleaner.java b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/UsernameCleaner.java
deleted file mode 100644
index 3c2eb560..00000000
--- a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/UsernameCleaner.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * See the NOTICE file distributed with this work for additional
- * information regarding copyright ownership.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.xwiki.contrib.confluence.filter.internal.input;
-
-import org.apache.commons.lang3.RegExUtils;
-import org.apache.commons.text.StringSubstitutor;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Clean usernames. Adapted from ldap-authenticator (DefaultLDAPDocumentHelper.java).
- */
-final class UsernameCleaner
-{
- private UsernameCleaner()
- {
- // empty
- }
-
- private static String clean(String str)
- {
- return RegExUtils.removePattern(str, "[\\.\\:\\s,@\\^\\/]");
- }
-
- private static void putVariable(Map map, String key, String value)
- {
- if (value != null) {
- map.put(key, value);
-
- map.put(key + ".lowerCase", value.toLowerCase());
- map.put(key + "._lowerCase", value.toLowerCase());
- map.put(key + ".upperCase", value.toUpperCase());
- map.put(key + "._upperCase", value.toUpperCase());
-
- String cleanValue = clean(value);
- map.put(key + ".clean", cleanValue);
- map.put(key + "._clean", cleanValue);
- map.put(key + ".clean.lowerCase", cleanValue.toLowerCase());
- map.put(key + "._clean._lowerCase", cleanValue.toLowerCase());
- map.put(key + ".clean.upperCase", cleanValue.toUpperCase());
- map.put(key + "._clean._upperCase", cleanValue.toUpperCase());
- }
- }
-
- private static Map createFormatMap(Map variables)
- {
- Map formatMap = new HashMap<>();
- for (Map.Entry variable : variables.entrySet()) {
- putVariable(formatMap, variable.getKey(), variable.getValue());
- }
- return formatMap;
- }
-
- private static String formatSubject(StringSubstitutor substitutor, String format)
- {
- return substitutor.replace(format);
- }
-
- static String format(String format, Map variables)
- {
- return formatSubject(new StringSubstitutor(createFormatMap(variables)), format);
- }
-}
diff --git a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/macros/ImgMacroConverter.java b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/macros/ImgMacroConverter.java
index 3b093130..7a95b75d 100644
--- a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/macros/ImgMacroConverter.java
+++ b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/macros/ImgMacroConverter.java
@@ -19,7 +19,6 @@
*/
package org.xwiki.contrib.confluence.filter.internal.macros;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
diff --git a/confluence-xml/src/test/java/org/xwiki/contrib/confluence/filter/internal/input/DefaultLinkMapperTest.java b/confluence-xml/src/test/java/org/xwiki/contrib/confluence/filter/internal/input/DefaultLinkMapperTest.java
index d630a100..525f4758 100644
--- a/confluence-xml/src/test/java/org/xwiki/contrib/confluence/filter/internal/input/DefaultLinkMapperTest.java
+++ b/confluence-xml/src/test/java/org/xwiki/contrib/confluence/filter/internal/input/DefaultLinkMapperTest.java
@@ -22,6 +22,9 @@
import com.xpn.xwiki.XWiki;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.test.reference.ReferenceComponentList;
+
+import org.contrib.xwiki.usercommon.formatter.internal.DefaultUserFormatter;
+import org.contrib.xwiki.usercommon.formatter.internal.DefaultUserFormatterFactory;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -70,6 +73,8 @@
@ComponentList({
DefaultConfluenceInputContext.class,
ConfluenceXMLPackage.class,
+ DefaultUserFormatter.class,
+ DefaultUserFormatterFactory.class,
ConfluenceConverter.class
})
@ComponentTest