private String calculateForwardUrl()

in app/src/main/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java [252:409]


    private String calculateForwardUrl(HttpServletRequest request,
                                       String handle, String locale,
                                       String context, String data) {
        
        if(log.isDebugEnabled()) {
            log.debug(handle+","+locale+","+context+","+data);
        }
        
        StringBuilder forwardUrl = new StringBuilder(64);
        
        // POST urls, like comment and trackback servlets
        if("POST".equals(request.getMethod())) {
            // posting to permalink, this means comment or trackback
            if(context.equals("entry")) {
                // trackback requests are required to have an "excerpt" param
                if(request.getParameter("excerpt") != null) {
                    
                    forwardUrl.append(TRACKBACK_SERVLET);
                    forwardUrl.append('/');
                    forwardUrl.append(handle);
                    if(locale != null) {
                        forwardUrl.append('/');
                        forwardUrl.append(locale);
                    }
                    forwardUrl.append('/');
                    forwardUrl.append(context);
                    if(data != null) {
                        forwardUrl.append('/');
                        forwardUrl.append(data);
                    }
                    
                // comment requests are required to have a "content" param
                } else if(request.getParameter("content") != null) {
                    
                    forwardUrl.append(COMMENT_SERVLET);
                    forwardUrl.append('/');
                    forwardUrl.append(handle);
                    if(locale != null) {
                        forwardUrl.append('/');
                        forwardUrl.append(locale);
                    }
                    forwardUrl.append('/');
                    forwardUrl.append(context);
                    if(data != null) {
                        forwardUrl.append('/');
                        forwardUrl.append(data);
                    }
                }
                
            } else {
                // someone posting data where they aren't supposed to
                return null;
            }
            
        } else {
            // no context means weblog homepage
            if(context == null) {
                
                forwardUrl.append(PAGE_SERVLET);
                forwardUrl.append('/');
                forwardUrl.append(handle);
                if(locale != null) {
                    forwardUrl.append('/');
                    forwardUrl.append(locale);
                }
                
            } else {
                
                switch (context) {
                    // requests handled by PageServlet
                    case "page":
                    case "entry":
                    case "date":
                    case "category":
                    case "tags":
                        forwardUrl.append(PAGE_SERVLET);
                        forwardUrl.append('/');
                        forwardUrl.append(handle);
                        if(locale != null) {
                            forwardUrl.append('/');
                            forwardUrl.append(locale);
                        }
                        forwardUrl.append('/');
                        forwardUrl.append(context);
                        if(data != null) {
                            forwardUrl.append('/');
                            forwardUrl.append(data);
                        }
                        break;
                        
                    // requests handled by FeedServlet
                    case "feed":
                        forwardUrl.append(FEED_SERVLET);
                        forwardUrl.append('/');
                        forwardUrl.append(handle);
                        if(locale != null) {
                            forwardUrl.append('/');
                            forwardUrl.append(locale);
                        }
                        if(data != null) {
                            forwardUrl.append('/');
                            forwardUrl.append(data);
                        }
                        break;
                        
                    // requests handled by ResourceServlet
                    case "resource":
                        forwardUrl.append(RESOURCE_SERVLET);
                        forwardUrl.append('/');
                        forwardUrl.append(handle);
                        if(data != null) {
                            forwardUrl.append('/');
                            forwardUrl.append(data);
                        }
                        break;
                        
                    // requests handled by MediaResourceServlet
                    case "mediaresource":
                        forwardUrl.append(MEDIA_SERVLET);
                        forwardUrl.append('/');
                        forwardUrl.append(handle);
                        if(data != null) {
                            forwardUrl.append('/');
                            forwardUrl.append(data);
                        }
                        break;
                        
                    // requests handled by SearchServlet
                    case "search":
                        forwardUrl.append(SEARCH_SERVLET);
                        forwardUrl.append('/');
                        forwardUrl.append(handle);
                        if(locale != null) {
                            forwardUrl.append('/');
                            forwardUrl.append(locale);
                        }
                        break;
                        
                    // requests handled by RSDServlet
                    case "rsd":
                        forwardUrl.append(RSD_SERVLET);
                        forwardUrl.append('/');
                        forwardUrl.append(handle);
                        break;
                        
                    // unsupported url
                    default:
                        return null;
                }
            }
        }
        
        if(log.isDebugEnabled()) {
            log.debug("FORWARD_URL "+forwardUrl.toString());
        }
        
        return forwardUrl.toString();
    }