[jboss-cvs] jboss-seam/src/ui/org/jboss/seam/ui ...

Shane Bryzak sbryzak at redhat.com
Mon Feb 26 19:46:48 EST 2007


  User: sbryzak2
  Date: 07/02/26 19:46:48

  Added:       src/ui/org/jboss/seam/ui      UIFileUpload.java
                        UISelectDate.java
  Removed:     src/ui/org/jboss/seam/ui      FileUpload.java
                        SelectDate.java selectDate.js
  Log:
  JBSEAM-929
  
  Revision  Changes    Path
  1.1      date: 2007/02/27 00:46:48;  author: sbryzak2;  state: Exp;jboss-seam/src/ui/org/jboss/seam/ui/UIFileUpload.java
  
  Index: UIFileUpload.java
  ===================================================================
  package org.jboss.seam.ui;
  
  import java.io.IOException;
  import java.io.InputStream;
  import java.lang.reflect.Field;
  
  import javax.faces.component.UIComponentBase;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  import javax.faces.el.ValueBinding;
  import javax.servlet.http.HttpServletRequestWrapper;
  
  import org.jboss.seam.web.MultipartRequest;
  
  /**
   * A file upload component.
   * 
   * @author Shane Bryzak
   */
  public class UIFileUpload extends UIComponentBase
  {
     public static final String COMPONENT_TYPE   = "org.jboss.seam.ui.UIFileUpload";
     public static final String COMPONENT_FAMILY = "org.jboss.seam.ui.FileUpload";
     
     private static final String TOMAHAWK_WRAPPER_CLASS = "org.apache.myfaces.webapp.filter.MultipartRequestWrapper";
     
     private String accept;
     private String required;
     private String disabled;
     private String styleClass;
     private String style;   
     
     @Override
     public void decode(FacesContext context)
     {
        super.decode(context);
        
        Object request = context.getExternalContext().getRequest();
        
        if (!(request instanceof MultipartRequest) && 
                 request instanceof HttpServletRequestWrapper)
        {
           request = ((HttpServletRequestWrapper) request).getRequest();
        }
        
        if (!(request instanceof MultipartRequest) &&
                 request.getClass().getName().equals(TOMAHAWK_WRAPPER_CLASS))
        {
           Field f = null;         
           try
           {
             f = request.getClass().getDeclaredField("request");
             f.setAccessible(true);
             request = f.get(request);
           }
           catch (Exception ex) 
           { 
              // too bad            
           }
           finally
           {
              if (f != null) f.setAccessible(false);
           }
        }
  
        if (request instanceof MultipartRequest)
        {
           MultipartRequest req = (MultipartRequest) request;
           
           String clientId = getClientId(context);         
           String contentType = req.getFileContentType(clientId);
           String fileName = req.getFileName(clientId);
           int fileSize = req.getFileSize(clientId);
                    
           ValueBinding dataBinding = getValueBinding("data");
           if (dataBinding != null)
           {
              Class cls = dataBinding.getType(context);
              if (cls.isAssignableFrom(InputStream.class))
              {
                 dataBinding.setValue(context, req.getFileInputStream(clientId));
              }
              else if (cls.isAssignableFrom(byte[].class))
              {
                 dataBinding.setValue(context, req.getFileBytes(clientId));
              }
           }
           
           ValueBinding vb = getValueBinding("contentType");
           if (vb != null)
              vb.setValue(context, contentType);
           
           vb = getValueBinding("fileName");
           if (vb != null)
              vb.setValue(context, fileName);
           
           vb = getValueBinding("fileSize");
           if (vb != null)
              vb.setValue(context, fileSize);
        }      
     }
        
     @Override
     public void encodeEnd(FacesContext context) 
        throws IOException
     {
        super.encodeEnd(context);
  
        ResponseWriter writer = context.getResponseWriter();
        writer.startElement(HTML.INPUT_ELEM, this);      
        writer.writeAttribute(HTML.TYPE_ATTR, HTML.FILE_ATTR, null);
        
        String clientId = this.getClientId(context);      
        writer.writeAttribute(HTML.ID_ATTR, clientId, null);     
        writer.writeAttribute(HTML.NAME_ATTR, clientId, null);
        
        ValueBinding vb = getValueBinding("accept");
        if (vb != null)
        {
           writer.writeAttribute(HTML.ACCEPT_ATTR, vb.getValue(context), null);
        }
        else if (accept != null)
        {
           writer.writeAttribute(HTML.ACCEPT_ATTR, accept, null);
        }
        
        writer.endElement(HTML.INPUT_ELEM);
     }
     
     @Override
     public String getFamily()
     {
        return COMPONENT_FAMILY;
     }
  
     public String getAccept()
     {
        return accept;
     }
  
     public void setAccept(String accept)
     {
        this.accept = accept;
     }
  
     public String getDisabled()
     {
        return disabled;
     }
  
     public void setDisabled(String disabled)
     {
        this.disabled = disabled;
     }
  
     public String getRequired()
     {
        return required;
     }
  
     public void setRequired(String required)
     {
        this.required = required;
     }
  
     public String getStyle()
     {
        return style;
     }
  
     public void setStyle(String style)
     {
        this.style = style;
     }
  
     public String getStyleClass()
     {
        return styleClass;
     }
  
     public void setStyleClass(String styleClass)
     {
        this.styleClass = styleClass;
     }
  
  }
  
  
  
  1.1      date: 2007/02/27 00:46:48;  author: sbryzak2;  state: Exp;jboss-seam/src/ui/org/jboss/seam/ui/UISelectDate.java
  
  Index: UISelectDate.java
  ===================================================================
  package org.jboss.seam.ui;
  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.component.UIComponentBase;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  import javax.faces.el.ValueBinding;
  import org.jboss.seam.ui.resource.WebResource;
  public class UISelectDate extends UIComponentBase
  {
     public static final String COMPONENT_TYPE = "org.jboss.seam.ui.UISelectDate";
     public static final String COMPONENT_FAMILY = "org.jboss.seam.ui.SelectDate";
     private String forField;
     private String dateFormat = "MM/dd/yyyy";
     
     public String getDateFormat()
     {
        ValueBinding vb = getValueBinding("dateFormat");
        return (vb != null) ? JSF.getStringValue(getFacesContext(), vb) : dateFormat;
     }
     public void setDateFormat(String dateFormat)
     {
        this.dateFormat = dateFormat;
     }
     public String getFor()
     {
        ValueBinding vb = getValueBinding("for");
        return (vb != null) ? JSF.getStringValue(getFacesContext(), vb) : forField;
     }
     public void setFor(String forField)
     {
        this.forField = forField;
     }
     @Override
     public String getFamily()
     {
        return COMPONENT_FAMILY;
     }
     @Override
     public boolean getRendersChildren()
     {
        return false;
     }
     @Override
     public void restoreState(FacesContext context, Object state) 
     {
        Object[] values = (Object[]) state;
        super.restoreState(context, values[0]);
        forField = (String) values[1];
        dateFormat = (String) values[2];
     }
     @Override
     public Object saveState(FacesContext context) 
     {
        Object[] values = new Object[3];
        values[0] = super.saveState(context);
        values[1] = forField;
        values[2] = dateFormat;
        return values;
     }
      
      @Override
      public void encodeBegin(FacesContext context) throws IOException
      {
          UIComponent forComponent = findComponent(getFor());
          writeScript(context);
          ResponseWriter response = context.getResponseWriter();
          response.startElement("span", this);
          response.writeAttribute("onclick", 
                                  "__selectDate('" + forComponent.getClientId(context) + 
                                  "', '" + forComponent.getClientId(context) + "');", 
                                  null);
      }
      @Override
      public void encodeEnd(FacesContext context) throws IOException
      {
          ResponseWriter response = context.getResponseWriter();
          response.endElement("span");
          response.flush();
          super.encodeEnd(context);
      }
      public void writeScript(FacesContext context) 
          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());
          
          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) 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 = '" + getDateFormat() + "';\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(maxLength == -1 ? val : val.substring(0, maxLength));
            }
         }
         return sb.toString();
      }
                          
  }
  
  
  



More information about the jboss-cvs-commits mailing list