/* * Copyright 2007 Sun Microsystems, Inc. * All rights reserved. You may not modify, use, * reproduce, or distribute this software except in * compliance with the terms of the License at: * http://developer.sun.com/berkeley_license.html */ package com.sun.bookstore6.components; import com.sun.bookstore6.listeners.AreaSelectedEvent; import javax.faces.component.UICommand; import javax.faces.context.FacesContext; import java.io.IOException; /** * <p>{@link MapComponent} is a JavaServer Faces component that corresponds * to a client-side image map. It can have one or more children of type * {@link AreaComponent}, each representing hot spots, which a user can * click on and mouse over.</p> * * <p>This component is a source of {@link AreaSelectedEvent} events, * which are fired whenever the current area is changed.</p> */ public class MapComponent extends UICommand { // ------------------------------------------------------ Instance Variables private String current = null; // --------------------------------------------------------------Constructors public MapComponent() { super(); } // -------------------------------------------------------------- Properties /** * <p>Return the alternate text label for the currently selected * child {@link AreaComponent}.</p> */ public String getCurrent() { return (this.current); } /** * <p>Set the alternate text label for the currently selected child. * If this is different from the previous value, fire an * {@link AreaSelectedEvent} to interested listeners.</p> * * @param current The new alternate text label */ public void setCurrent(String current) { String previous = this.current; this.current = current; // Fire an {@link AreaSelectedEvent} if appropriate if ((previous == null) && (current == null)) { return; } else if ((previous != null) && (current != null) && (previous.equals(current))) { return; } else { this.queueEvent(new AreaSelectedEvent(this)); } } /** * <p>Return the component family for this component.</p> */ public String getFamily() { return ("Map"); } // ----------------------------------------------------- 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[2]; values[0] = super.saveState(context); values[1] = current; 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]); current = (String) values[1]; } }