[jboss-cvs] jboss-seam/ui/src/main/java/org/jboss/seam/ui/util ...

Peter Muir peter at bleepbleep.org.uk
Fri Jun 15 13:06:57 EDT 2007


  User: pmuir   
  Date: 07/06/15 13:06:57

  Added:       ui/src/main/java/org/jboss/seam/ui/util     Decoration.java
                        RenderererUtils.java ViewUrlBuilder.java
                        UrlBuilder.java
  Log:
  Refactor cdk port
  
  Revision  Changes    Path
  1.1      date: 2007/06/15 17:06:57;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/util/Decoration.java
  
  Index: Decoration.java
  ===================================================================
  package org.jboss.seam.ui.util;
  
  import javax.faces.component.EditableValueHolder;
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  
  
  public class Decoration
  {
  
     public static boolean hasMessage(UIComponent component, FacesContext context)
     {
        if ( !component.isRendered() ) return false;
        
        if ( component instanceof EditableValueHolder )
        {
           if ( ! ( (EditableValueHolder) component ).isValid() ) return true;
           if ( context.getMessages( component.getClientId(context) ).hasNext() ) return true; //TODO: put this outside the if???
        }
  
        for ( Object child: component.getChildren() )
        {
           if (child instanceof UIComponent)
           {
              boolean message = hasMessage( (UIComponent) child, context );
              if (message) return true;
           }
        }
        return false;
     }
  
     public static boolean hasRequired(UIComponent component, FacesContext context)
     {
        if ( !component.isRendered() ) return false;
        
        if ( component instanceof EditableValueHolder )
        {
           if (  ( (EditableValueHolder) component ).isRequired() ) return true;
        }
  
        for (Object child: component.getChildren())
        {
           if (child instanceof UIComponent)
           {
              boolean required = hasRequired( (UIComponent) child, context );
              if (required) return true;
           }
        }
        return false;
     }
     
     /**
      * A depth-first search for an EditableValueHolder
      */
     public static UIComponent getEditableValueHolder(UIComponent component)
     {
        for (Object child: component.getChildren())
        {
           if (child instanceof EditableValueHolder)
           {
              UIComponent evh =(UIComponent) child;
              if ( evh.isRendered() )
              {
                 return evh;
              }
           }
           else if (child instanceof UIComponent)
           {
              UIComponent evh = getEditableValueHolder( (UIComponent) child );
              if (evh!=null) return evh;
           }
        }
        return null;
     }
     
     public static UIComponent getDecoration(String name, UIComponent component)
     {
        UIComponent dec = component.getFacet(name);
        if (dec!=null) return dec;
        if ( component.getParent()==null ) return null;
        return getDecoration( name, component.getParent() );
     }
     
     
  }
  
  
  
  1.1      date: 2007/06/15 17:06:57;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/util/RenderererUtils.java
  
  Index: RenderererUtils.java
  ===================================================================
  package org.jboss.seam.ui.util;
  
  import java.io.IOException;
  import java.util.List;
  
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  
  public class RenderererUtils
  {
     
     public static void renderChildren(FacesContext facesContext,
              UIComponent component) throws IOException
        {
           List children = component.getChildren();
           for (int j=0, size = component.getChildCount(); j<size; j++)
           {
              UIComponent child = (UIComponent) children.get(j);
              renderChild(facesContext, child);
           }
        }
  
        public static void renderChild(FacesContext facesContext, UIComponent child)
              throws IOException
        {
           if ( child.isRendered() )
           {
              child.encodeBegin(facesContext);
              if ( child.getRendersChildren() )
              {
                 child.encodeChildren(facesContext);
              } 
              else
              {
                 renderChildren(facesContext, child);
              }
              child.encodeEnd(facesContext);
           }
        }
  
  }
  
  
  
  1.1      date: 2007/06/15 17:06:57;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/util/ViewUrlBuilder.java
  
  Index: ViewUrlBuilder.java
  ===================================================================
  
  package org.jboss.seam.ui.util;
  
  import java.io.UnsupportedEncodingException;
  
  
  import javax.faces.component.UIParameter;
  import javax.faces.context.FacesContext;
  
  import org.jboss.seam.core.Pages;
  import org.jboss.seam.pages.Page;
  
  public class ViewUrlBuilder extends UrlBuilder
  {
  
     private Page page;
  
     public ViewUrlBuilder(String viewId, String fragment)
     {
        super();
        FacesContext facesContext = FacesContext.getCurrentInstance();
        String url = facesContext.getApplication().getViewHandler().getActionURL(facesContext,
                 viewId);
        String encodedUrl = facesContext.getExternalContext().encodeActionURL(url);
        encodedUrl = Pages.instance().encodeScheme(viewId, facesContext, encodedUrl);
        setUrl(encodedUrl);
        
        page = Pages.instance().getPage(viewId);
     }
  
     public void addParameter(UIParameter parameter) throws UnsupportedEncodingException
     {
        String name = parameter.getName();
        boolean append = true;
        if (!(name.equals(page.getConversationIdParameter().getParameterName())
                 && getParameters().containsKey(name)))
        {
          super.addParameter(parameter);
        }
     }
  
     
  }
  
  
  1.1      date: 2007/06/15 17:06:57;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/util/UrlBuilder.java
  
  Index: UrlBuilder.java
  ===================================================================
  package org.jboss.seam.ui.util;
  
  import java.io.UnsupportedEncodingException;
  import java.net.URLEncoder;
  import java.util.HashMap;
  import java.util.Map;
  
  import javax.faces.component.UIParameter;
  import javax.faces.context.FacesContext;
  
  public class UrlBuilder
  {
     private String url;
  
     private String fragment;
     private String characterEncoding;
     
     private Map<String, String> parameters;
  
     protected UrlBuilder()
     {
        parameters = new HashMap<String, String>();
        FacesContext facesContext = FacesContext.getCurrentInstance();
        characterEncoding = facesContext.getResponseWriter().getCharacterEncoding();
     }
     
     public UrlBuilder(String url)
     {
        setUrl(url);
     }
     
     protected void setUrl(String url)
     {
        this.url = url;
     }
     
     protected String urlEncode(String value) throws UnsupportedEncodingException
     {
        return characterEncoding == null ? URLEncoder.encode(value) : URLEncoder.encode(value,
                 characterEncoding);
     }
  
     protected String getFragment()
     {
        if (fragment != null && !"".equals(fragment))
        {
           return "#" + fragment;
        }
        else
        {
           return "";
        }
     }
  
     public String getEncodedUrl()
     {
        return url + getParametersAsString() + getFragment();
     }
     
     protected String getParametersAsString()
     {
        String params = "";
        for (String key : parameters.keySet())
        {
           params += "&" + key + "=" + parameters.get(key);
        }
        if (!"".equals(params))
        {
           params = "?" + params.substring(1);
        }
        return params;
     }
     
     protected Map<String, String> getParameters()
     {
        return parameters;
     }
     
     public void addParameter(String name, String value) throws UnsupportedEncodingException
     {
        parameters.put(name, urlEncode(value));
     }
     
     public void addParameter(UIParameter parameter) throws UnsupportedEncodingException
     {
        String value = parameter.getValue() == null ? "" : parameter.getValue().toString();
        String name = parameter.getName();
        addParameter(name, value);
     }
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list