package ru.naumen.gintonic.utils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
public class StringUtils {
public static final char THE_DOT = '.';
public static final char PATH_SEPARATOR = '/';
public static final String LINE_SEPARATOR = System.getProperty("line.separator");
public static final String MAP_TYPE = "java.util.Map";
public static final String SET_TYPE = "java.util.Set";
private static final Map<String, String> PRIMITIVES = MapUtils.newHashMap();
public static final String CLASS_TYPE = "java.lang.Class";
static {
PRIMITIVES.put("int", "java.lang.Integer");
PRIMITIVES.put("double", "java.lang.Double");
PRIMITIVES.put("float", "java.lang.Float");
PRIMITIVES.put("long", "java.lang.Long");
PRIMITIVES.put("boolean", "java.lang.Boolean");
PRIMITIVES.put("byte", "java.lang.Byte");
PRIMITIVES.put("char", "java.lang.Character");
PRIMITIVES.put("short", "java.lang.Short");
}
private static final Pattern REMOVE_TAGS_FIRST = Pattern.compile("(<[^>]*>)|(>)");
public static String pathToJavaClasspath(String filename) {
String pathDotted = filename.replace('/', THE_DOT);
String pathValidClasspath = pathDotted.replace(ICompilationUnitUtils.JAVA_EXTENSION, "");
return pathValidClasspath;
}
public static String qualifiedNameToSimpleName(String targetTypeNameFullyQualified) {
targetTypeNameFullyQualified = removeGenerics(targetTypeNameFullyQualified);
String[] parts = targetTypeNameFullyQualified.split("\\.");
String simpleName = parts[parts.length - 1];
return simpleName;
}
public static String removeGenerics(String typeName) {
if(!typeName.contains("<")) {
return typeName;
}
return removeGenerics(REMOVE_TAGS_FIRST.matcher(typeName).replaceAll(""));
}
/**
* Returns the name with a capitalized first character.
*
* @param name
* the name to be capitalized
* @return the name with a capitalized first character.
*/
public static String capitalize(String name) {
StringBuilder result = new StringBuilder(name.length());
char upperCase = Character.toUpperCase(name.charAt(0));
result.append(upperCase);
result.append(name.substring(1));
return result.toString();
}
/**
* Translates primitives like int, double, etc to the fully qualified
* wrapper class name(eg. for the primitive "int" you get
* "java.lang.Integer"). If the given String is not a primitive type then
* itself is returned.
*/
public static String translatePrimitiveToWrapper(String primitive) {
String wrapper = PRIMITIVES.get(primitive);
if (wrapper != null) {
return wrapper;
}
return primitive;
}
public static String getSimpleName(String typeFullyQualified) {
if (typeFullyQualified == null) {
return null;
}
String[] parts = typeFullyQualified.split("\\.");
return parts[parts.length - 1];
}
public static String join(char c, List<String> elements) {
return join(c, elements, 10);
}
public static String join(char c, List<String> elements, int expectedSizeOfElement) {
int capacity = elements.size() * expectedSizeOfElement + elements.size();
StringBuilder stringBuilder = new StringBuilder(capacity);
int i = 0;
for (String element : elements) {
if (i++ > 0) {
stringBuilder.append(c);
}
stringBuilder.append(element);
}
return stringBuilder.toString();
}
public static List<String> split(char c, String stringToSplit) {
String[] splitString = stringToSplit.split("\\" + c);
return Arrays.asList(splitString);
}
/**
* From apache commons
*/
public static String substringBefore(String str, String separator) {
if (str == null || str.isEmpty() || separator == null) {
return str;
}
if (separator.isEmpty()) {
return "";
}
int pos = str.indexOf(separator);
if (pos == -1) {
return str;
}
return str.substring(0, pos);
}
public static boolean isNullOrEmpty(String result) {
return result == null || result.isEmpty();
}
}