KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > roller > ui > rendering > velocity > deprecated > RedirectServlet


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. The ASF licenses this file to You
4  * under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License. For additional information regarding
15  * copyright in this work, please see the NOTICE file in the top level
16  * directory of this distribution.
17  */

18
19 package org.apache.roller.ui.rendering.velocity.deprecated;
20
21 import java.io.IOException JavaDoc;
22 import java.io.UnsupportedEncodingException JavaDoc;
23 import java.net.URLEncoder JavaDoc;
24 import java.util.HashMap JavaDoc;
25 import java.util.Map JavaDoc;
26 import javax.servlet.ServletException JavaDoc;
27 import javax.servlet.http.HttpServlet JavaDoc;
28 import javax.servlet.http.HttpServletRequest JavaDoc;
29 import javax.servlet.http.HttpServletResponse JavaDoc;
30 import org.apache.commons.logging.Log;
31 import org.apache.commons.logging.LogFactory;
32 import org.apache.roller.config.RollerRuntimeConfig;
33 import org.apache.roller.util.URLUtilities;
34
35
36 /**
37  * Redirect pre-3.0 urls to new location using 301 redirects.
38  *
39  * @web.servlet name="RedirectServlet" load-on-startup="9"
40  * @web.servlet-mapping url-pattern="/language/*"
41  * @web.servlet-mapping url-pattern="/comments/*"
42  * @web.servlet-mapping url-pattern="/resources/*"
43  * @web.servlet-mapping url-pattern="/rsd/*"
44  * @web.servlet-mapping url-pattern="/flavor/*"
45  * @web.servlet-mapping url-pattern="/rss/*"
46  * @web.servlet-mapping url-pattern="/atom/*"
47  * @web.servlet-mapping url-pattern="/page/*"
48  * @web.servlet-mapping url-pattern="/search/*"
49  * @web.servlet-mapping url-pattern="/xmlrpc/*"
50  * @web.servlet-mapping url-pattern="/editor/*"
51  * @web.servlet-mapping url-pattern="/admin/*"
52  */

53 public class RedirectServlet extends HttpServlet JavaDoc {
54     
55     private static Log log = LogFactory.getLog(RedirectServlet.class);
56     
57     public static final String JavaDoc LanguageServlet = "language";
58     public static final String JavaDoc CommentsServlet = "comments";
59     public static final String JavaDoc ResourceServlet = "resources";
60     public static final String JavaDoc RsdServlet = "rsd";
61     public static final String JavaDoc FlavorServlet = "flavor";
62     public static final String JavaDoc RssServlet = "rss";
63     public static final String JavaDoc AtomServlet = "atom";
64     public static final String JavaDoc PageServlet = "page";
65     public static final String JavaDoc SearchServlet = "search";
66     public static final String JavaDoc XmlrpcServlet = "xmlrpc";
67     public static final String JavaDoc EditorUI = "editor";
68     public static final String JavaDoc AdminUI = "admin";
69     
70     
71     /**
72      * Handle GET requests.
73      *
74      * All we are doing is calculating the new url for the given resource and
75      * sending a 301 redirect to it's new location.
76      */

77     public void doGet(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response)
78             throws ServletException JavaDoc, IOException JavaDoc {
79         
80         String JavaDoc redirectUrl = null;
81         
82         // figure out what servlet the request was destined for and parse
83
String JavaDoc servlet = request.getServletPath();
84         if(servlet != null && servlet.trim().length() > 1) {
85             
86             // strip off the leading slash
87
servlet = servlet.substring(1);
88             
89             // strip off trailing slash if needed
90
if(servlet.endsWith("/")) {
91                 servlet = servlet.substring(0, servlet.length() - 1);
92             }
93         } else {
94             // bad request, 404
95
}
96         
97         log.debug("uri = "+request.getRequestURI());
98         log.debug("path info = "+request.getPathInfo());
99         
100         
101         // language servlet
102
if(LanguageServlet.equals(servlet)) {
103             redirectUrl = figureLanguageRedirect(request);
104             
105         // comments servlet
106
} else if(CommentsServlet.equals(servlet)) {
107             redirectUrl = figureCommentsRedirect(request);
108             
109         // resource servlet
110
} else if(ResourceServlet.equals(servlet)) {
111             redirectUrl = figureResourceRedirect(request);
112             
113         // rsd servlet
114
} else if(RsdServlet.equals(servlet)) {
115             redirectUrl = figureRsdRedirect(request);
116             
117         // flavor servlet
118
} else if(FlavorServlet.equals(servlet)) {
119             redirectUrl = figureFeedRedirect(request);
120             
121         // rss servlet
122
} else if(RssServlet.equals(servlet)) {
123             redirectUrl = figureFeedRedirect(request);
124             
125         // atom servlet
126
} else if(AtomServlet.equals(servlet)) {
127             redirectUrl = figureFeedRedirect(request);
128             
129         // page servlet
130
} else if(PageServlet.equals(servlet)) {
131             redirectUrl = figurePageRedirect(request);
132             
133         // search servlet
134
} else if(SearchServlet.equals(servlet)) {
135             redirectUrl = figureSearchRedirect(request);
136             
137         // xmlrpc servlet
138
} else if(XmlrpcServlet.equals(servlet)) {
139             redirectUrl = figureXmlrpcRedirect(request);
140             
141         // editor UI
142
} else if(EditorUI.equals(servlet)) {
143             redirectUrl = figureEditorRedirect(request);
144             
145         // admin UI
146
} else if(AdminUI.equals(servlet)) {
147             redirectUrl = figureAdminRedirect(request);
148         }
149         
150         if(redirectUrl != null) {
151             log.debug("redirecting to "+redirectUrl);
152             
153             // send an HTTP 301 response
154
response.setStatus(response.SC_MOVED_PERMANENTLY);
155             response.setHeader("Location", redirectUrl);
156         } else {
157             // no redirect, send 404
158
response.sendError(response.SC_NOT_FOUND);
159         }
160     }
161     
162     
163     // language servlet has no new equivalent, so just redirect to weblog homepage
164
private String JavaDoc figureLanguageRedirect(HttpServletRequest JavaDoc request) {
165         
166         String JavaDoc newUrl = RollerRuntimeConfig.getRelativeContextURL();
167         
168         String JavaDoc pathInfo = request.getPathInfo();
169         if(pathInfo == null) {
170             return null;
171         } else {
172             pathInfo = pathInfo.substring(1);
173         }
174         
175         String JavaDoc[] pathElements = pathInfo.split("/", 2);
176         return newUrl+"/"+pathElements[0]+"/";
177     }
178     
179     
180     // old comments were a form of permalink, so redirect to new permalinks
181
private String JavaDoc figureCommentsRedirect(HttpServletRequest JavaDoc request) {
182         
183         OldCommentsRequest commentsRequest = null;
184         try {
185             // get parsed version of old page request
186
commentsRequest = new OldCommentsRequest(request);
187         } catch (Exception JavaDoc ex) {
188             return null;
189         }
190         
191         StringBuffer JavaDoc url = new StringBuffer JavaDoc();
192         
193         url.append(RollerRuntimeConfig.getRelativeContextURL());
194         url.append("/").append(commentsRequest.getWeblogHandle()).append("/");
195         
196         if(commentsRequest.getWeblogAnchor() != null) {
197             
198             // permalink url
199
url.append("entry/").append(URLUtilities.encode(commentsRequest.getWeblogAnchor()));
200             
201         } else {
202             return null;
203         }
204         
205         return url.toString();
206     }
207     
208     
209     // redirect to new weblog resource location
210
private String JavaDoc figureResourceRedirect(HttpServletRequest JavaDoc request) {
211         
212         String JavaDoc newUrl = RollerRuntimeConfig.getRelativeContextURL();
213         
214         String JavaDoc pathInfo = request.getPathInfo();
215         if(pathInfo == null) {
216             return null;
217         } else {
218             pathInfo = pathInfo.substring(1);
219         }
220         
221         String JavaDoc[] pathElements = pathInfo.split("/", 2);
222         if(pathElements.length != 2) {
223             return null;
224         }
225         
226         return newUrl+"/"+pathElements[0]+"/resource/"+pathElements[1];
227     }
228     
229     
230     // redirect to new weblog rsd location
231
private String JavaDoc figureRsdRedirect(HttpServletRequest JavaDoc request) {
232         
233         String JavaDoc newUrl = RollerRuntimeConfig.getRelativeContextURL();
234         
235         String JavaDoc pathInfo = request.getPathInfo();
236         if(pathInfo == null) {
237             return null;
238         } else {
239             pathInfo = pathInfo.substring(1);
240         }
241         
242         String JavaDoc[] pathElements = pathInfo.split("/", 2);
243         return newUrl+"/"+pathElements[0]+"/rsd";
244     }
245     
246     
247     // redirect to new weblog feed location
248
private String JavaDoc figureFeedRedirect(HttpServletRequest JavaDoc request) {
249         
250         OldFeedRequest feedRequest = null;
251         try {
252             // get parsed version of old feed request
253
feedRequest = new OldFeedRequest(request);
254         } catch (Exception JavaDoc ex) {
255             return null;
256         }
257         
258         String JavaDoc weblog = feedRequest.getWeblogHandle();
259         if(weblog == null) {
260             // must be site-wide feed
261
weblog = RollerRuntimeConfig.getProperty("site.frontpage.weblog.handle");
262         }
263         
264         String JavaDoc newUrl = RollerRuntimeConfig.getRelativeContextURL();
265         newUrl += "/"+weblog+"/feed/entries/"+feedRequest.getFlavor();
266         
267         Map JavaDoc params = new HashMap JavaDoc();
268         if(feedRequest.getWeblogCategory() != null) {
269             params.put("cat", URLUtilities.encode(feedRequest.getWeblogCategory()));
270         }
271         if(feedRequest.isExcerpts()) {
272             params.put("excerpts", "true");
273         }
274         
275         return newUrl + URLUtilities.getQueryString(params);
276     }
277     
278     
279     // redirect to new weblog page location
280
private String JavaDoc figurePageRedirect(HttpServletRequest JavaDoc request) {
281         
282         OldPageRequest pageRequest = null;
283         try {
284             // get parsed version of old page request
285
pageRequest = new OldPageRequest(request);
286         } catch (Exception JavaDoc ex) {
287             return null;
288         }
289         
290         StringBuffer JavaDoc url = new StringBuffer JavaDoc();
291         Map JavaDoc params = new HashMap JavaDoc();
292         
293         url.append(RollerRuntimeConfig.getRelativeContextURL());
294         url.append("/").append(pageRequest.getWeblogHandle()).append("/");
295         
296         if(pageRequest.getWeblogPage() != null &&
297                 !"Weblog".equals(pageRequest.getWeblogPage())) {
298             
299             // a custom page name, so they get the new /weblog/page/name url
300
url.append("page/").append(pageRequest.getWeblogPage());
301             
302             // we also allow for params on custom pages
303
if(pageRequest.getWeblogDate() != null) {
304                 params.put("date", pageRequest.getWeblogDate());
305             }
306             if(pageRequest.getWeblogCategory() != null) {
307                 params.put("cat", URLUtilities.encode(pageRequest.getWeblogCategory()));
308             }
309             if(pageRequest.getWeblogAnchor() != null) {
310                 params.put("entry", URLUtilities.encode(pageRequest.getWeblogAnchor()));
311             }
312             
313         } else if(pageRequest.getWeblogAnchor() != null) {
314             
315             // permalink url
316
url.append("entry/").append(URLUtilities.encode(pageRequest.getWeblogAnchor()));
317             
318         } else if(pageRequest.getWeblogCategory() != null && pageRequest.getWeblogDate() == null) {
319             String JavaDoc cat = pageRequest.getWeblogCategory();
320             if(pageRequest.getWeblogCategory().startsWith("/")) {
321                 cat = pageRequest.getWeblogCategory().substring(1);
322             }
323             
324             url.append("category/").append(URLUtilities.encode(cat));
325             
326         } else if(pageRequest.getWeblogDate() != null && pageRequest.getWeblogCategory() == null) {
327             url.append("date/").append(pageRequest.getWeblogDate());
328             
329         } else {
330             if(pageRequest.getWeblogDate() != null) {
331                 params.put("date", pageRequest.getWeblogDate());
332             }
333             if(pageRequest.getWeblogCategory() != null) {
334                 params.put("cat", URLUtilities.encode(pageRequest.getWeblogCategory()));
335             }
336         }
337         
338         return url.toString() + URLUtilities.getQueryString(params);
339     }
340     
341     
342     // redirect to new search servlet
343
private String JavaDoc figureSearchRedirect(HttpServletRequest JavaDoc request) {
344         
345         String JavaDoc newUrl = RollerRuntimeConfig.getRelativeContextURL();
346         
347         String JavaDoc pathInfo = request.getPathInfo();
348         if(pathInfo == null) {
349             return null;
350         } else {
351             pathInfo = pathInfo.substring(1);
352         }
353         
354         String JavaDoc[] pathElements = pathInfo.split("/", 2);
355         newUrl += "/"+pathElements[0]+"/search";
356         
357         // query params
358
Map JavaDoc params = new HashMap JavaDoc();
359         if(request.getParameter("q") != null &&
360                 request.getParameter("q").trim().length() > 0) {
361             
362             params.put("q", request.getParameter("q"));
363             
364             if(request.getParameter("c") != null &&
365                 request.getParameter("c").trim().length() > 0) {
366                 params.put("cat", request.getParameter("c"));
367             }
368         }
369         
370         return newUrl + URLUtilities.getQueryString(params);
371     }
372     
373     
374     // redirect to new xmlrpc location
375
private String JavaDoc figureXmlrpcRedirect(HttpServletRequest JavaDoc request) {
376         
377         return URLUtilities.getXmlrpcURL(true);
378     }
379     
380     
381     // redirect to new editor UI location
382
private String JavaDoc figureEditorRedirect(HttpServletRequest JavaDoc request) {
383         
384         return RollerRuntimeConfig.getRelativeContextURL()+"/roller-ui/";
385     }
386     
387     
388     // redirect to new admin UI location
389
private String JavaDoc figureAdminRedirect(HttpServletRequest JavaDoc request) {
390         
391         return RollerRuntimeConfig.getRelativeContextURL()+"/roller-ui/";
392     }
393     
394 }
395
Popular Tags