Package org.ajax4jsf.renderkit.html

Source Code of org.ajax4jsf.renderkit.html.QueueRenderer

/**
* 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.renderkit.html;

import java.io.IOException;
import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.ajax4jsf.component.QueueRegistry;
import org.ajax4jsf.component.UIQueue;
import org.ajax4jsf.javascript.AjaxScript;
import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.renderkit.AjaxRendererUtils;
import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
import org.ajax4jsf.renderkit.RendererUtils;
import org.ajax4jsf.renderkit.html.scripts.QueueScript;
import org.ajax4jsf.resource.InternetResource;
import org.richfaces.component.util.MessageUtil;

/**
* @author Nick Belaevski
* @since 3.3.0
*/
public class QueueRenderer extends HeaderResourcesRendererBase {

  private static final String SIZE_EXCEEDED_BEHAVIOR = "sizeExceededBehavior";

  private static final String SIZE = "size";

  private static final String QUEUE_ONSUBMIT_ATTRIBUTE = "queueonsubmit";

  private static final String QUEUE_ONBEFOREDOMUPDATE_ATTRIBUTE = "queueonbeforedomupdate";

  private static final String QUEUE_ONCOMPLETE_ATTRIBUTE = "queueoncomplete";

  private static final String QUEUE_ONERROR_ATTRIBUTE = "queueonerror";

  public static final String BEHAVIOR_DROP_NEXT = "dropNext";

  public static final String BEHAVIOR_DROP_NEW = "dropNew";
 
  public static final String BEHAVIOR_FIRE_NEXT = "fireNext";
 
  public static final String BEHAVIOR_FIRE_NEW = "fireNew";

  private static final String[] REQUEST_ATTRIBUTES = new String[] {
    "ignoreDupResponses",
    "requestDelay",
    "timeout"
  };
 
  private InternetResource[] scripts = new InternetResource[] {
    getResource(AjaxScript.class.getName()),
    getResource(QueueScript.class.getName())
  };
 
  @Override
  protected InternetResource[] getScripts() {
    return scripts;
  }
 
  @Override
  protected Class<? extends UIComponent> getComponentClass() {
    return UIQueue.class;
  }

  private static final RendererUtils utils = RendererUtils.getInstance();
 
  private boolean isValidBehaviorValue(String value) {
    return BEHAVIOR_DROP_NEW.equals(value) || BEHAVIOR_DROP_NEXT.equals(value) ||
      BEHAVIOR_FIRE_NEW.equals(value) || BEHAVIOR_FIRE_NEXT.equals(value);
   }
 
  private QueueRendererData createRendererData(FacesContext context, UIQueue queue) {
    Map<String, Object> attributes = queue.getAttributes();
   
    QueueRendererData data = new QueueRendererData();
   
    int size = queue.getSize();
    if (utils.shouldRenderAttribute(size)) {
      data.addQueueAttribute(SIZE, size);
    }
   
    String sizeExceededBehavior = (String) attributes.get(SIZE_EXCEEDED_BEHAVIOR);
    if (utils.shouldRenderAttribute(sizeExceededBehavior)) {
      if (!isValidBehaviorValue(sizeExceededBehavior)) {
        throw new IllegalArgumentException(sizeExceededBehavior + " value of " +
          SIZE_EXCEEDED_BEHAVIOR + " attribute is not a legal one for component: " +
          MessageUtil.getLabel(context, queue));
      }
     
      data.addQueueAttribute(SIZE_EXCEEDED_BEHAVIOR, sizeExceededBehavior);
    }
   
    String onsizeexceeded = queue.getOnsizeexceeded();
    if (utils.shouldRenderAttribute(onsizeexceeded)) {
      data.addQueueAttribute("onsizeexceeded", new JSFunctionDefinition("query", "options", "event").addToBody(onsizeexceeded));
    }

    String onrequestqueue = queue.getOnrequestqueue();
    if (utils.shouldRenderAttribute(onrequestqueue)) {
      data.addQueueAttribute("onrequestqueue", new JSFunctionDefinition("query", "options", "event").addToBody(onrequestqueue));
    }

    String onrequestdequeue = queue.getOnrequestdequeue();
    if (utils.shouldRenderAttribute(onrequestdequeue)) {
      data.addQueueAttribute("onrequestdequeue", new JSFunctionDefinition("query", "options", "event").addToBody(onrequestdequeue));
    }
   
    for (String attributeName : REQUEST_ATTRIBUTES) {
      Object value = attributes.get(attributeName);
      if (utils.shouldRenderAttribute(value)) {
        data.addRequestAttribute(attributeName, value);
      }
    }
   
    String status = AjaxRendererUtils.getAjaxStatus(queue);
    if (utils.shouldRenderAttribute(status)) {
      data.addRequestAttribute(AjaxRendererUtils.STATUS_ATTR_NAME, status);
    }
   
    String onBeforeDomUpdate = queue.getOnbeforedomupdate();
    if (utils.shouldRenderAttribute(onBeforeDomUpdate)) {
      data.addRequestAttribute(QUEUE_ONBEFOREDOMUPDATE_ATTRIBUTE, AjaxRendererUtils.buildAjaxOnBeforeDomUpdate(onBeforeDomUpdate));
    }

    String oncomplete = queue.getOncomplete();
    if (utils.shouldRenderAttribute(oncomplete)) {
      data.addRequestAttribute(QUEUE_ONCOMPLETE_ATTRIBUTE, AjaxRendererUtils.buildAjaxOncomplete(oncomplete));
    }
   
    String onsubmit = queue.getOnsubmit();
    if (utils.shouldRenderAttribute(onsubmit)) {
      JSFunctionDefinition onsubmitFunction = new JSFunctionDefinition("request");
      onsubmitFunction.addToBody(onsubmit);
     
      data.addRequestAttribute(QUEUE_ONSUBMIT_ATTRIBUTE, onsubmitFunction);
    }

    String onerror = queue.getOnerror();
    if (utils.shouldRenderAttribute(onerror)) {
      JSFunctionDefinition onerrorFunction = new JSFunctionDefinition("request", "status", "message");
      onerrorFunction.addToBody(onerror);
     
      data.addRequestAttribute(QUEUE_ONERROR_ATTRIBUTE, onerrorFunction);
    }

    return data;
  }
 
  @Override
  public void encodeBegin(FacesContext context, UIComponent component)
      throws IOException {
    super.encodeBegin(context, component);
  }
 
  @Override
  public void encodeEnd(FacesContext context, UIComponent component)
      throws IOException {
    super.encodeEnd(context, component);
   
    UIQueue queue = (UIQueue) component;
    if (!queue.isDisabled()) {
      QueueRegistry.getInstance(context).registerQueue(context,
        queue.getClientName(context),
        createRendererData(context, queue));
    }
  }
}
TOP

Related Classes of org.ajax4jsf.renderkit.html.QueueRenderer

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.