1   package com.atlassian.plugins.codegen.util;
2   
3   import org.apache.commons.lang.StringUtils;
4   
5   /**
6    *
7    */
8   public class ClassnameUtil
9   {
10      public static String camelCaseToSpaced(String s)
11      {
12          return s.replaceAll(
13                  String.format("%s|%s|%s",
14                          "(?<=[A-Z])(?=[A-Z][a-z])",
15                          "(?<=[^A-Z])(?=[A-Z])",
16                          "(?<=[A-Za-z])(?=[^A-Za-z])"
17                  ),
18                  " "
19          );
20      }
21  
22      public static String camelCaseToDashed(String s)
23      {
24          return s.replaceAll(
25                  String.format("%s|%s|%s",
26                          "(?<=[A-Z])(?=[A-Z][a-z])",
27                          "(?<=[^A-Z])(?=[A-Z])",
28                          "(?<=[A-Za-z])(?=[^A-Za-z])"
29                  ),
30                  "-"
31          );
32      }
33  
34      public static String removeSpaces(String s)
35      {
36          return s.replaceAll("[\\s]", "");
37      }
38  
39      public static String camelCaseOrSpaceToDashed(String s)
40      {
41          String trimmed = s.replaceAll("[\\s]", "");
42  
43          String dashed = trimmed.replaceAll(
44                  String.format("%s|%s|%s",
45                          "(?<=[A-Z])(?=[A-Z][a-z])",
46                          "(?<=[^A-Z])(?=[A-Z])",
47                          "(?<=[A-Za-z])(?=[^A-Za-z])"
48                  ),
49                  "-"
50          );
51  
52          return dashed;
53      }
54  
55      public static String fullyQualifiedName(String packageName, String className)
56      {
57          String fqName = "";
58          String packagePrefix = "";
59          if (StringUtils.isNotBlank(packageName))
60          {
61              packagePrefix = packageName.endsWith(".") ? packageName : packageName + ".";
62          }
63  
64          if (StringUtils.isNotBlank(className))
65          {
66              fqName = packagePrefix + className;
67          }
68  
69          return fqName;
70      }
71  
72      public static boolean isValidClassName(String s)
73      {
74          if (s.length() < 1)
75          {
76              return false;
77          }
78          if (s.equals("package-info"))
79          {
80              return false;
81          }
82          int cp = s.codePointAt(0);
83          if (!Character.isJavaIdentifierStart(cp))
84          {
85              return false;
86          }
87          for (int j = Character.charCount(cp); j < s.length(); j += Character.charCount(cp))
88          {
89              cp = s.codePointAt(j);
90              if (!Character.isJavaIdentifierPart(cp))
91              {
92                  return false;
93              }
94          }
95  
96          return true;
97      }
98  
99      public static boolean isValidPackageName(String s)
100     {
101         int index;
102         while ((index = s.indexOf('.')) != -1)
103         {
104             if (!isValidClassName(s.substring(0, index)))
105             {
106                 return false;
107             }
108             s = s.substring(index + 1);
109         }
110         return isValidClassName(s);
111     }
112 }