Package org.ajax4jsf.component

Source Code of org.ajax4jsf.component.UIInclude$EventWrapper

/**
* License Agreement.
*
* Rich Faces - Natural Ajax for Java Server Faces (JSF)
*
* Copyright (C) 2007 Exadel, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
*/

package org.ajax4jsf.component;

import javax.el.ELContext;
import javax.el.ELException;
import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.component.UIComponentBase;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.FacesEvent;
import javax.faces.event.FacesListener;
import javax.faces.event.PhaseId;

import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.context.ViewIdHolder;

/**
* @author shura
*
*/
public abstract class UIInclude extends UIComponentBase implements
    ViewIdHolder, NamingContainer, AjaxOutput {

  public static final String COMPONENT_TYPE = "org.ajax4jsf.Include";

  public static final String LAYOUT_NONE ="none";
 
  public static final String LAYOUT_BLOCK ="block";
  public static final String LAYOUT_INLINE ="inline";
 
  private boolean _ajaxRendered = true;
  private boolean _ajaxRenderedSet = false;
 
  private boolean wasNavigation = false;
 

  /*
   * (non-Javadoc)
   *
   * @see org.ajax4jsf.framework.ajax.ViewIdHolder#skipNavigation(java.lang.String)
   */
  public boolean skipNavigation(String ViewId) {
//    wasNavigation = true;
    return true;
  }

  private String _viewId = null;

  /*
   * viewId for included page. Setter for viewId @param viewId - new value
   */
  public void setViewId(String __viewId) {
    ValueExpression vb = getValueExpression("viewId");
    ELContext elContext = getELContext();
    if (null != vb && (!vb.isReadOnly(elContext))) {
      // Change value of viewId in backed bean, if possible.
      vb.setValue(elContext, __viewId);
    } else {
      this._viewId = __viewId;
    }
  }

  /*
   * viewId for included page. Getter for viewId @return viewId value from
   * local variable or value bindings
   */
  public String getViewId() {
    if (null != this._viewId) {
      return this._viewId;
    }
    ValueExpression vb = getValueExpression("viewId");
    if (null != vb) {
      return (String) vb.getValue(getELContext());
    } else {
      return null;
    }
  }
 
  private String _layout = null;

  /**
   * @return the layout
   */
  public String getLayout() {
    if (null != this._layout) {
      return this._layout;
    }
    ValueExpression vb = getValueExpression("layout");
    if (null != vb) {
      return (String) vb.getValue(getELContext());
    } else {
      return null;
    }
  }

  /**
   * @param layout the layout to set
   */
  public void setLayout(String layout) {
    _layout = layout;
  }

 
  public boolean isAjaxRendered() {
      Boolean value = null;
      if(!this._ajaxRenderedSet) {
    ValueExpression ve = getValueExpression("ajaxRendered");
    if (ve != null) {
        try {
      value = (Boolean) ve.getValue(getFacesContext().getELContext());
        } catch (ELException e) {
      throw new FacesException(e);
        }
    }
      }
     
      if (null == value) {
    value = this._ajaxRendered;
      }

      return (!LAYOUT_NONE.equals(getLayout())) && value;
  }
 
  public void setAjaxRendered(boolean ajaxRendered) {
      this._ajaxRendered = ajaxRendered;
      this._ajaxRenderedSet = true;
  }

 
  /*
   * (non-Javadoc)
   *
   * @see javax.faces.component.UIComponentBase#broadcast(javax.faces.event.FacesEvent)
   */
  public void broadcast(FacesEvent event) throws AbortProcessingException {
    if (event instanceof EventWrapper) {
      FacesEvent wrapped = ((EventWrapper) event).getWrapped();
      FacesContext context = getFacesContext();
      ViewIdHolder holder = setupNavigation(context);
      wrapped.getComponent().broadcast(wrapped);
      restoreNavigation(context, holder);
    } else {
      super.broadcast(event);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.component.UIComponentBase#processDecodes(javax.faces.context.FacesContext)
   */
  public void processDecodes(FacesContext context) {
    wasNavigation = false;
    ViewIdHolder holder = setupNavigation(context);
    super.processDecodes(context);
    restoreNavigation(context, holder);
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.component.UIComponentBase#processUpdates(javax.faces.context.FacesContext)
   */
  public void processUpdates(FacesContext context) {
    ViewIdHolder holder = setupNavigation(context);
    super.processUpdates(context);
    restoreNavigation(context, holder);
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.component.UIComponentBase#processValidators(javax.faces.context.FacesContext)
   */
  public void processValidators(FacesContext context) {
    ViewIdHolder holder = setupNavigation(context);
    super.processValidators(context);
    restoreNavigation(context, holder);
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.component.UIComponentBase#queueEvent(javax.faces.event.FacesEvent)
   */
  public void queueEvent(FacesEvent event) {
    EventWrapper wrapper = new EventWrapper(this, event);
    super.queueEvent(wrapper);
  }

 
  /* (non-Javadoc)
   * @see javax.faces.component.UIComponentBase#restoreState(javax.faces.context.FacesContext, java.lang.Object)
   */
  public void restoreState(FacesContext context, Object state) {
    Object[] componentState = (Object[]) state;
    super.restoreState(context, componentState[0]);
    this._viewId = (String) componentState[1];
    this._layout = (String) componentState[2];
    this._ajaxRendered = ((Boolean) componentState[3]).booleanValue();
    this._ajaxRenderedSet = ((Boolean) componentState[4]).booleanValue();
 

  /* (non-Javadoc)
   * @see javax.faces.component.UIComponentBase#saveState(javax.faces.context.FacesContext)
   */
  public Object saveState(FacesContext context) {
    Object[] componentState = new Object[5];
    componentState[0] = super.saveState(context);
    componentState[1] = _viewId;
    componentState[2] = _layout;
    componentState[3] = Boolean.valueOf(_ajaxRendered);
    componentState[4] = Boolean.valueOf(_ajaxRenderedSet);
    return componentState;
  }

  /* (non-Javadoc)
   * @see javax.faces.component.UIComponent#getFamily()
   */
  public String getFamily() {
    // TODO Auto-generated method stub
    return null;
  }

  private ViewIdHolder setupNavigation(FacesContext context) {
    AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
    ViewIdHolder viewIdHolder = ajaxContext.getViewIdHolder();
    ajaxContext.setViewIdHolder(this);
    return viewIdHolder;
  }

  private void restoreNavigation(FacesContext context, ViewIdHolder viewIdHolder) {
    AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
    ajaxContext.setViewIdHolder(viewIdHolder);
//    if (wasNavigation) {
//      // Clear children to avoid have different components with same id
//      getChildren().clear();
//    }
  }

  private ELContext getELContext() {
    return getFacesContext().getELContext();
  }
 
  @SuppressWarnings("serial")
  private static class EventWrapper extends FacesEvent {

    private FacesEvent wrapped;

    public EventWrapper(UIComponent component, FacesEvent wrapped) {
      super(component);
      this.wrapped = wrapped;
    }

    /**
     * @return
     * @see javax.faces.event.FacesEvent#getPhaseId()
     */
    public PhaseId getPhaseId() {
      return wrapped.getPhaseId();
    }

    /**
     * @param listener
     * @return
     * @see javax.faces.event.FacesEvent#isAppropriateListener(javax.faces.event.FacesListener)
     */
    public boolean isAppropriateListener(FacesListener listener) {
      return wrapped.isAppropriateListener(listener);
    }

    /**
     * @param listener
     * @see javax.faces.event.FacesEvent#processListener(javax.faces.event.FacesListener)
     */
    public void processListener(FacesListener listener) {
      wrapped.processListener(listener);
    }

    /**
     *
     * @see javax.faces.event.FacesEvent#queue()
     */
    public void queue() {
      wrapped.queue();
    }

    /**
     * @param phaseId
     * @see javax.faces.event.FacesEvent#setPhaseId(javax.faces.event.PhaseId)
     */
    public void setPhaseId(PhaseId phaseId) {
      wrapped.setPhaseId(phaseId);
    }

    /**
     * @return the wrapped
     */
    public FacesEvent getWrapped() {
      return wrapped;
    }
  }

  /**
   * @return the wasNavigation
   */
  public boolean isWasNavigation() {
    return wasNavigation;
  }


}
TOP

Related Classes of org.ajax4jsf.component.UIInclude$EventWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.