Hi Grant, Could you please avoid combining code changes and reformatting in the same patch? It is just impossible from this patch to determine what *real* changes you have made to ComponentUtils.
And I believe the coding convention here is to use spaces, *not* tabs, but you have replaced all spaces *with* tabs in ComponentUtils. What were the actual ComponentUtils changes? Thanks, Simon [EMAIL PROTECTED] schrieb: > Author: grantsmith > Date: Tue Mar 25 08:40:50 2008 > New Revision: 640864 > > URL: http://svn.apache.org/viewvc?rev=640864&view=rev > Log: > https://issues.apache.org/jira/browse/TOMAHAWK-1216 patch applied > > Added: > > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAConstants.java > > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAResponseStream.java > Modified: > > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/CAPTCHARenderer.java > > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAImageGenerator.java > > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/util/ComponentUtils.java > myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/web.xml > > Modified: > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/CAPTCHARenderer.java > URL: > http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/CAPTCHARenderer.java?rev=640864&r1=640863&r2=640864&view=diff > ============================================================================== > --- > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/CAPTCHARenderer.java > (original) > +++ > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/CAPTCHARenderer.java > Tue Mar 25 08:40:50 2008 > @@ -19,22 +19,40 @@ > package org.apache.myfaces.custom.captcha; > > import java.io.IOException; > +import java.util.Map; > > +import javax.faces.FacesException; > +import javax.faces.FactoryFinder; > import javax.faces.component.UIComponent; > import javax.faces.context.FacesContext; > +import javax.faces.context.FacesContextFactory; > +import javax.faces.context.ResponseStream; > import javax.faces.context.ResponseWriter; > +import javax.faces.lifecycle.Lifecycle; > +import javax.faces.lifecycle.LifecycleFactory; > import javax.faces.render.Renderer; > +import javax.servlet.ServletContext; > +import javax.servlet.http.HttpServletRequest; > +import javax.servlet.http.HttpServletResponse; > + > +import org.apache.myfaces.component.html.util.ParameterResourceHandler; > +import org.apache.myfaces.custom.captcha.util.CAPTCHAImageGenerator; > +import org.apache.myfaces.custom.captcha.util.CAPTCHAResponseStream; > +import org.apache.myfaces.custom.captcha.util.CAPTCHATextGenerator; > +import org.apache.myfaces.custom.util.ComponentUtils; > +import org.apache.myfaces.renderkit.html.util.AddResource; > +import org.apache.myfaces.renderkit.html.util.AddResourceFactory; > +import org.apache.myfaces.renderkit.html.util.ResourceLoader; > +import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML; > > -public class CAPTCHARenderer extends Renderer { > - > - private static final String CAPTCHA_SERVLET_NAME = > "apache_captcha_servlet_url"; > +public class CAPTCHARenderer extends Renderer implements ResourceLoader { > > public void encodeBegin(FacesContext context, UIComponent component) > throws IOException { > > CAPTCHAComponent captchaComponent = (CAPTCHAComponent) > component; > > - renderCAPTCHA(context, captchaComponent); > + generateImageTag(context, captchaComponent); > } > > public void encodeEnd(FacesContext context, UIComponent component) > @@ -43,25 +61,104 @@ > } > > /* > - * This helper method renders the img tag that will > - * call the CAPTCHAServlet to render the CAPTCHA image. > + * This helper method is used for generating the img tag that will > + * use the (AddResource) to generate the url of the generated image. > */ > - private void renderCAPTCHA(FacesContext context, CAPTCHAComponent > component) > + private void generateImageTag(FacesContext context, CAPTCHAComponent > component) > throws IOException { > + > + AddResource addResource = null; > + String url = null; > + CAPTCHAComponent captchaComponent = (CAPTCHAComponent) > component; > ResponseWriter writer = context.getResponseWriter(); > + Map params = ComponentUtils.getParameterMap(component); > + String captchaSessionKeyName = > captchaComponent.getCaptchaSessionKeyName(); > + > + writer.startElement(HTML.IMG_ELEM, captchaComponent); > + > + if (captchaSessionKeyName != null) { > + > params.put(CAPTCHAComponent.ATTRIBUTE_CAPTCHASESSIONKEYNAME, > + captchaSessionKeyName); > + } > + > + addResource = AddResourceFactory.getInstance(context); > + > + url = context.getExternalContext().encodeResourceURL( > + addResource.getResourceUri(context, > + new > ParameterResourceHandler(this.getClass(), params))); > + > + writer.writeAttribute(HTML.SRC_ATTR, url, null); > > - writer.startElement("img", component); > - writer.writeAttribute("src", CAPTCHA_SERVLET_NAME + "?" > - + appendParameters(component), "src"); > - writer.endElement("img"); > + writer.endElement(HTML.IMG_ELEM); > } > > + > + /* > + * This method is implemented to be called from the (AddResource). > + * It wraps the CAPTCHA image generation. > + */ > + public void serveResource(ServletContext servletContext, > + HttpServletRequest request, HttpServletResponse > response, > + String resourceUri) throws IOException { > + > + // get the FacesContext from the ServletContext. > + FacesContextFactory facesContextFactory = (FacesContextFactory) > FactoryFinder > + > .getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); > + LifecycleFactory lifecycleFactory = (LifecycleFactory) > FactoryFinder > + .getFactory(FactoryFinder.LIFECYCLE_FACTORY); > + Lifecycle lifecycle = > lifecycleFactory.getLifecycle(ComponentUtils > + .getLifecycleId(servletContext)); > + FacesContext facesContext = facesContextFactory.getFacesContext( > + servletContext, request, response, lifecycle); > + facesContext.setResponseStream(new > CAPTCHAResponseStream(response > + .getOutputStream())); > + > + // render the CAPTCHA. > + try { > + try { > + renderCAPTCHA(facesContext); > + } catch (IOException e) { > + throw new FacesException("Could not render the > CAPTCHA : " > + + e.getMessage(), e); > + } > + facesContext.getResponseStream().close(); > + } finally { > + facesContext.release(); > + } > + } > + > /* > - * This helper method is used for appending the parameters to the > - * CAPTCHA servlet. > + * This method is used for rendering the CAPTCHA component. > */ > - private String appendParameters(CAPTCHAComponent component) { > - return CAPTCHAComponent.ATTRIBUTE_CAPTCHASESSIONKEYNAME + "=" > - + component.getCaptchaSessionKeyName(); > - } > + protected void renderCAPTCHA(FacesContext facesContext) throws > IOException{ > + > + // Initialize the CAPTCHA world. > + HttpServletResponse response = (HttpServletResponse) > facesContext > + .getExternalContext().getResponse(); > + ResponseStream out = facesContext.getResponseStream(); > + final Map requestMap = facesContext.getExternalContext() > + .getRequestParameterMap(); > + HttpServletRequest request = (HttpServletRequest) facesContext > + .getExternalContext().getRequest(); > + String captchaText = null; > + CAPTCHAImageGenerator captchaImageGenerator = new > CAPTCHAImageGenerator(); > + String captchaSessionKeyName = requestMap.get( > + > CAPTCHAComponent.ATTRIBUTE_CAPTCHASESSIONKEYNAME).toString(); > + > + try { > + > + // Generate random CAPTCHA text. > + captchaText = CAPTCHATextGenerator.generateRandomText(); > + > + // Generate the image. > + captchaImageGenerator.generateImage(response, > captchaText); > + > + // Set the generated text in the user session. > + > request.getSession().setAttribute(captchaSessionKeyName, captchaText); > > + > + } finally { > + out.close(); > + facesContext.responseComplete(); > + } > + } > } > > Added: > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAConstants.java > URL: > http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAConstants.java?rev=640864&view=auto > ============================================================================== > --- > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAConstants.java > (added) > +++ > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAConstants.java > Tue Mar 25 08:40:50 2008 > @@ -0,0 +1,36 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one > + * or more contributor license agreements. See the NOTICE file > + * distributed with this work for additional information > + * regarding copyright ownership. The ASF licenses this file > + * to you under the Apache License, Version 2.0 (the > + * "License"); you may not use this file except in compliance > + * with the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, > + * software distributed under the License is distributed on an > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > + * KIND, either express or implied. See the License for the > + * specific language governing permissions and limitations > + * under the License. > + */ > +package org.apache.myfaces.custom.captcha.util; > + > +/** > + * This interface holds all the CAPTCHA related constants. > + */ > +public interface CAPTCHAConstants { > + > + public static final int CAPTCHA_WIDTH = 290; > + > + public static final int CAPTCHA_HEIGHT = 81; > + > + public static final double PI = 3.1415926535897932384626433832795; > + > + public static final int TEXT_X_COORDINATE = 50; > + > + public static final int TEXT_Y_COORDINATE = 60; > + > +} > > Modified: > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAImageGenerator.java > URL: > http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAImageGenerator.java?rev=640864&r1=640863&r2=640864&view=diff > ============================================================================== > --- > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAImageGenerator.java > (original) > +++ > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAImageGenerator.java > Tue Mar 25 08:40:50 2008 > @@ -35,16 +35,10 @@ > > > /** > - * This class is responsible for generating the > - * CAPTCHA image. > + * This class is responsible for generating the CAPTCHA image. > */ > public class CAPTCHAImageGenerator { > - > - private static final int CAPTCHA_WIDTH = 290; > - private static final int CAPTCHA_HEIGHT = 81; > - private static final double PI = 3.1415926535897932384626433832795; > - private static final int TEXT_X_COORDINATE = 50; > - private static final int TEXT_Y_COORDINATE = 60; > + > private static final Color startingColor = new Color(150, 50, 150); > private static final Color endingColor = new Color(255, 255, 255); > > @@ -53,8 +47,6 @@ > */ > private void drawTextOnImage(Graphics2D graphics, String captchaText) { > > - > - > Font font = null; > TextLayout textLayout = null; > double currentFontStatus = Math.random(); > @@ -71,7 +63,8 @@ > textLayout = new TextLayout(captchaText, font, graphics > .getFontRenderContext()); > > - textLayout.draw(graphics, TEXT_X_COORDINATE, TEXT_Y_COORDINATE); > + textLayout.draw(graphics, CAPTCHAConstants.TEXT_X_COORDINATE, > + CAPTCHAConstants.TEXT_Y_COORDINATE); > } > > /* > @@ -116,8 +109,9 @@ > > > // Create the CAPTCHA Image. > - bufferedImage = new BufferedImage(CAPTCHA_WIDTH, > - CAPTCHA_HEIGHT, > BufferedImage.TYPE_BYTE_INDEXED); > + bufferedImage = new > BufferedImage(CAPTCHAConstants.CAPTCHA_WIDTH, > + CAPTCHAConstants.CAPTCHA_HEIGHT, > + BufferedImage.TYPE_BYTE_INDEXED); > > // Setup the graphics object. > graphics = bufferedImage.createGraphics(); > @@ -200,20 +194,21 @@ > Random random = new Random(); > > // Random Y Points. > - yPoint1 = random.nextInt(CAPTCHA_HEIGHT); > - yPoint2 = random.nextInt(CAPTCHA_HEIGHT); > - yPoint3 = CAPTCHA_HEIGHT / 2; > - yPoint4 = random.nextInt(CAPTCHA_HEIGHT); > - yPoint5 = random.nextInt(CAPTCHA_HEIGHT); > + yPoint1 = random.nextInt(CAPTCHAConstants.CAPTCHA_HEIGHT); > + yPoint2 = random.nextInt(CAPTCHAConstants.CAPTCHA_HEIGHT); > + yPoint3 = CAPTCHAConstants.CAPTCHA_HEIGHT / 2; > + yPoint4 = random.nextInt(CAPTCHAConstants.CAPTCHA_HEIGHT); > + yPoint5 = random.nextInt(CAPTCHAConstants.CAPTCHA_HEIGHT); > > // Draw the random broken line. > - drawThickLineOnImage(graphics, 0, yPoint1, CAPTCHA_WIDTH / 4, > yPoint2); > - drawThickLineOnImage(graphics, CAPTCHA_WIDTH / 4, yPoint2, > - CAPTCHA_WIDTH / 2, yPoint3); > - drawThickLineOnImage(graphics, CAPTCHA_WIDTH / 2, yPoint3, > - 3 * CAPTCHA_WIDTH / 4, yPoint4); > - drawThickLineOnImage(graphics, 3 * CAPTCHA_WIDTH / 4, yPoint4, > - CAPTCHA_WIDTH, yPoint5); > + drawThickLineOnImage(graphics, 0, yPoint1, > + CAPTCHAConstants.CAPTCHA_WIDTH / 4, yPoint2); > + drawThickLineOnImage(graphics, CAPTCHAConstants.CAPTCHA_WIDTH / > 4, > + yPoint2, CAPTCHAConstants.CAPTCHA_WIDTH / 2, > yPoint3); > + drawThickLineOnImage(graphics, CAPTCHAConstants.CAPTCHA_WIDTH / > 2, > + yPoint3, 3 * CAPTCHAConstants.CAPTCHA_WIDTH / > 4, yPoint4); > + drawThickLineOnImage(graphics, 3 * > CAPTCHAConstants.CAPTCHA_WIDTH / 4, > + yPoint4, CAPTCHAConstants.CAPTCHA_WIDTH, > yPoint5); > } > > /* > @@ -223,7 +218,8 @@ > private double getDelta(int period, double i, double phase, double > frames) { > return (double) (period / 2) > * Math.sin((double) i / (double) period > - + (2 * PI * (double) phase) / > (double) frames); > + + (2 * CAPTCHAConstants.PI * > (double) phase) > + / (double) frames); > } > > /* > > Added: > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAResponseStream.java > URL: > http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAResponseStream.java?rev=640864&view=auto > ============================================================================== > --- > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAResponseStream.java > (added) > +++ > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/captcha/util/CAPTCHAResponseStream.java > Tue Mar 25 08:40:50 2008 > @@ -0,0 +1,56 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one > + * or more contributor license agreements. See the NOTICE file > + * distributed with this work for additional information > + * regarding copyright ownership. The ASF licenses this file > + * to you under the Apache License, Version 2.0 (the > + * "License"); you may not use this file except in compliance > + * with the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, > + * software distributed under the License is distributed on an > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > + * KIND, either express or implied. See the License for the > + * specific language governing permissions and limitations > + * under the License. > + */ > +package org.apache.myfaces.custom.captcha.util; > + > +import java.io.IOException; > +import java.io.OutputStream; > +import javax.faces.context.ResponseStream; > + > +/** > + * This class is responsible for wrapping the CAPTCHA Image > + * response stream. > + */ > +public final class CAPTCHAResponseStream extends ResponseStream { > + private final OutputStream _out; > + > + public CAPTCHAResponseStream(OutputStream out) { > + _out = out; > + } > + > + public void close() throws IOException { > + _out.flush(); > + _out.close(); > + } > + > + public void flush() throws IOException { > + _out.flush(); > + } > + > + public void write(byte[] b, int off, int len) throws IOException { > + _out.write(b, off, len); > + } > + > + public void write(byte[] b) throws IOException { > + _out.write(b); > + } > + > + public void write(int b) throws IOException { > + _out.write(b); > + } > +} > > Modified: > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/util/ComponentUtils.java > URL: > http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/util/ComponentUtils.java?rev=640864&r1=640863&r2=640864&view=diff > ============================================================================== > --- > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/util/ComponentUtils.java > (original) > +++ > myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/util/ComponentUtils.java > Tue Mar 25 08:40:50 2008 > @@ -20,9 +20,16 @@ > package org.apache.myfaces.custom.util; > > import javax.faces.component.UIComponent; > +import javax.faces.component.UIParameter; > import javax.faces.component.html.HtmlMessages; > import javax.faces.context.FacesContext; > +import javax.faces.lifecycle.LifecycleFactory; > +import javax.faces.webapp.FacesServlet; > +import javax.servlet.ServletContext; > + > +import java.util.HashMap; > import java.util.Iterator; > +import java.util.Map; > > /** > * User: treeder > @@ -32,7 +39,7 @@ > public final class ComponentUtils > { > > - private ComponentUtils(){ > + private ComponentUtils() { > > } > > @@ -44,111 +51,140 @@ > * @param clientId > * @return component referenced by clientId or null if not found > */ > - public static UIComponent findComponentByClientId(FacesContext context, > UIComponent root, String clientId) > - { > - UIComponent component = null; > - for (int i = 0; i < root.getChildCount() && component == null; i++) > - { > - UIComponent child = (UIComponent) root.getChildren().get(i); > - component = findComponentByClientId(context, child, clientId); > - } > - if (root.getId() != null) > - { > - if (component == null && > root.getClientId(context).equals(clientId)) > - { > - component = root; > - } > - } > - return component; > - } > + public static UIComponent findComponentByClientId(FacesContext context, > + UIComponent root, String clientId) { > + UIComponent component = null; > + for (int i = 0; i < root.getChildCount() && component == null; > i++) { > + UIComponent child = (UIComponent) > root.getChildren().get(i); > + component = findComponentByClientId(context, child, > clientId); > + } > + if (root.getId() != null) { > + if (component == null && > root.getClientId(context).equals(clientId)) { > + component = root; > + } > + } > + return component; > + } > > /** > - * Useful if you don't know the clientId > - * <p/> > - * TR- This was moved from AjaxPhaseListenere on checkin 344383 > - * Seems like this could be made more efficient > - * > - * @param context > - * @param root > - * @param id > - * @return component referenced by id or null if not found > - */ > - public static UIComponent findComponentById(FacesContext context, > UIComponent root, String id) > - { > - UIComponent component = null; > - for (int i = 0; i < root.getChildCount() && component == null; i++) > - { > - UIComponent child = (UIComponent) root.getChildren().get(i); > - component = findComponentById(context, child, id); > - } > - //System.out.println("component looking for: " + id + " - rootid: " > + root.getId() + " " + root); > - if (root.getId() != null) > - { > - if (component == null && root.getId().equals(id)) > - { > - component = root; > - } > - } > - return component; > - } > - > - public static UIComponent findFirstMessagesComponent(FacesContext > context, UIComponent base) > - { > - if (base == null) > - { > - return null; > - } > - > - if (base instanceof HtmlMessages) > - { > - return base; > - } > - > - Iterator iterChildren = base.getFacetsAndChildren(); > - while (iterChildren.hasNext()) > - { > - UIComponent child = (UIComponent) iterChildren.next(); > - > - UIComponent found = findFirstMessagesComponent(context, child); > - if (found != null) > - { > - return found; > - } > - } > + * Useful if you don't know the clientId <p/> TR- This was moved from > + * AjaxPhaseListenere on checkin 344383 Seems like this could be made > more > + * efficient > + * > + * @param context > + * @param root > + * @param id > + * @return component referenced by id or null if not found > + */ > + public static UIComponent findComponentById(FacesContext context, > + UIComponent root, String id) { > + UIComponent component = null; > + for (int i = 0; i < root.getChildCount() && component == null; > i++) { > + UIComponent child = (UIComponent) > root.getChildren().get(i); > + component = findComponentById(context, child, id); > + } > + // System.out.println("component looking for: " + id + " - > rootid: " + > + // root.getId() + " " + root); > + if (root.getId() != null) { > + if (component == null && root.getId().equals(id)) { > + component = root; > + } > + } > + return component; > + } > > - return null; > - } > - > - > - private static boolean isDecorated(UIComponent component, String > attribute, String value) { > - String attributeValue = (String) > component.getAttributes().get(attribute); > - > - if(attributeValue == null || attributeValue.indexOf(value) == > -1) > + public static UIComponent findFirstMessagesComponent(FacesContext > context, > + UIComponent base) { > + if (base == null) { > + return null; > + } > + > + if (base instanceof HtmlMessages) { > + return base; > + } > + > + Iterator iterChildren = base.getFacetsAndChildren(); > + while (iterChildren.hasNext()) { > + UIComponent child = (UIComponent) iterChildren.next(); > + > + UIComponent found = findFirstMessagesComponent(context, > child); > + if (found != null) { > + return found; > + } > + } > + > + return null; > + } > + > + private static boolean isDecorated(UIComponent component, String > attribute, > + String value) { > + String attributeValue = (String) component.getAttributes().get( > + attribute); > + > + if (attributeValue == null || attributeValue.indexOf(value) == > -1) > return false; > else > return true; > } > > /** > - * Changes the event attributes like onclick by appending the given > value > - * > - * @param component UIComponent instance that the attribute > belongs to > - * @param attribute Attribute to be changed > - * @param value Value to be appended > - */ > - public static void decorateEventAttribute(UIComponent component, String > attribute, String value) { > - if(isDecorated(component, attribute, value)) > + * Changes the event attributes like onclick by appending the given > value > + * > + * @param component > + * UIComponent instance that the attribute belongs to > + * @param attribute > + * Attribute to be changed > + * @param value > + * Value to be appended > + */ > + public static void decorateEventAttribute(UIComponent component, > + String attribute, String value) { > + if (isDecorated(component, attribute, value)) > return; > - > - String attributeValue = (String) > component.getAttributes().get(attribute); > - > - if(attributeValue == null) > + > + String attributeValue = (String) component.getAttributes().get( > + attribute); > + > + if (attributeValue == null) > component.getAttributes().put(attribute, value); > + else if (attributeValue.endsWith(";")) > + component.getAttributes().put(attribute, attributeValue > + value); > else > - if( attributeValue.endsWith(";")) > - component.getAttributes().put(attribute, > attributeValue + value); > - else > - component.getAttributes().put(attribute, > attributeValue + ";" + value); > + component.getAttributes().put(attribute, > + attributeValue + ";" + value); > } > - > + > + /** > + * The getParameterMap() is used for getting the parameters > + * of a specific component. > + * @param component > + * @return the Map of the component. > + */ > + public static Map getParameterMap(UIComponent component) { > + Map result = new HashMap(); > + for (Iterator iter = component.getChildren().iterator(); > iter.hasNext();) { > + UIComponent child = (UIComponent) iter.next(); > + if (child instanceof UIParameter) { > + UIParameter uiparam = (UIParameter) child; > + Object value = uiparam.getValue(); > + if (value != null) { > + result.put(uiparam.getName(), value); > + } > + } > + } > + return result; > + } > + > + /** > + * The getLifecycleId() is used for getting the id of > + * the Lifecycle from the ServletContext. > + * @param context > + * @return the id of the life cycle. > + */ > + public static String getLifecycleId(ServletContext context) { > + String lifecycleId = context > + > .getInitParameter(FacesServlet.LIFECYCLE_ID_ATTR); > + return lifecycleId != null ? lifecycleId > + : LifecycleFactory.DEFAULT_LIFECYCLE; > + } > } > > Modified: > myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/web.xml > URL: > http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/web.xml?rev=640864&r1=640863&r2=640864&view=diff > ============================================================================== > --- myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/web.xml > (original) > +++ myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/web.xml > Tue Mar 25 08:40:50 2008 > @@ -177,12 +177,6 @@ > <url-pattern>*.jsf</url-pattern> > </filter-mapping> > > - <!-- Captcha Servlet --> > - <servlet> > - <servlet-name>captcha</servlet-name> > - > <servlet-class>org.apache.myfaces.custom.captcha.servlet.CaptchaServlet</servlet-class> > - </servlet> > - > <servlet> > <servlet-name>Faces Servlet</servlet-name> > <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> > @@ -201,11 +195,7 @@ > <servlet-mapping> > <servlet-name>SourceCodeServlet</servlet-name> > <url-pattern>*.source</url-pattern> > - </servlet-mapping> > - <servlet-mapping> > - <servlet-name>captcha</servlet-name> > - <url-pattern>/apache_captcha_servlet_url</url-pattern> > - </servlet-mapping> > + </servlet-mapping> > <welcome-file-list> > <welcome-file>index.html</welcome-file> > <welcome-file>index.htm</welcome-file> > > > >