Optimize USER_NAME_PATTERN string and its usage

The following issues from [1] are addressed by this change:
1. common pattern part was extracted
2. USER_NAME_PATTERN string is used to indicate that account
couldn't have been created as it is not compliant with it
3. number of lines was reduced in USER_NAME_PATTERN by combining
relevant characters together

In addition:
USER_NAME_PATTERN_LAST is derived from USER_NAME_PATTERN_FIRST
as they are equal.

[1] https://gerrit-review.googlesource.com/c/gerrit/+/194650

Change-Id: I02ce9c6b6d3b121050178851e2121b3419e7b830
Signed-off-by: Jacek Centkowski <jcentkowski@collab.net>
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java
index f1c7056..a167ad2 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java
@@ -44,15 +44,14 @@
  * </ul>
  */
 public final class Account {
-  public static final String USER_NAME_PATTERN_FIRST = "[a-zA-Z0-9]";
-  public static final String USER_NAME_PATTERN_REST = "[a-zA-Z0-9._@-]";
-  public static final String USER_NAME_PATTERN_LAST = "[a-zA-Z0-9]";
+  private static final String USER_NAME_COMMON_PATTERN = "a-zA-Z0-9";
+  public static final String USER_NAME_PATTERN_FIRST = "[" + USER_NAME_COMMON_PATTERN + "]";
+  public static final String USER_NAME_PATTERN_REST = "[" + USER_NAME_COMMON_PATTERN + "._@-]";
+  public static final String USER_NAME_PATTERN_LAST = USER_NAME_PATTERN_FIRST;
 
   /** Regular expression that {@link #userName} must match. */
   public static final String USER_NAME_PATTERN =
-      "^"
-          + //
-          "("
+      "^("
           + //
           USER_NAME_PATTERN_FIRST
           + //
@@ -65,9 +64,7 @@
           + //
           USER_NAME_PATTERN_FIRST
           + //
-          ")"
-          + //
-          "$";
+          ")$";
 
   /** Key local to Gerrit to identify a user. */
   public static class Id extends IntKey<com.google.gwtorm.client.Key<?>> {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/CreateAccount.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/CreateAccount.java
index 451246b..1f14b19 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/CreateAccount.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/CreateAccount.java
@@ -14,6 +14,7 @@
 
 package com.google.gerrit.server.account;
 
+import static com.google.gerrit.reviewdb.client.Account.USER_NAME_PATTERN;
 import static com.google.gerrit.server.account.ExternalId.SCHEME_MAILTO;
 
 import com.google.gerrit.audit.AuditService;
@@ -113,7 +114,7 @@
 
     if (!username.matches(Account.USER_NAME_PATTERN)) {
       throw new BadRequestException(
-          "Username '" + username + "' must contain only letters, numbers, _, - or .");
+          "Username '" + username + "' must comply with [" + USER_NAME_PATTERN + "] pattern.");
     }
 
     Set<AccountGroup.Id> groups = parseGroups(input.groups);