Overwork the plugin

* extract the username encoding and URL replacing into a method
* replace the username also in changeUrl (without logging, if no
  occurence of %s can be found)
diff --git a/src/main/java/org/typo3/gerrit/plugins/avatars/typo3org/ExternalUrlAvatarProvider.java b/src/main/java/org/typo3/gerrit/plugins/avatars/typo3org/ExternalUrlAvatarProvider.java
index 8f29462..b0bbbc5 100644
--- a/src/main/java/org/typo3/gerrit/plugins/avatars/typo3org/ExternalUrlAvatarProvider.java
+++ b/src/main/java/org/typo3/gerrit/plugins/avatars/typo3org/ExternalUrlAvatarProvider.java
@@ -39,9 +39,11 @@
 @Singleton
 public class ExternalUrlAvatarProvider implements AvatarProvider {
 
+  private static final String REPLACE_MARKER = "%s";
+
   private final boolean ssl;
   private String externalAvatarUrl;
-  private final String avatarChangeUrl;
+  private String avatarChangeUrl;
 
   @Inject
   ExternalUrlAvatarProvider(@CanonicalWebUrl @Nullable String canonicalUrl,
@@ -53,19 +55,6 @@
 
   @Override
   public String getUrl(IdentifiedUser forUser, int imageSize) {
-    String username = forUser.getUserName();
-
-    if (username == null) {
-      return null;
-    }
-
-    try {
-      username = URLEncoder.encode(username, "UTF-8");
-    } catch (UnsupportedEncodingException e) {
-      Logger log = LoggerFactory.getLogger(ExternalUrlAvatarProvider.class);
-      log.warn("Weird thing, UTF-8 as encoding is not supported");
-      return null;
-    }
 
     if (externalAvatarUrl == null) {
       Logger log = LoggerFactory.getLogger(ExternalUrlAvatarProvider.class);
@@ -73,9 +62,9 @@
       return null;
     }
 
-    if (!externalAvatarUrl.contains("%s")) {
+    if (!externalAvatarUrl.contains(REPLACE_MARKER)) {
         Logger log = LoggerFactory.getLogger(ExternalUrlAvatarProvider.class);
-        log.warn("Avatar provider url '" + externalAvatarUrl + "' does not contain %s, so cannot replace it with username");
+        log.warn("Avatar provider url '" + externalAvatarUrl + "' does not contain " + REPLACE_MARKER + ", so cannot replace it with username");
         return null;
     }
 
@@ -83,14 +72,31 @@
     	externalAvatarUrl = externalAvatarUrl.replace("http://", "https://");
     }
 
-    // replace the %s inside the URL with the username
-    String url = externalAvatarUrl.replaceFirst("%s", username);
-
-    return url;
+    return replaceInUrl(externalAvatarUrl, forUser.getUserName());
   }
 
   @Override
   public String getChangeAvatarUrl(IdentifiedUser forUser) {
-    return avatarChangeUrl;
+
+    return replaceInUrl(avatarChangeUrl, forUser.getUserName());
+  }
+
+
+  private String replaceInUrl(String url, String replacement) {
+
+    if (replacement == null || url == null || url.contains(REPLACE_MARKER) == false) {
+      return url;
+    }
+
+    String encodedReplacement = null;
+    try {
+      encodedReplacement = URLEncoder.encode(replacement, "UTF-8");
+    } catch (UnsupportedEncodingException e) {
+      Logger log = LoggerFactory.getLogger(ExternalUrlAvatarProvider.class);
+      log.warn("Weird thing, UTF-8 as encoding is not supported");
+      return null;
+    }
+
+    return url.replace(REPLACE_MARKER, encodedReplacement);
   }
 }