Package org.olat.core.gui.components.form.flexible.impl.elements.table

Source Code of org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableRenderer

/**
* OLAT - Online Learning and Training<br>
* http://www.olat.org
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS,
* <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Copyright (c) 1999-2006 at Multimedia- & E-Learning Services (MELS),<br>
* University of Zurich, Switzerland.
* <p>
*/
package org.olat.core.gui.components.form.flexible.impl.elements.table;


import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.ComponentRenderer;
import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.impl.FormJSHelper;
import org.olat.core.gui.render.RenderResult;
import org.olat.core.gui.render.Renderer;
import org.olat.core.gui.render.RenderingState;
import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator;

/**
* Render hole flexi table.
* @author Christian Guretzki
*/
class FlexiTableRenderer implements ComponentRenderer {

  /**
   * @see org.olat.core.gui.components.ComponentRenderer#render(org.olat.core.gui.render.Renderer,
   *      org.olat.core.gui.render.StringOutput,
   *      org.olat.core.gui.components.Component,
   *      org.olat.core.gui.render.URLBuilder,
   *      org.olat.core.gui.translator.Translator,
   *      org.olat.core.gui.render.RenderResult, java.lang.String[])
   */
  @SuppressWarnings("unused")
  public void render(Renderer renderer, StringOutput target, Component source,
      URLBuilder ubu, Translator translator, RenderResult renderResult,
      String[] args) {
    //
    FlexiTableComponent ftC = (FlexiTableComponent) source;
    FlexiTableElementImpl ftE = ftC.getFlexiTableElement();

    String id = ftC.getFormDispatchId();
    //
    if (!source.isEnabled()) {
      // read only view
      // ...
    } else {
      // read write view
      // ...
    }
    target.append("<div class=\"b_table_wrapper b_floatscrollbox\">");// TODO:cg: ev add $!tableConfig.getCustomCssClass()
   
    // starting real table table
    target.append("<table id=\"").append(id).append("\">");

    int rows = ftE.getTableDataModel().getRowCount();
    int cols = ftE.getTableDataModel().getTableColumnModel().getColumnCount();

    // 1. build header links
    target.append("<thead><tr>");

    for (int i = 0; i < cols; i++) {
        FlexiColumnModel fcm = ftE.getTableDataModel().getTableColumnModel().getColumnModel(i);
        String header = translator.translate(fcm.getHeaderKey());

        target.append("<th class=\"");
        // add css class for first and last column to support older browsers
        if (i == 0) target.append(" b_first_child");
        if (i == cols-1) target.append(" b_last_child");
        target.append("\">");
        target.append(header);
        target.append("</th>");
    }
    target.append("</tr></thead>");

    // build rows
    target.append("<tbody>");
    // the really selected rowid (from the tabledatamodel)
   
    for (int i = 0; i < rows; i++) {
      // use alternating css class
      String cssClass;
      if (i % 2 == 0) cssClass = "";
      else cssClass = "b_table_odd";
      // add css class for first and last column to support older browsers
      if (i == 0) cssClass += " b_first_child";
      if (i == rows-1) cssClass += " b_last_child";

      target.append("<tr class=\"").append(cssClass).append("\">");
      for (int j = 0; j < cols; j++) {
        FlexiColumnModel fcm = ftE.getTableDataModel().getTableColumnModel().getColumnModel(j);
        int alignment = fcm.getAlignment();
        cssClass = (alignment == FlexiColumnModel.ALIGNMENT_LEFT ? "b_align_normal" : (alignment == FlexiColumnModel.ALIGNMENT_RIGHT ? "b_align_inverse" : "b_align_center"));
        // add css class for first and last column to support older browsers
        if (j == 0) cssClass += " b_first_child";
        if (j == cols-1) cssClass += " b_last_child";       
        target.append("<td class=\"").append(cssClass).append("\">");
        if (j == 0) target.append("<a name=\"table\"></a>"); //add once for accessabillitykey
       
        Object cellValue = ftE.getTableDataModel().getValueAt(i, j);
        if (cellValue instanceof FormItem) {
          FormItem formItem = (FormItem)cellValue;
          formItem.setTranslator(translator);
          formItem.setRootForm(ftE.getRootForm());
          formItem.getComponent().getHTMLRendererSingleton().render(renderer, target, formItem.getComponent(), ubu, translator, renderResult, args);
        } else {
          ftE.getTableDataModel().getTableColumnModel().getColumnModel(j).
            getCellRenderer().render(target, cellValue, translator);
        }
        target.append("</td>");
      }
      target.append("</tr>");
     
    }       
    // end of table table
    target.append("</tbody></table>");
    target.append("</div>");
   
    if (source.isEnabled()) {
      // add set dirty form only if enabled
      target.append(FormJSHelper.getJSStartWithVarDeclaration(id));
      /* deactivated due OLAT-3094 and OLAT-3040
      if (ftE.hasFocus()) {
        target.append(FormJSHelper.getFocusFor(id));
      }
      */
      target.append(FormJSHelper.getSetFlexiFormDirty(ftE.getRootForm(), id));
      target.append(FormJSHelper.getJSEnd());
    }

  }

  /**
   * @see org.olat.core.gui.components.ComponentRenderer#renderBodyOnLoadJSFunctionCall(org.olat.core.gui.render.Renderer,
   *      org.olat.core.gui.render.StringOutput,
   *      org.olat.core.gui.components.Component,
   *      org.olat.core.gui.render.RenderingState)
   */
  @SuppressWarnings("unused")
  public void renderBodyOnLoadJSFunctionCall(Renderer renderer,
      StringOutput sb, Component source, RenderingState rstate) {
    // TODO Auto-generated method stub

  }

  /**
   * @see org.olat.core.gui.components.ComponentRenderer#renderHeaderIncludes(org.olat.core.gui.render.Renderer,
   *      org.olat.core.gui.render.StringOutput,
   *      org.olat.core.gui.components.Component,
   *      org.olat.core.gui.render.URLBuilder,
   *      org.olat.core.gui.translator.Translator,
   *      org.olat.core.gui.render.RenderingState)
   */
  @SuppressWarnings("unused")
  public void renderHeaderIncludes(Renderer renderer, StringOutput sb,
      Component source, URLBuilder ubu, Translator translator,
      RenderingState rstate) {
    // TODO Auto-generated method stub

  }

 

}
TOP

Related Classes of org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableRenderer

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.