/* * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.vcs.log.util; import com.intellij.openapi.util.Couple; import com.intellij.vcs.log.VcsUser; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; public class VcsUserUtil { @NotNull private static final Pattern NAME_PATTERN = Pattern.compile("(\\w+)[\\W_](\\w+)"); @NotNull private static final Pattern PRINTABLE_ASCII_PATTERN = Pattern.compile("[ -~]*"); @NotNull public static String toExactString(@NotNull VcsUser user) { return getString(user.getName(), user.getEmail()); } @NotNull private static String getString(@NotNull String name, @NotNull String email) { if (name.isEmpty()) return email; if (email.isEmpty()) return name; return name + " <" + email + ">"; } public static boolean isSamePerson(@NotNull VcsUser user1, @NotNull VcsUser user2) { return getNameInStandardForm(getName(user1)).equals(getNameInStandardForm(getName(user2))); } @NotNull public static String getShortPresentation(@NotNull VcsUser user) { return getName(user); } @NotNull private static String getName(@NotNull VcsUser user) { return getUserName(user.getName(), user.getEmail()); } @NotNull public static String getUserName(@NotNull String name, @NotNull String email) { if (!name.isEmpty()) return name; String emailNamePart = getNameFromEmail(email); if (emailNamePart != null) return emailNamePart; return email; } @Nullable public static String getNameFromEmail(@NotNull String email) { int at = email.indexOf('@'); String emailNamePart = null; if (at > 0) { emailNamePart = email.substring(0, at); } return emailNamePart; } @NotNull public static String getNameInStandardForm(@NotNull String name) { Couple<String> firstAndLastName = getFirstAndLastName(name); if (firstAndLastName != null) { return firstAndLastName.first.toLowerCase(Locale.ENGLISH) + " " + firstAndLastName.second.toLowerCase(Locale.ENGLISH); // synonyms detection is currently english-only } return nameToLowerCase(name); } @Nullable public static Couple<String> getFirstAndLastName(@NotNull String name) { Matcher matcher = NAME_PATTERN.matcher(name); if (matcher.matches()) { return Couple.of(matcher.group(1), matcher.group(2)); } return null; } @NotNull public static String nameToLowerCase(@NotNull String name) { if (!PRINTABLE_ASCII_PATTERN.matcher(name).matches()) return name; return name.toLowerCase(Locale.ENGLISH); } @NotNull public static String capitalizeName(@NotNull String name) { if (name.isEmpty()) return name; if (!PRINTABLE_ASCII_PATTERN.matcher(name).matches()) return name; return name.substring(0, 1).toUpperCase(Locale.ENGLISH) + name.substring(1); } @NotNull public static String emailToLowerCase(@NotNull String email) { return email.toLowerCase(Locale.ENGLISH); } }