Package org.primefaces.component.datalist

Source Code of org.primefaces.component.datalist.DataListRenderer

/*
* Copyright 2010 Prime Technology.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.primefaces.component.datalist;

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

import javax.faces.FacesException;
import javax.faces.application.StateManager;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.servlet.ServletResponse;

import org.primefaces.renderkit.CoreRenderer;
import org.primefaces.renderkit.PartialRenderer;
import org.primefaces.util.ComponentUtils;

public class DataListRenderer extends CoreRenderer implements PartialRenderer {
 
  public void decode(FacesContext facesContext, UIComponent component) {
    Map<String, String> params = facesContext.getExternalContext().getRequestParameterMap();
    DataList list = (DataList) component;
    String clientId = list.getClientId();
    boolean isAjaxPaging = params.containsKey(clientId + "_ajaxPaging");
   
    if(isAjaxPaging) {
      list.setFirst(Integer.valueOf(params.get(clientId + "_first")));
      list.setRows(Integer.valueOf(params.get(clientId + "_rows")));
      list.setPage(Integer.valueOf(params.get(clientId + "_page")));
    }
  }

  public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException{
    DataList list = (DataList) component;
   
    encodeMarkup(facesContext, list);
    encodeScript(facesContext, list);
  }

  protected void encodeMarkup(FacesContext facesContext, DataList list) throws IOException {
    ResponseWriter writer = facesContext.getResponseWriter();
    String clientId = list.getClientId();
    boolean hasPaginator = list.isPaginator();
    String paginatorPosition = list.getPaginatorPosition();
    String styleClass = list.getStyleClass() == null ? DataList.CONTAINER_CLASS : DataList.CONTAINER_CLASS + " " + list.getStyleClass();
   
    writer.startElement("div", list);
    writer.writeAttribute("id", clientId, "id");
    writer.writeAttribute("class", styleClass, "styleClass");
   
    if(hasPaginator && !paginatorPosition.equalsIgnoreCase("bottom")) {
      encodePaginatorContainer(facesContext, clientId + "_paginatorTop");
    }

    encodeList(facesContext, list, false);
   
    if(hasPaginator && !paginatorPosition.equalsIgnoreCase("top")) {
      encodePaginatorContainer(facesContext, clientId + "_paginatorBottom");
    }
   
    writer.endElement("div");
  }
 
  protected void encodeScript(FacesContext facesContext, DataList list) throws IOException {
    ResponseWriter writer = facesContext.getResponseWriter();
    String clientId = list.getClientId();
    String widgetVar = createUniqueWidgetVar(facesContext, list);
   
    writer.startElement("script", null);
    writer.writeAttribute("type", "text/javascript", null);

    writer.write(widgetVar + " = new PrimeFaces.widget.DataList('" + clientId + "',{");
    if(list.isPaginator()) {
      UIComponent form = ComponentUtils.findParentForm(facesContext, list);
      if(form == null) {
        throw new FacesException("DataList : \"" + clientId + "\" must be inside a form element");
      }
      writer.write("url:'" + getActionURL(facesContext) + "'");
      writer.write(",formId:'" + form.getClientId() + "'");
     
      if(list.isEffect()) {
        writer.write(",effect:true");
        writer.write(",effectSpeed:'" + list.getEffectSpeed() + "'");
      }
     
      writer.write(",paginator:new YAHOO.widget.Paginator({");
      writer.write("rowsPerPage:" + list.getRows());
      writer.write(",totalRecords:" + list.getRowCount());
      writer.write(",initialPage:" + list.getPage());
     
      if(list.getPageLinks() != 10) writer.write(",pageLinks:" + list.getPageLinks());
      if(list.getPaginatorTemplate() != null) writer.write(",template:'" + list.getPaginatorTemplate() + "'");
      if(list.getRowsPerPageTemplate() != null) writer.write(",rowsPerPageOptions : [" + list.getRowsPerPageTemplate() + "]");
      if(list.getFirstPageLinkLabel() != null) writer.write(",firstPageLinkLabel:'" + list.getFirstPageLinkLabel() + "'");
      if(list.getPreviousPageLinkLabel() != null) writer.write(",previousPageLinkLabel:'" + list.getPreviousPageLinkLabel() + "'");
      if(list.getNextPageLinkLabel() != null) writer.write(",nextPageLinkLabel:'" + list.getNextPageLinkLabel() + "'");
      if(list.getLastPageLinkLabel() != null) writer.write(",lastPageLinkLabel:'" + list.getLastPageLinkLabel() + "'");
      if(list.getCurrentPageReportTemplate() != null) writer.write(",pageReportTemplate:'" + list.getCurrentPageReportTemplate() + "'");
      if(!list.isPaginatorAlwaysVisible()) writer.write(",alwaysVisible:false");
     
      String paginatorPosition = list.getPaginatorPosition();
      String paginatorContainer = null;
      if(paginatorPosition.equals("both"))
        paginatorContainer = clientId + "_paginatorTop','" + clientId + "_paginatorBottom" ;
      else if(paginatorPosition.equals("top"))
        paginatorContainer = clientId + "_paginatorTop";
      else if(paginatorPosition.equals("bottom"))
        paginatorContainer = clientId + "_paginatorBottom";
     
      writer.write(",containers:['" + paginatorContainer + "']");
     
      writer.write("})");
    }
   
    writer.write("});");
   
    writer.endElement("script");
  }
 
  protected void encodeList(FacesContext facesContext, DataList list, boolean hidden) throws IOException {
    ResponseWriter writer = facesContext.getResponseWriter();
    String clientId = list.getClientId();
    boolean isDefinition = list.isDefinition();
    UIComponent definition = list.getFacet("description");
    String listTag = list.getListTag();
    String listItemTag = isDefinition ? "dt" : "li";
   
    int first = list.getFirst();
    int rows = list.getRows() == 0 ? list.getRowCount() : list.getRows();
   
    writer.startElement(listTag, null);
    writer.writeAttribute("id", clientId + "_list", null);
    writer.writeAttribute("class", DataList.LIST_CLASS, null);
    if(list.getItemType() != null) writer.writeAttribute("type", list.getItemType(), null);
    if(hidden) writer.writeAttribute("style", "display:none", null);
     
    for(int i=first; i < (first + rows); i++) {
      list.setRowIndex(i);
     
      if(list.isRowAvailable()) {
        writer.startElement(listItemTag, null);
        writer.writeAttribute("class", DataList.LIST_ITEM_CLASS, null);
        renderChildren(facesContext, list);     
        writer.endElement(listItemTag);
       
        if(isDefinition) {
          writer.startElement("dd", null);
          definition.encodeAll(facesContext);
          writer.endElement("dd");
        }
      }
    }
   
    list.setRowIndex(-1)//cleanup
   
    writer.endElement(listTag);
  }
 
  protected void encodePaginatorContainer(FacesContext facesContext, String id) throws IOException {
    ResponseWriter writer = facesContext.getResponseWriter();
   
    writer.startElement("div", null);
    writer.writeAttribute("id", id, "id");
    writer.writeAttribute("class", "ui-paginator ui-widget-header ui-corner-all", null);
    writer.endElement("div");
  }

  public void encodePartially(FacesContext facesContext, UIComponent component) throws IOException {
    DataList list = (DataList) component;
   
    ServletResponse response = (ServletResponse) facesContext.getExternalContext().getResponse();
    response.setContentType("text/xml");
   
    ResponseWriter writer = facesContext.getResponseWriter();
    try {
      writer.write("<?xml version=\"1.0\" encoding=\"" + response.getCharacterEncoding() + "\"?>");
      writer.write("<partial-response>");
     
      //Tab content
      writer.write("<list>");
      writer.startCDATA();
     
      encodeList(facesContext, list, (list.isPaginator() && list.isEffect()));
     
      writer.endCDATA();
      writer.write("</list>");
 
      //State
      writer.write("<state>");
      writer.startCDATA();
     
      StateManager stateManager = facesContext.getApplication().getStateManager();
      stateManager.writeState(facesContext, stateManager.saveView(facesContext));
     
      writer.endCDATA();
      writer.write("</state>");
     
      writer.write("</partial-response>");
    }catch(IOException exception) {
      exception.printStackTrace();
    }

    facesContext.responseComplete();
  }

  public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
    //Do Nothing
  }
 
  public boolean getRendersChildren() {
    return true;
  }
}
TOP

Related Classes of org.primefaces.component.datalist.DataListRenderer

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.