Package er.ajax.mootools

Source Code of er.ajax.mootools.MTAjaxTabbedPanelTab

package er.ajax.mootools;

import com.webobjects.appserver.WOActionResults;
import com.webobjects.appserver.WOAssociation;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WOElement;
import com.webobjects.appserver.WORequest;
import com.webobjects.appserver.WOResponse;
import com.webobjects.foundation.NSDictionary;

import er.ajax.AjaxDynamicElement;
import er.ajax.AjaxUtils;

public class MTAjaxTabbedPanelTab extends AjaxDynamicElement {

  private WOElement content;
  private WOAssociation name;
  private WOAssociation id;
  private WOAssociation isSelected;
  private WOAssociation refreshOnSelect;
  private WOAssociation onLoad;
  private WOAssociation isVisible;
  private WOAssociation accesskey;

  public MTAjaxTabbedPanelTab(String aName, NSDictionary<String, WOAssociation> associations, WOElement template) {
    super(aName, associations, template);

    content = template;
    name = associations.objectForKey("name");
    id = associations.objectForKey("id");
    isSelected = associations.objectForKey("isSelected");
    refreshOnSelect = associations.objectForKey("refreshOnSelect");
    onLoad = associations.objectForKey("onLoad");
    isVisible = associations.objectForKey("isVisible");
    accesskey = associations.objectForKey("accesskey");

    if (name == null) {
      throw new RuntimeException("name binding is required");
    }

  }

    /**
     * Creates the panes.
     */
    @Override
    public void appendToResponse(WOResponse response, WOContext aContext)
    {
      WOComponent component = aContext.component();
     
      if (isVisble(component)) {
            response.appendContentString("<li id=\"");
            response.appendContentString((String)id().valueInComponent(component) + "_panel");
            response.appendContentString("\" data-updateUrl=\"");
            response.appendContentString(AjaxUtils.ajaxComponentActionUrl(aContext));
        response.appendContentString("\"");
        if(isSelected(component)) {
          appendTagAttributeToResponse(response, "class", "active");
        }
            if (onLoad != null) {
                appendTagAttributeToResponse(response, "onLoad", onLoad.valueInComponent(component));
            }
            response.appendContentString(">");

            // The selected pane needs to have its content rendered when the page is first rendered.  After that
            // it is controlled by the user clicking tabs
            if (isSelected(component) && content != null) {
              content.appendToResponse(response, aContext);
            }

            response.appendContentString("</li>\n");

      }
   
    }
 
 
  /**
   * Do nothing if not visible.
   */
  @Override
  public void takeValuesFromRequest(WORequest request, WOContext context)
  {
    if (isVisble(context.component()) && (isSelected ==  null || isSelected(context.component())) ) {
      super.takeChildrenValuesFromRequest(request, context);
    }
  }

  /**
   * Do nothing if not visible.
   */
  @Override
  public WOActionResults invokeAction(WORequest request, WOContext context)
  {
    if (isVisble(context.component())) {
      return super.invokeAction(request, context);
    }
    return null;
  }

  /**
   *
   * @param component the component this is being rendered in
   * @return <code>true</code> if this pane is the selected one
   */
  public boolean isSelected(WOComponent component) {
    return (isSelected != null) ? isSelected.booleanValueInComponent(component) : false;
  }

  /**
   * If present and settable, sets the isSelected association to true for this tab when it selected and
   * to false when it is no longer the selected tab.
   *
   * @param component the component this is being rendered in
   * @param isTabSelected true is this is being rendered as the selected tab
   */
  public void setIsSelected(WOComponent component, boolean isTabSelected) {
    if (isSelected != null && isSelected.isValueSettableInComponent(component)) {
      isSelected.setValue(Boolean.valueOf(isTabSelected), component);
    }
  }

  @Override
  protected void addRequiredWebResources(WOResponse response, WOContext context) {
  }

  /**
   * The pane content is rendered when an Ajax request is received.
   * @return the children rendered as HTML
   */
  @Override
  public WOActionResults handleRequest(WORequest request, WOContext context) {
    WOResponse response = null;
    String didSelect = request.stringFormValueForKey("didSelect");

    // This is not set when the tab is initially loaded, that is our cue to generate our content
    if ( didSelect == null) {
      response = AjaxUtils.createResponse(request, context);
      AjaxUtils.setPageReplacementCacheKey(context, _containerID(context));

      if (content != null) {
        content.appendToResponse(response, context);
      }
    }
    else setIsSelected(context.component(), didSelect.equals("true"));

    return response;
  }

  /**
   * @param context WOContext response is being returned in
   * @return ID to cache this Ajax response under
   */
  @Override
  protected String _containerID(WOContext context) {
    return (String)id().valueInComponent(context.component()) + "_panel";
  }


  /**
   * @return association for HTML id attribute
   */
  public WOAssociation id() {
    return id;
  }

  /**
   * Sets the id association so that the AjaxTabbedPanel can provide an id if needed.
   *
   * @param newID the association to use to get the HTML id attribute
   */
  public void setId(WOAssociation newID) {
    id = newID;
  }

  /**
   * @return association for HTML id attribute.
   */
  public WOAssociation name() {
    return name;
  }

  /**
   * Returns current component's value for the refreshOnSelect binding.
   *
   * @param component the component this is being rendered in
   * @return Boolean value for refreshOnSelect binding, Boolean.FALSE if unset
   */
  public Boolean refreshesOnSelect(WOComponent component) {
    return (refreshOnSelect != null) ? (Boolean)refreshOnSelect.valueInComponent(component): Boolean.FALSE;
  }

  /**
   * Returns current component's value for the isVisible binding.
   *
   * @param component the component this is being rendered in
   * @return Boolean value for isVisible binding, Boolean.TRUE if unset
   */
  public boolean isVisble(WOComponent component) {
    return (isVisible != null) ? ((Boolean)isVisible.valueInComponent(component)).booleanValue() : true;
  }

  /**
   * @return WOAssociation for the accesskey binding
   */
  public WOAssociation accesskey() {
    return accesskey;
  }
}
TOP

Related Classes of er.ajax.mootools.MTAjaxTabbedPanelTab

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.