com.ocpsoft.pretty.faces.util.PrettyURLBuilder Maven / Gradle / Ivy
/*
* Copyright 2010 Lincoln Baxter, III
*
* 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 com.ocpsoft.pretty.faces.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.faces.component.UIComponent;
import javax.faces.component.UIParameter;
import com.ocpsoft.pretty.faces.config.mapping.QueryParameter;
import com.ocpsoft.pretty.faces.config.mapping.RequestParameter;
import com.ocpsoft.pretty.faces.config.mapping.UrlMapping;
import com.ocpsoft.pretty.faces.url.QueryString;
import com.ocpsoft.pretty.faces.url.URL;
import com.ocpsoft.pretty.faces.url.URLPatternParser;
/**
* A utility class for building Pretty URLs.
*
* @author Lincoln Baxter, III
*/
public class PrettyURLBuilder
{
/**
* Extract any {@link UIParameter} objects from a given component. These
* parameters are what PrettyFaces uses to communicate with the JSF component
* tree
*
* @param component
* @return A list of {@link UIParameter} objects, or an empty list if no
* {@link UIParameter}s were contained within the component children.
*/
public List extractParameters(final UIComponent component)
{
List results = new ArrayList();
for (UIComponent child : component.getChildren())
{
if (child instanceof UIParameter)
{
results.add((UIParameter) child);
}
}
return results;
}
/**
* Build a Pretty URL for the given UrlMapping and parameters.
*
* @deprecated Use {@link #build(UrlMapping, boolean, Map)} instead.
*/
@Deprecated
public String build(final UrlMapping mapping, final Map parameters)
{
return build(mapping, false, parameters);
}
/**
* Build a Pretty URL for the given UrlMapping and parameters.
*
* @since 3.2.0
*/
public String build(final UrlMapping mapping, final boolean encodeUrl, final Map parameters)
{
List list = new ArrayList();
if(parameters != null)
{
for (Entry e : parameters.entrySet())
{
UIParameter p = new UIParameter();
p.setName(e.getKey());
p.setValue(e.getValue());
list.add(p);
}
}
return build(mapping, false, list);
}
/**
* Build a Pretty URL for the given UrlMapping and parameters.
*
* @deprecated Use {@link #build(UrlMapping, boolean, Object...)} instead.
*/
@Deprecated
public String build(final UrlMapping mapping, final Object... parameters)
{
return build(mapping, false, parameters);
}
/**
* Build a Pretty URL for the given UrlMapping and parameters.
*
* @since 3.2.0
*/
public String build(final UrlMapping mapping, final boolean encodeUrl, final Object... parameters)
{
List list = new ArrayList();
if(parameters != null)
{
for (Object e : parameters)
{
UIParameter p = new UIParameter();
if (e != null)
{
p.setValue(e.toString());
}
list.add(p);
}
}
return build(mapping, encodeUrl, list);
}
/**
* Build a Pretty URL for the given UrlMapping and parameters.
*
* @deprecated Use {@link #build(UrlMapping, boolean, RequestParameter...)} instead.
*/
@Deprecated
public String build(final UrlMapping mapping, final RequestParameter... parameters)
{
return build(mapping, false, parameters);
}
/**
* Build a Pretty URL for the given UrlMapping and parameters.
*
* @since 3.2.0
*/
public String build(final UrlMapping mapping, final boolean encodeUrl, final RequestParameter... parameters)
{
List list = new ArrayList();
if(parameters != null)
{
for (RequestParameter param : parameters)
{
UIParameter p = new UIParameter();
if (param != null)
{
p.setValue(param.getName());
p.setValue(param.getValue());
}
list.add(p);
}
}
return build(mapping, false, list);
}
/**
* Build a Pretty URL for the given Mapping ID and parameters.
*
* @deprecated Use {@link #build(UrlMapping, boolean, List)} instead.
*/
@Deprecated
public String build(final UrlMapping urlMapping, final List parameters)
{
return build(urlMapping, false, parameters);
}
/**
* Build a Pretty URL for the given Mapping ID and parameters.
*
* @since 3.2.0
*/
public String build(final UrlMapping urlMapping, final boolean encodeUrl, final List parameters)
{
String result = "";
if (urlMapping != null)
{
URLPatternParser parser = new URLPatternParser(urlMapping.getPattern());
List pathParams = new ArrayList();
List queryParams = new ArrayList();
if(parameters != null)
{
// TODO this logic should be in the components, not in the builder
if (parameters.size() == 1)
{
UIParameter firstParam = parameters.get(0);
if (((firstParam.getValue() != null)) && (firstParam.getName() == null))
{
if (firstParam.getValue() instanceof List>)
{
URL url = parser.getMappedURL(firstParam.getValue());
return url.toURL();
}
else if (firstParam.getValue().getClass().isArray())
{
// The Object[] cast here is required, otherwise Java treats
// getValue() as a single Object.
List
© 2015 - 2024 Weber Informatics LLC | Privacy Policy