[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