blob: 5d1863388bef3dca79d58b1b29de44abb2fcb203 [file] [log] [blame]
/*
* 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];
}
}