/*
* Copyright 2004-2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
package components.components;
import components.model.ImageArea;
import javax.faces.component.UIOutput;
import javax.faces.context.FacesContext;
import java.io.IOException;
/**
* <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>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
*
* @throws IOException if an input/output error occurs
*/
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];
}
}