1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.util;
21
22 import java.io.IOException;
23 import java.io.LineNumberReader;
24 import java.io.PrintWriter;
25 import java.io.StringReader;
26 import java.io.StringWriter;
27 import java.util.ArrayList;
28
29
30
31
32
33
34
35
36 public class Transform {
37
38 private static final String CDATA_START = "<![CDATA[";
39
40 private static final String CDATA_END = "]]>";
41
42 private static final String CDATA_PSEUDO_END = "]]>";
43
44 private static final String CDATA_EMBEDED_END = CDATA_END + CDATA_PSEUDO_END + CDATA_START;
45
46 private static final int CDATA_END_LEN = CDATA_END.length();
47
48
49
50
51
52
53
54
55
56
57 public static String escapeTags(String input) {
58
59
60
61 if (input == null || input.length() == 0) {
62 return input;
63 }
64
65 StringBuilder buf = new StringBuilder(input.length() + 6);
66 char ch;
67
68 int len = input.length();
69
70 for (int i = 0; i < len; i++) {
71 ch = input.charAt(i);
72
73 switch ( ch )
74 {
75 case '<' :
76 buf.append("<");
77 break;
78
79 case '>' :
80 buf.append(">");
81 break;
82
83 case '&' :
84 buf.append("&");
85 break;
86
87 case '"' :
88 buf.append(""");
89 break;
90
91 default :
92 buf.append(ch);
93 }
94 }
95
96 return buf.toString();
97 }
98
99
100
101
102
103
104
105
106
107
108 public static void appendEscapingCDATA(final StringBuilder buf, final String str) {
109 if (str != null) {
110 int end = str.indexOf(CDATA_END);
111
112 if (end < 0) {
113 buf.append(str);
114 } else {
115 int start = 0;
116
117 while (end > -1) {
118 buf.append(str.substring(start, end));
119 buf.append(CDATA_EMBEDED_END);
120 start = end + CDATA_END_LEN;
121
122 if (start < str.length()) {
123 end = str.indexOf(CDATA_END, start);
124 } else {
125 return;
126 }
127 }
128
129 buf.append(str.substring(start));
130 }
131 }
132 }
133
134
135
136
137
138
139 public static String[] getThrowableStrRep(Throwable throwable) {
140 StringWriter sw = new StringWriter();
141 PrintWriter pw = new PrintWriter(sw);
142 throwable.printStackTrace(pw);
143 pw.flush();
144 LineNumberReader reader = new LineNumberReader(new StringReader(sw.toString()));
145 ArrayList<String> lines = new ArrayList<>();
146
147 try {
148 String line = reader.readLine();
149
150 while (line != null) {
151 lines.add(line);
152 line = reader.readLine();
153 }
154 } catch (IOException ex) {
155 lines.add(ex.toString());
156 }
157
158 String[] rep = new String[lines.size()];
159 lines.toArray(rep);
160
161 return rep;
162 }
163 }