0
|
1 package nabble.view.lib;
|
|
2
|
|
3
|
|
4 // used outside nabble, so do not use Init
|
|
5 public final class ViewUtils {
|
|
6
|
|
7 private ViewUtils() {} // never
|
|
8
|
|
9 private static char removeAccent(char c) {
|
|
10 int code = (int) c;
|
|
11 if (code >= 192 && code <= 196) return 'A';
|
|
12 else if (code >= 200 && code <= 203) return 'E';
|
|
13 else if (code >= 204 && code <= 207) return 'I';
|
|
14 else if (code >= 210 && code <= 214) return 'O';
|
|
15 else if (code >= 217 && code <= 220) return 'U';
|
|
16 else if (code >= 224 && code <= 228) return 'a';
|
|
17 else if (code >= 232 && code <= 235) return 'e';
|
|
18 else if (code >= 236 && code <= 239) return 'i';
|
|
19 else if (code >= 242 && code <= 246) return 'o';
|
|
20 else if (code >= 249 && code <= 252) return 'u';
|
|
21 else if (code == 231) return 'c';
|
|
22 else if (code == 199) return 'C';
|
|
23 else return c;
|
|
24 }
|
|
25
|
|
26 public static String subjectEncode(String s) {
|
|
27 StringBuilder builder = new StringBuilder();
|
|
28 final char[] chars = s.toCharArray();
|
|
29 char lastChar = '-';
|
|
30 for (char c : chars) {
|
|
31 c = removeAccent(c);
|
|
32 boolean isDigit = c >= '0' && c <= '9';
|
|
33 boolean isLowerChar = c >= 'a' && c <= 'z';
|
|
34 boolean isUpperChar = c >= 'A' && c <= 'Z';
|
|
35 if (isDigit || isLowerChar || isUpperChar) {
|
|
36 builder.append(c);
|
|
37 lastChar = c;
|
|
38 } else {
|
|
39 if (lastChar != '-' && builder.length() > 0)
|
|
40 builder.append('-');
|
|
41 lastChar = '-';
|
|
42 }
|
|
43 }
|
|
44 // Truncate if bigger than 100 chars
|
|
45 if (builder.length() > 100) {
|
|
46 builder.delete(100, builder.length()-1);
|
|
47 }
|
|
48
|
|
49 int lastPos = builder.length()-1;
|
|
50 if (builder.lastIndexOf("-") == lastPos && lastPos >= 0)
|
|
51 builder.deleteCharAt(lastPos);
|
|
52 return builder.toString();
|
|
53 }
|
|
54
|
|
55 public static String getDefaultBaseUrl(long siteId,String subject,String host) {
|
|
56 String subjectPart = subjectEncode(subject).toLowerCase();
|
|
57 if (subjectPart.length() == 0)
|
|
58 subjectPart = "x";
|
|
59
|
|
60 // The max length of a domain is 255 chars, but each part (aka octet) can only
|
|
61 // have 63 chars (RFC 2181). So we truncate the subject if it goes beyond that size.
|
|
62 if (subjectPart.length() > 63) {
|
|
63 subjectPart = subjectPart.substring(0, 62);
|
|
64 }
|
|
65 if (subjectPart.endsWith("-"))
|
|
66 subjectPart = subjectPart.substring(0, subjectPart.length()-1);
|
|
67 return subjectPart + '.' + siteId + '.' + host;
|
|
68 }
|
|
69
|
|
70 }
|