/******************************************************************************* * Copyright (c) 2012 OpenLegacy Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * OpenLegacy Inc. - initial API and implementation *******************************************************************************/ package org.openlegacy.utils; import org.apache.commons.lang.CharEncoding; import org.apache.commons.lang.StringUtils; import org.openlegacy.exceptions.OpenLegacyRuntimeException; import org.springframework.util.Assert; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class StringUtil { /** * this array contains forbidden words from java,c#,vb,javaScript */ private static final String[] RESERVED_WORDS = new String[] { "abstract", "do", "if", "package", "synchronized", "implements", "private", "this", "break", "else", "import", "protected", "throw", "byte", "extends", "instanceof", "public", "throws", "case", "false", "return", "transient", "catch", "final", "interface", "short", "int", "float", "double", "boolean", "true", "char", "long", "static", "try", "class", "native", "strictfp", "void", "const", "for", "new", "super", "volatile", "continue", "goto", "null", "switch", "while", "default", "assert", "exception", "java", "menu", "jsp", "context", /** java-script **/ "action" }; private static Map<String, String> RESERVERD_WORDS_DICTIONARY = new HashMap<String, String>(); static { for (String element : RESERVED_WORDS) { RESERVERD_WORDS_DICTIONARY.put(element, element); } } public static String ignoreChars(String s, char[] ignoreChars) { char[] chars = ignoreChars; for (char c : chars) { s = s.replaceAll("\\" + Character.toString(c), ""); } return s; } public static int getLength(String s) { if (s == null) { return 0; } return s.length(); } public static String toJavaFieldName(String text) { return toVariableName(text, false); } public static String toJavaMethodName(String text) { String methodName = toVariableName(text, false); return methodName; } public static String toClassName(String text) { if (text == null) { return null; } if (text.endsWith(".class")) { text = text.replace(".class", ""); } // remove package if (text.contains(".")) { text = text.substring(text.lastIndexOf(".") + 1); } return toVariableName(text, true); } public static String toVariableName(String text, boolean capFirst) { String variableName = null; if (!text.contains(" ")) { text = text.replaceAll("\\W", ""); if (!capFirst) { variableName = StringUtils.uncapitalize(text); } else { variableName = StringUtils.capitalize(text); } } else { char[] chars = text.toCharArray(); StringBuilder sb = new StringBuilder(text.length()); for (char d : chars) { char c = d; if (capFirst) { c = Character.toUpperCase(c); capFirst = false; } else { c = Character.toLowerCase(c); } if (Character.isLetter(c) || Character.isDigit(c)) { sb.append(c); } if (c == ' ') { capFirst = true; } } variableName = sb.toString(); } if (RESERVERD_WORDS_DICTIONARY.containsKey(variableName)) { variableName = variableName + "_"; } if (!StringUtils.isEmpty(variableName) && variableName.charAt(0) >= '0' && variableName.charAt(0) <= '9') { variableName = "_" + variableName; } return variableName; } public static String toDisplayName(String text) { char[] chars = text.toCharArray(); StringBuilder sb = new StringBuilder(text.length()); for (int i = 0; i < chars.length; i++) { char c = chars[i]; if (Character.isLetter(c) || Character.isDigit(c) || c == ' ' || c == '\\' || c == '/') { if (i == 0) { sb.append(Character.toUpperCase(c)); } else { // add blank current char is upper case, previous char is blank and not upper case if (Character.isUpperCase(c) && chars[i - 1] != ' ' && Character.isLetter(chars[i - 1]) && !Character.isUpperCase(chars[i - 1])) { sb.append(' '); } sb.append(c); } } } return sb.toString().trim(); } /** * Might be use in the future for additional field formatting ("_", etc) */ public static boolean isEmpty(String text) { return StringUtils.isBlank(text); } public static String toSampleValue(String value) { value = value.replace('\"', '\''); return StringUtils.trim(value); } public static int startOfNonBlank(String text) { return startOfNonChar(text, ' '); } public static int endOfNonBlank(String text) { return endOfNonChar(text, ' '); } private static int startOfNonChar(String text, char ch) { Assert.notNull(text, "text must not be empty"); char[] chars = text.toCharArray(); for (int i = 0; i < chars.length; i++) { if (chars[i] != ch) { return i; } } return 0; } private static int endOfNonChar(String value, char ch) { char[] chars = value.toCharArray(); int rightOffset = 0; for (int i = chars.length - 1; i >= 0; i--) { if (chars[i] != ch) { rightOffset = chars.length - i; break; } } return rightOffset; } public static final String leftTrim(String string) { return leftTrim(string, ' '); } public static final String leftTrim(String string, char ch) { int len = string.length(), i; for (i = 0; i < len; i++) { if (string.charAt(i) != ch) { break; } } if (i == len) { return StringUtils.EMPTY; } return string.substring(i); } public static final String rightTrim(String s) { String str = rightTrim(s, ' '); str = rightTrim(str, 0); return str; } private static final String rightTrim(String string, int ch) { int len = string.length(); int i; for (i = len - 1; i >= 0; i--) { if (string.charAt(i) != ch) { break; } } if (i < 0) { return StringUtils.EMPTY; } return string.substring(0, i + 1); } /** * Return Java type according to string content */ public static Class<?> getTypeByValue(String value) { if (value == null) { return String.class; } value = value.trim(); if (value.matches("\\d+")) { return Integer.class; } if (value.matches("\\d+\\.\\d+")) { return Double.class; } return String.class; } public static String toSetterMethodName(String propertyName) { return "set" + toVariableName(propertyName, true); } public static String toString(ByteArrayOutputStream baos) { try { return new String(baos.toByteArray(), CharEncoding.UTF_8); } catch (UnsupportedEncodingException e) { throw (new OpenLegacyRuntimeException(e)); } } /** * Remove namespace from a given class style String: package.class -> class , prefix.suffix -> suffix * * @param str * @return */ public static String removeNamespace(String str) { if (!str.contains(".")) { return str; } return str.substring(str.lastIndexOf(".") + 1); } public static String stripQuotes(String text) { if (text.startsWith("\"")) { text = text.substring(1); } if (text.endsWith("\"")) { text = text.substring(0, text.length() - 1); } return text; } /** * Surrounds a given string with quotes if it of type string. Usefull for code generation * * @param value * @return */ public static Object surroundStringWithQuotes(String value) { Class<?> type = getTypeByValue(value); if (type == String.class) { return "\"" + value + "\""; } return value; } public static String appendLeftZeros(int number, int length) { String str = String.valueOf(number); for (int i = str.length(); i < length; i++) { str = "0" + str; } return str; } public static int getDifferentCharsCount(String s) { char[] chars = s.toCharArray(); List<String> charTypes = new ArrayList<String>(); for (char c : chars) { String valueOfChar = String.valueOf(c); if (!charTypes.contains(valueOfChar)) { charTypes.add(valueOfChar); } } return charTypes.size(); } public static String toString(List<?> elements, char seperator) { if (elements == null || elements.size() == 0) { return ""; } StringBuilder sb = new StringBuilder(); for (Object object : elements) { sb.append(object.toString()); sb.append(seperator); } sb.setLength(sb.length() - 1); return sb.toString(); } public static String nullsToSpaces(String value) { char[] chars = new char[] { 0 }; if (StringUtils.containsNone(value, chars)) { return value; } return nullsToSpaces(value.toCharArray()); } public static String nullsToSpaces(char[] chars) { for (int i = 0; i < chars.length; i++) { if (chars[i] == 0) { chars[i] = ' '; } } String value = new String(chars); return value; } }