/* * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistribution in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of Sun Microsystems, Inc. or the names of * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY * DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR * RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR * ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF * THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or * intended for use in the design, construction, operation or * maintenance of any nuclear facility. */ package org.apache.cocoon.faces.samples.components.components; import org.apache.cocoon.faces.samples.components.model.ImageArea; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; /** * <p>{@link AreaComponent} is a JavaServer Faces component that represents * a particular hotspot in a client-side image map defined by our parent * {@link MapComponent}. The <code>valueRef</code> property (if present) * must point at a JavaBean of type <code>org.apache.cocoon.faces.samples.components.model.ImageArea</code>; * if not present, an <code>ImageArea</code> instance will be synthesized * from the values of the <code>alt</code>, <code>coords</code>, and * <code>shape</code> properties, and assigned to the <code>value</code> * property.</p> */ public class AreaComponent extends UIOutput { // ------------------------------------------------------ Instance Variables private String alt = null; private String coords = null; private String shape = null; private String targetImage = null; // -------------------------------------------------------------- Properties /** * <p>Return the alternate text for our synthesized {@link ImageArea}.</p> */ public String getAlt() { return (this.alt); } /** * <p>Set the alternate text for our synthesized {@link ImageArea}.</p> * * @param alt The new alternate text */ public void setAlt(String alt) { this.alt = alt; } /** * <p>Return the hotspot coordinates for our synthesized {@link ImageArea}. * </p> */ public String getCoords() { return (this.coords); } /** * <p>Set the hotspot coordinates for our synthesized {@link ImageArea}.</p> * * @param coords The new coordinates */ public void setCoords(String coords) { this.coords = coords; } /** * <p>Return the shape for our synthesized {@link ImageArea}.</p> */ public String getShape() { return (this.shape); } /** * <p>Set the shape for our synthesized {@link ImageArea}.</p> * * @param shape The new shape (default, rect, circle, poly) */ public void setShape(String shape) { this.shape = shape; } /** * <p>Set the image that is the target of this <code>AreaComponent</code>.</p> * * @return the target image of this area component. */ public String getTargetImage() { return targetImage; } /** * <p>Set the image that is the target of this <code>AreaComponent</code>.</p> * * @param targetImage the ID of the target of this <code>AreaComponent</code> */ public void setTargetImage(String targetImage) { this.targetImage = targetImage; } /** * <p>Return the component family for this component.</p> */ public String getFamily() { return ("Area"); } // -------------------------------------------------------- UIOutput Methods /** * <p>Synthesize and return an {@link ImageArea} bean for this hotspot, * if there is no <code>valueRef</code> property on this component.</p> */ public Object getValue() { if (super.getValue() == null) { setValue(new ImageArea(getAlt(), getCoords(), getShape())); } return (super.getValue()); } // ----------------------------------------------------- StateHolder Methods /** * <p>Return the state to be saved for this component.</p> * * @param context <code>FacesContext</code> for the current request */ public Object saveState(FacesContext context) { Object values[] = new Object[5]; values[0] = super.saveState(context); values[1] = alt; values[2] = coords; values[3] = shape; values[4] = targetImage; return (values); } /** * <p>Restore the state for this component.</p> * * @param context <code>FacesContext</code> for the current request * @param state State to be restored */ public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); alt = (String) values[1]; coords = (String) values[2]; shape = (String) values[3]; targetImage = (String) values[4]; } }