/*
 * Licensed Materials - Property of Rogue Wave Software, Inc. 
 * © Copyright Rogue Wave Software, Inc. 2014, 2015 
 * © Copyright IBM Corp. 2009, 2014
 * © Copyright ILOG 1996, 2009
 * All Rights Reserved.
 *
 * Note to U.S. Government Users Restricted Rights:
 * The Software and Documentation were developed at private expense and
 * are "Commercial Items" as that term is defined at 48 CFR 2.101,
 * consisting of "Commercial Computer Software" and
 * "Commercial Computer Software Documentation", as such terms are
 * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
 * as applicable.
 */
package demo;

import javax.faces.component.UIOutput;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;

/**
 * JSF Component to store a variable name and value, for transmission to JavaScript code.
 */
public class JavaScriptVariableComponent extends UIOutput {
  static final String VARNAME_PROPERTY="varName"; //$NON-NLS-1$
  static final String VARVALUE_PROPERTY="varValue";//$NON-NLS-1$
  private String varName;
  private String varValue;
  /**
   * @return the varName
   */
  public String getVarName() {
    ValueBinding v = getValueBinding(VARNAME_PROPERTY);
    if (v != null) {
      Object rtn = v.getValue(FacesContext.getCurrentInstance());
      return rtn.toString();
    }
    return varName;
  }
  /**
   * @param varName
   *          the varName to set
   */
  public void setVarName(String varName) {
    this.varName = varName;
  }
  /**
   * @return the varValue
   */
  public String getVarValue() {
    ValueBinding v = getValueBinding(VARVALUE_PROPERTY); 
    if (v != null) {
      Object rtn = v.getValue(FacesContext.getCurrentInstance());
      return rtn.toString();
    }
    return varValue;
  }
  /**
   * @param varValue
   *          the varValue to set
   */
  public void setVarValue(String varValue) {
    this.varValue = varValue;
  }
  public Object saveState(FacesContext context) {
    Object[] state = new Object[4];
    state[0] = super.saveState(context);
    state[1] = getVarName();
    state[2] = getVarValue();
    return state;
  }
  public void restoreState(FacesContext context, Object stateObj) {
    Object[] state = (Object[]) stateObj;
    super.restoreState(context, state[0]);
    setVarName((String) state[1]);
    setVarValue((String) state[2]);
  }
}