[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