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

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


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

  Added:       ui/src/main/java/org/jboss/seam/ui/renderkit         
                        SelectDateRendererBase.java
                        FormattedTextRendererBase.java
                        LinkRendererBase.java FragmentRendererBase.java
                        ValidateAllRendererBase.java
                        DecorateRendererBase.java CacheRendererBase.java
                        ButtonRendererBase.java FileUploadRendererBase.java
  Log:
  Refactor cdk port
  
  Revision  Changes    Path
  1.1      date: 2007/06/15 17:06:56;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/SelectDateRendererBase.java
  
  Index: SelectDateRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.renderkit;
  
  import java.io.IOException;
  import java.text.DateFormatSymbols;
  import java.util.Calendar;
  import java.util.Locale;
  import java.util.Map;
  
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  
  import org.ajax4jsf.framework.renderer.AjaxComponentRendererBase;
  import org.jboss.seam.ui.component.UISelectDate;
  import org.jboss.seam.ui.resource.WebResource;
  
  public class SelectDateRendererBase extends AjaxComponentRendererBase
  {
  
     @Override
     protected Class getComponentClass()
     {
        return UISelectDate.class;
     }
  
     @Override
     protected void doEncodeBegin(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException
     {
        UISelectDate selectDate = (UISelectDate) component;
        
        UIComponent forComponent = selectDate.findComponent(selectDate.getFor());
        if (forComponent==null)
        {
           throw new IllegalStateException("could not find component with id: " + selectDate.getFor());
        }
        writeScript(context, selectDate);
        writer.startElement("span", selectDate);
        writer.writeAttribute("onclick", "__selectDate('" + forComponent.getClientId(context)
                 + "', '" + forComponent.getClientId(context) + "');", null);
     }
     
     @Override
     protected void doEncodeEnd(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException
     {
        writer.endElement("span");
        writer.flush();
     }
     
     public void writeScript(FacesContext context, UISelectDate selectDate) throws IOException
     {
        Map request = context.getExternalContext().getRequestMap();
        if (request.get("SELECTDATE_SCRIPT") != null)
        {
           // already written out
           return;
        }
  
        request.put("SELECTDATE_SCRIPT", null);
  
        ResponseWriter response = context.getResponseWriter();
        writeLocaleInformation(response, context.getViewRoot().getLocale(), selectDate);
  
        response.startElement("script", null);
        response.writeAttribute("type", "text/javascript", null);
        response.writeAttribute("src", context.getExternalContext().getRequestContextPath()
                 + WebResource.WEB_RESOURCE_PATH + "/date/calendar.js", null);
        response.endElement("script");
     }
  
     private void writeLocaleInformation(ResponseWriter response, Locale locale, UISelectDate selectDate) throws IOException
     {
        response.startElement("script", null);
        response.writeAttribute("type", "text/javascript", null);
  
        Calendar cal = Calendar.getInstance(locale);
        DateFormatSymbols symbols = new DateFormatSymbols(locale);
  
        // Note: Calendar and DateFormatSymbols use 1 for the first day of the week, not 0.
  
        response.write("\r");
        response.write("var CAL_DAYS_SHORT = '" + commaSeparate(symbols.getShortWeekdays(), 2)
                 + "';\r");
        response
                 .write("var CAL_DAYS_MEDIUM = '" + commaSeparate(symbols.getShortWeekdays())
                          + "';\r");
        response.write("var CAL_DAYS_LONG = '" + commaSeparate(symbols.getWeekdays()) + "';\r");
        response
                 .write("var CAL_MONTHS_MEDIUM = '" + commaSeparate(symbols.getShortMonths())
                          + "';\r");
        response.write("var CAL_MONTHS_LONG = '" + commaSeparate(symbols.getMonths()) + "';\r");
        response.write("var CAL_FIRST_DAY_OF_WEEK = " + (cal.getFirstDayOfWeek() - 1) + ";\r");
        response.write("var CAL_DATE_FORMAT = '" + selectDate.getDateFormat() + "';\r");
        
        if (selectDate.getStartYear() != -1 && selectDate.getEndYear() != -1)
        {
           response.write("var CAL_START_YEAR = " + selectDate.getStartYear() + ";\r");
           response.write("var CAL_END_YEAR = " + selectDate.getEndYear() + ";\r");
        }
  
        response.endElement("script");
     }
  
     private String commaSeparate(String[] values)
     {
        return commaSeparate(values, -1);
     }
  
     private String commaSeparate(String[] values, int maxLength)
     {
        StringBuilder sb = new StringBuilder();
        for (String val : values)
        {
           if (!"".equals(val))
           {
              if (sb.length() > 0) sb.append(',');
              sb.append(limitLength(val, maxLength));
           }
        }
        return sb.toString();
     }
  
     private String limitLength(String source, int maxLength)
     {
        if (maxLength < 0 || maxLength > source.length())
        {
           return source;
        }
        else
        {
           return source.substring(0, maxLength);
        }
     }
     
  }
  
  
  
  1.1      date: 2007/06/15 17:06:56;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/FormattedTextRendererBase.java
  
  Index: FormattedTextRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.renderkit;
  
  import java.io.IOException;
  
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  
  import org.jboss.seam.ui.component.UIFormattedText;
  
  public class FormattedTextRendererBase extends org.ajax4jsf.framework.renderer.ComponentRendererBase
  {
  
     @Override
     protected Class getComponentClass()
     {
        return UIFormattedText.class;
     }
     
     @Override
     protected void doEncodeBegin(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException
     {
       writer.write(((UIFormattedText) component).getFormattedText());
     }
  }
  
  
  
  1.1      date: 2007/06/15 17:06:56;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/LinkRendererBase.java
  
  Index: LinkRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.renderkit;
  
  import java.io.IOException;
  
  import javax.faces.context.FacesContext;
  
  import org.ajax4jsf.framework.renderer.AjaxComponentRendererBase;
  import org.jboss.seam.ui.component.UILink;
  
  public class LinkRendererBase extends AjaxComponentRendererBase
  {
  
     @Override
     protected Class getComponentClass()
     {
        return UILink.class;
     }
     
     public String getHref(FacesContext facesContext, UILink link) throws IOException
     {
        if (!link.isDisabled())
        {
           return link.getUrl();
        }
        return null;
     }
  
     @Override
     public boolean getRendersChildren()
     {
        return true;
     }
     
  }
  
  
  
  1.1      date: 2007/06/15 17:06:56;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/FragmentRendererBase.java
  
  Index: FragmentRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.renderkit;
  
  import java.io.IOException;
  
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  
  import org.ajax4jsf.framework.renderer.AjaxComponentRendererBase;
  import org.jboss.seam.ui.component.UIFragment;
  
  public class FragmentRendererBase extends AjaxComponentRendererBase
  {
     @Override
     protected Class getComponentClass()
     {
        return UIFragment.class;
     }
     
     @Override
     public boolean getRendersChildren()
     {
        return true;
     }
     
     @Override
     protected void doEncodeChildren(ResponseWriter writer, FacesContext facesContext, UIComponent component) throws IOException
     {
        renderChildren(facesContext, component);
     }
  
  }
  
  
  
  1.1      date: 2007/06/15 17:06:56;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/ValidateAllRendererBase.java
  
  Index: ValidateAllRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.renderkit;
  
  import java.io.IOException;
  import java.util.List;
  
  import javax.faces.component.EditableValueHolder;
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  
  import org.ajax4jsf.renderkit.AjaxCommandRendererBase;
  import org.jboss.seam.ui.component.UIValidateAll;
  import org.jboss.seam.ui.validator.ModelValidator;
  
  public class ValidateAllRendererBase extends AjaxCommandRendererBase
  {
  
     @Override
     protected Class getComponentClass()
     {
        return UIValidateAll.class;
     }
     
     @Override
     protected void doEncodeChildren(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException
     {
        UIValidateAll validateAll = (UIValidateAll) component;
        if (!validateAll.isValidatorsAdded())
        {
           addValidators(validateAll.getChildren());
           validateAll.setValidatorsAdded(true);
        }
        renderChildren(context, component);
     }
     
     private void addValidators(List children)
     {
        for (Object child: children)
        {
           if (child instanceof EditableValueHolder)
           {
              EditableValueHolder evh =  (EditableValueHolder) child;
              if ( evh.getValidators().length==0 && evh.getValidator()==null )
              {
                 evh.addValidator( new ModelValidator() );
              }
           }
           else if (child instanceof UIComponent)
           {
              addValidators( ( (UIComponent) child ).getChildren() );
           }
        }
     }
  
  }
  
  
  
  1.1      date: 2007/06/15 17:06:56;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/DecorateRendererBase.java
  
  Index: DecorateRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.renderkit;
  
  import java.io.IOException;
  
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  
  import org.ajax4jsf.framework.renderer.AjaxComponentRendererBase;
  import org.jboss.seam.contexts.Contexts;
  import org.jboss.seam.ui.component.UIDecorate;
  import org.jboss.seam.ui.util.Decoration;
  
  public class DecorateRendererBase extends AjaxComponentRendererBase
  {
  
     @Override
     protected Class getComponentClass()
     {
        return UIDecorate.class;
     }
     
     @Override
     protected void doEncodeBegin(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException
     {
        UIDecorate decorate = (UIDecorate) component;
        
        Contexts.getEventContext().set("invalid", Decoration.hasMessage(decorate, context));
        Contexts.getEventContext().set("required", Decoration.hasRequired(component, context));
   
        boolean hasMessage = decorate.hasMessage();
        
        writer.startElement("span", decorate);
        writer.writeAttribute("id", decorate.getClientId(context), "id");
        
        UIComponent aroundDecoration = decorate.getDecoration("aroundField");
        UIComponent aroundInvalidDecoration = decorate.getDecoration("aroundInvalidField");
        if (aroundDecoration!=null && !hasMessage)
        {
           aroundDecoration.setParent(decorate);
           aroundDecoration.encodeBegin(context);
        }
        if (aroundInvalidDecoration!=null && hasMessage)
        {
           aroundInvalidDecoration.setParent(decorate);
           aroundInvalidDecoration.encodeBegin(context);
        }
     }
     
     @Override
     protected void doEncodeEnd(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException
     {
        UIDecorate decorate = (UIDecorate) component;
        
        boolean hasMessage = decorate.hasMessage();
        UIComponent aroundDecoration = decorate.getDecoration("aroundField");
        UIComponent aroundInvalidDecoration = decorate.getDecoration("aroundInvalidField");
        if (aroundDecoration!=null && !hasMessage)
        {
           aroundDecoration.setParent(decorate);
           aroundDecoration.encodeEnd(context);
        }
        if (aroundInvalidDecoration!=null && hasMessage)
        {
           aroundInvalidDecoration.setParent(decorate);
           aroundInvalidDecoration.encodeEnd(context);
        }
        context.getResponseWriter().endElement("span");
  
        Contexts.getEventContext().remove("invalid");
        Contexts.getEventContext().remove("required");
     }
     
     @Override
     protected void doEncodeChildren(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException
     {
        UIDecorate decorate = (UIDecorate) component;
        
        boolean hasMessage = decorate.hasMessage();
  
        UIComponent beforeDecoration = decorate.getDecoration("beforeField");
        UIComponent beforeInvalidDecoration = decorate.getDecoration("beforeInvalidField");
        if ( beforeDecoration!=null && !hasMessage )
        {
           beforeDecoration.setParent(decorate);
           renderChild(context, beforeDecoration);
        }
        if ( beforeInvalidDecoration!=null && hasMessage )
        {
           beforeInvalidDecoration.setParent(decorate);
           renderChild(context, beforeInvalidDecoration);
        }
        
        renderChildren(context, decorate);
        
        UIComponent afterDecoration = decorate.getDecoration("afterField");
        UIComponent afterInvalidDecoration = decorate.getDecoration("afterInvalidField");
        if ( afterDecoration!=null  && !hasMessage )
        {
           afterDecoration.setParent(decorate);
           renderChild(context, afterDecoration);      }
        if ( afterInvalidDecoration!=null && hasMessage )
        {
           afterInvalidDecoration.setParent(decorate);
           renderChild(context, afterInvalidDecoration);
        }
     }
     
     @Override
     public boolean getRendersChildren()
     {
        return true;
     }
  }
  
  
  1.1      date: 2007/06/15 17:06:56;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/CacheRendererBase.java
  
  Index: CacheRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.renderkit;
  
  import java.io.IOException;
  import java.io.StringWriter;
  
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  
  import org.ajax4jsf.framework.renderer.AjaxComponentRendererBase;
  import org.jboss.seam.core.PojoCache;
  import org.jboss.seam.log.LogProvider;
  import org.jboss.seam.log.Logging;
  import org.jboss.seam.ui.component.UICache;
  
  public class CacheRendererBase extends AjaxComponentRendererBase
  {
     
     private static final LogProvider log = Logging.getLogProvider(UICache.class);
     
     @Override
     protected Class getComponentClass()
     {
        return UICache.class;
     }
     
     @Override
     protected void doEncodeChildren(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException
     {
        UICache cache = (UICache) component;
        if (cache.isEnabled())
        {
           String key = cache.getKey();
           String cachedContent = getFromCache(key, cache.getRegion());
           if (cachedContent == null)
           {
              log.debug("rendering from scratch: " + key);
              StringWriter stringWriter = new StringWriter();
              ResponseWriter cachingResponseWriter = writer.cloneWithWriter(stringWriter);
              context.setResponseWriter(cachingResponseWriter);
              renderChildren(context, component);
              context.setResponseWriter(writer);
              String output = stringWriter.getBuffer().toString();
              writer.write(output);
              putInCache(key, cache.getRegion(), output);
           }
           else
           {
              log.debug("rendering from cache: " + key);
              writer.write("<!-- cached content for: ");
              writer.write(key);
              writer.write(" -->");
              writer.write(cachedContent);
              writer.write("<!-- end of cached content -->");
           }
        }
        else
        {
           renderChildren(context, component);
        }
     }
     
  
     private static void putInCache(String key, String region, String content)
     {
        try
        {
           PojoCache.instance().put(region, key, content);
        }
        catch (Exception ce)
        {
           log.error("error accessing cache", ce);
        }
     }
  
     private static String getFromCache(String key, String region)
     {
        try
        {
           return (String) PojoCache.instance().get(region, key);
        }
        catch (Exception ce)
        {
           log.error("error accessing cache", ce);
           return null;
        }
     }
  
     @Override
     public boolean getRendersChildren()
     {
        return true;
     }
  
  }
  
  
  
  1.1      date: 2007/06/15 17:06:56;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/ButtonRendererBase.java
  
  Index: ButtonRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.renderkit;
  
  import java.io.IOException;
  
  import javax.faces.context.FacesContext;
  
  import org.ajax4jsf.framework.renderer.AjaxComponentRendererBase;
  import org.jboss.seam.ui.component.UIButton;
  
  public class ButtonRendererBase extends AjaxComponentRendererBase
  {
  
     @Override
     protected Class getComponentClass()
     {
        return UIButton.class;
     }
     
  
     public String getOnClick(FacesContext facesContext, UIButton button) throws IOException
     {
        String onclick = button.getOnclick();
        if (onclick == null)
        {
           onclick = "";
        }
        else if (onclick.length() > 0 && !onclick.endsWith(";"))
        {
           onclick += ";";
        }
        if (!button.isDisabled())
        {
           onclick += "location.href='" + button.getUrl() + "'";
        }
        return onclick;
     }
     
     @Override
     public boolean getRendersChildren()
     {
        return true;
     }
  
  }
  
  
  
  1.1      date: 2007/06/15 17:06:56;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/FileUploadRendererBase.java
  
  Index: FileUploadRendererBase.java
  ===================================================================
  package org.jboss.seam.ui.renderkit;
  
  import java.io.InputStream;
  import java.lang.reflect.Field;
  import java.lang.reflect.Method;
  
  import javax.faces.component.UIComponent;
  import javax.faces.context.FacesContext;
  import javax.servlet.ServletRequest;
  
  import org.ajax4jsf.framework.renderer.AjaxComponentRendererBase;
  import org.jboss.seam.ui.component.UIFileUpload;
  import org.jboss.seam.web.MultipartRequest;
  
  public class FileUploadRendererBase extends AjaxComponentRendererBase
  {
  
     @Override
     protected Class getComponentClass()
     {
        return UIFileUpload.class;
     }
  
     @Override
     protected void doDecode(FacesContext context, UIComponent component)
     {
        UIFileUpload fileUpload = (UIFileUpload) component;
        ServletRequest request = (ServletRequest) context.getExternalContext().getRequest();
  
        if (!(request instanceof MultipartRequest))
        {
           request = unwrapMultipartRequest(request);
        }
  
        if (request instanceof MultipartRequest)
        {
           MultipartRequest multipartRequest = (MultipartRequest) request;
  
           String clientId = component.getClientId(context);
  
           fileUpload.setLocalContentType(multipartRequest.getFileContentType(clientId));
           fileUpload.setLocalFileName(multipartRequest.getFileName(clientId));
           fileUpload.setLocalFileSize(multipartRequest.getFileSize(clientId));
        }
     }
  
     /**
      * Finds an instance of MultipartRequest wrapped within a request or its
      * (recursively) wrapped requests.
      */
     private static ServletRequest unwrapMultipartRequest(ServletRequest request)
     {
        while (!(request instanceof MultipartRequest))
        {
           boolean found = false;
  
           for (Method m : request.getClass().getMethods())
           {
              if (ServletRequest.class.isAssignableFrom(m.getReturnType())
                       && m.getParameterTypes().length == 0)
              {
                 try
                 {
                    request = (ServletRequest) m.invoke(request);
                    found = true;
                    break;
                 }
                 catch (Exception ex)
                 { /* Ignore, try the next one */
                 }
              }
           }
  
           if (!found)
           {
              for (Field f : request.getClass().getDeclaredFields())
              {
                 if (ServletRequest.class.isAssignableFrom(f.getType()))
                 {
                    try
                    {
                       request = (ServletRequest) f.get(request);
                    }
                    catch (Exception ex)
                    { /* Ignore */
                    }
                 }
              }
           }
  
           if (!found) break;
        }
  
        return request;
     }
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list