1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.portals.bridges.common;
19
20 import javax.portlet.PortletURL;
21
22 /***
23 * ScriptPostProcess
24 *
25 * Utility class for post processing perl or php created pages.
26 *
27 * @author <a href="mailto:rogerrut@apache.org">Roger Ruttimann</a>
28 * @version $Id: ScriptPostProcess.java 517068 2007-03-12 01:44:37Z ate $
29 */
30
31
32 public class ScriptPostProcess {
33
34
35 StringBuffer internalPage = null;
36
37 /***
38 *
39 */
40 public ScriptPostProcess() {
41 super();
42
43 }
44
45 /***
46 * getFinalizedPage
47 * @return String processed page
48 */
49 public String getFinalizedPage()
50 {
51 if (internalPage != null)
52 {
53 return internalPage.toString();
54 }
55 else
56 {
57 return "";
58 }
59 }
60
61 /***
62 * setInitialPage()
63 * Sets the internal page that will be processed by invoking the different methods
64 * @param page
65 */
66 public void setInitalPage(StringBuffer page)
67 {
68 this.internalPage = page;
69 }
70
71 /***
72 * postProcessPage()
73 * Applies default rules for processing HREFS and actions in an HTML page
74 * @param actionURL
75 * @param actionParameterName
76 */
77 public void postProcessPage(PortletURL actionURL, String actionParameterName)
78 {
79
80 processPage("<a", ">", "href=", actionURL, actionParameterName);
81 processPage("<A", ">", "HREF=", actionURL, actionParameterName);
82 processPage("<AREA", ">", "href=", actionURL, actionParameterName);
83
84
85 processPage("<FORM", ">", "action=", actionURL, actionParameterName);
86 processPage("<form", ">", "action=", actionURL, actionParameterName);
87 }
88
89 /***
90 * processPage()
91 * Apply one rule to the page
92 * @param startTag
93 * @param endTag
94 * @param ref
95 * @param actionURL
96 * @param actionParameterName
97 */
98 public void processPage(String startTag, String endTag, String ref, PortletURL actionURL, String actionParameterName)
99 {
100 final String SINGLE_QUOTE = "\'";
101 final String DOUBLE_QUOTE = "\"";
102
103 StringBuffer finalPage = new StringBuffer();
104 String page = internalPage.toString();
105
106 int ixTagOpen, ixTagEnd, ixRefStart, ixRefEnd;
107
108
109
110 ixTagOpen = page.indexOf(startTag);
111
112 try
113 {
114 while (ixTagOpen != -1 )
115 {
116 finalPage.append(page.substring(0, ixTagOpen));
117 page = page.substring(ixTagOpen);
118
119 ixTagEnd = page.indexOf(endTag);
120 ixRefStart = page.indexOf(ref);
121
122
123
124 if ( ixRefStart == -1 || ixRefStart > ixTagEnd )
125 {
126 finalPage.append(page.substring(0, ixTagEnd));
127 page = page.substring(ixTagEnd);
128 }
129 else
130 {
131 String strQuote = "";
132 String url = "";
133
134 ixRefStart = ixRefStart + ref.length();
135 finalPage.append(page.substring(0, ixRefStart));
136 page = page.substring(ixRefStart);
137
138
139 if ( page.startsWith(SINGLE_QUOTE))
140 strQuote = SINGLE_QUOTE;
141 else if (page.startsWith(DOUBLE_QUOTE))
142 strQuote = DOUBLE_QUOTE;
143
144 if ( strQuote.length() > 0)
145 {
146 finalPage.append(strQuote);
147 page = page.substring(1);
148 ixRefEnd = page.indexOf(strQuote);
149
150
151 url = page.substring(0, ixRefEnd);
152 }
153 else
154 {
155
156 ixTagEnd = page.indexOf(endTag);
157
158
159 ixRefEnd = 0;
160 StringBuffer nqurl = new StringBuffer();
161 boolean bEnd = false;
162
163 while ( bEnd == false)
164 {
165 char c = page.charAt(ixRefEnd);
166
167 if ( (Character.isSpaceChar(c) == false) && (ixRefEnd < ixTagEnd) )
168 {
169 ixRefEnd++;
170 nqurl.append(c);
171 }
172 else
173 {
174 bEnd = true;
175 ixRefEnd--;
176 }
177 }
178
179 url = nqurl.toString();
180
181 }
182
183
184
185
186 if (url.charAt(0) == '#')
187 {
188 finalPage.append(url).append(strQuote);
189 }
190 else
191 {
192
193 actionURL.setParameter(actionParameterName, url);
194
195 finalPage.append(actionURL.toString()).append(strQuote);
196 }
197
198 page = page.substring(ixRefEnd+1);
199 }
200
201
202 ixTagOpen = page.indexOf(startTag);
203 }
204
205 finalPage.append(page);
206 }
207 catch(Exception e)
208 {
209 System.out.println("ERROR: Exception in processHREFS " + e.getMessage() );
210 }
211
212 internalPage = finalPage;
213 }
214 }