Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2008, Red Hat, Inc., and individual contributors
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
  * http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.jboss.weld.jsf;
 
 import  javax.faces.context.FacesContext;

Helper class for preparing JSF URLs which include the conversation id.

TODO This class has the potential to be better designed to make it fit more use cases.

Author(s):
Nicklas Karlsson
Dan Allen
Marko Luksa
 
 public class FacesUrlTransformer {
     private static final String HTTP_PROTOCOL_URL_PREFIX = "http://";
     private static final String HTTPS_PROTOCOL_URL_PREFIX = "https://";
     private static final String QUERY_STRING_DELIMITER = "?";
     private static final String PARAMETER_PAIR_DELIMITER = "&";
     private static final String PARAMETER_ASSIGNMENT_OPERATOR = "=";
 
     private String url;
     private final FacesContext context;
 
     public FacesUrlTransformer(String url, FacesContext facesContext) {
         this. = url;
         this. = facesContext;
     }
 
     public FacesUrlTransformer appendConversationIdIfNecessary(String cidParameterNameString cid) {
         this. = appendParameterIfNeeded(cidParameterNamecid);
         return this;
     }
 
     private static String appendParameterIfNeeded(String urlString parameterNameString parameterValue) {
         int queryStringIndex = url.indexOf();
         // if there is no query string or there is a query string but the param is
         // absent, then append it
         if (queryStringIndex < 0 || url.indexOf(parameterName + queryStringIndex) < 0) {
             StringBuilder builder = new StringBuilder(url);
             if (queryStringIndex < 0) {
                 builder.append();
             } else {
                 builder.append();
             }
             builder.append(parameterName).append();
             if (parameterValue != null) {
                 builder.append(parameterValue);
             }
             return builder.toString();
         } else {
             return url;
         }
     }
 
     public String getUrl() {
         return ;
     }
 
     public FacesUrlTransformer toRedirectViewId() {
         String requestPath = .getExternalContext().getRequestContextPath();
         if (isUrlAbsolute()) {
              = .substring(.indexOf(requestPath) + requestPath.length());
         } else if (.startsWith(requestPath)) {
              = .substring(requestPath.length());
         }
         return this;
     }
 
     public FacesUrlTransformer toActionUrl() {
         String actionUrl = .getApplication().getViewHandler().getActionURL();
 
         int queryStringIndex = .indexOf();
         if (queryStringIndex < 0) {
              = actionUrl;
         } else {
             String queryParameters = .substring(queryStringIndex + 1);
 
             int actionQueryStringIndex = actionUrl.indexOf();
             if (actionQueryStringIndex < 0) {
                  = actionUrl +  + queryParameters;
             } else {
                 String actionQueryParameters = actionUrl.substring(actionQueryStringIndex + 1);
                 if (queryParameters.startsWith(actionQueryParameters)) {
                     = actionUrl.substring(0, actionQueryStringIndex) +  + queryParameters;
                } else {
                     = actionUrl +  + queryParameters;
                }
            }
        }
        return this;
    }
    public String encode() {
        return .getExternalContext().encodeActionURL();
    }
    private boolean isUrlAbsolute() {
        // TODO: any API call to do this?
    }
New to GrepCode? Check out our FAQ X