001package net.gdface.utils;
002
003import java.util.Arrays;
004import java.util.HashSet;
005import java.util.Set;
006
007/**
008 * @author guyadong
009 *
010 */
011public final class NameStringUtils {
012        private static final String[] JAVA_RESERVED_WORDS = new String[]{"null", "true", "false", "abstract", "double", "int", "strictfp",
013                        "boolean", "else", "interface", "super", "break", "extends", "long", "switch", "byte", "final", "native",
014                        "synchronized", "case", "finally", "new", "this", "catch", "float", "package", "throw", "char", "for",
015                        "private", "throws", "class", "goto", "protected", "transient", "const", "if", "public", "try", "continue",
016                        "implements", "return", "void", "default", "import", "short", "volatile", "do", "instanceof", "static",
017                        "while", "assert", "enum"};
018        /** thrift IDL 关键字 */
019        private static final String[] THRIFT_RESERVED_WORDS = new String[]{"bool","byte","i16","i32","i64","double",
020                        "binary","string","list","set","map","typedef","enum","struct","namespace","include","const","required","optional"
021                        };
022        private static final Set<String> JAVA_RESERVED_KEYS = new HashSet<String>(Arrays.asList(JAVA_RESERVED_WORDS));
023        private static final Set<String> THRIFT_RESERVED_KEYS = new HashSet<String>(Arrays.asList(THRIFT_RESERVED_WORDS));
024
025        public static String pathFromPpackage(String pkg) {
026                if (pkg == null) {
027                        return "";
028                }
029                return pkg.replace('.', '/');
030        }
031        public static String pathFromPackage(Package pkg) {
032                return pathFromPpackage(null == pkg ? null : pkg.getName());
033        }
034        public static String convertName(String name, boolean wimpyCaps) {
035                StringBuffer buffer = new StringBuffer(name.length());
036                char[] list = name.toLowerCase().toCharArray();
037                for (int i = 0; i < list.length; ++i) {
038                        if (i == 0 && !wimpyCaps) {
039                                buffer.append(Character.toUpperCase(list[i]));
040                                continue;
041                        }
042                        if (list[i] == '_' && i + 1 < list.length && i != 0) {
043                                buffer.append(Character.toUpperCase(list[++i]));
044                                continue;
045                        }
046                        buffer.append(list[i]);
047                }
048                return buffer.toString();
049        }
050
051        /**
052         * 字符串首字母大写
053         * @param name
054         * @return
055         */
056        public static String firstUpperCase(String name){
057                if(Judge.isEmpty(name)){
058                        return name;
059                }
060                char[] list = name.toCharArray();
061                list[0] = Character.toUpperCase(list[0]);
062                return new String(list);
063        }
064        public static boolean isJavaReserved(String name) {
065                return null == name ? false : JAVA_RESERVED_KEYS.contains(name);
066        }
067        public static boolean isThriftReserved(String name) {
068                return null == name ? false : THRIFT_RESERVED_KEYS.contains(name);
069        }
070}