/*
* Copyright 2004 original author or authors.
*
* 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.extremecomponents.table.cell;
import org.apache.commons.lang.StringUtils;
import org.extremecomponents.table.bean.Column;
import org.extremecomponents.table.core.MessagesConstants;
import org.extremecomponents.table.core.PreferencesConstants;
import org.extremecomponents.table.core.TableConstants;
import org.extremecomponents.table.core.TableModel;
import org.extremecomponents.table.core.TableModelUtils;
import org.extremecomponents.table.view.html.BuilderConstants;
import org.extremecomponents.table.view.html.BuilderUtils;
import org.extremecomponents.table.view.html.TableActions;
import org.extremecomponents.util.HtmlBuilder;
/**
* A header cell.
*
* @author Jeff Johnston
*/
public class HeaderCell implements Cell {
public String getExportDisplay(TableModel model, Column column) {
return column.getTitle();
}
public String getHtmlDisplay(TableModel model, Column column) {
HtmlBuilder html = new HtmlBuilder();
String headerClass = null;
String sortImage = null;
String sortOrder = null;
headerClass = column.getHeaderClass();
if (TableModelUtils.isSorted(model, column.getAlias())) {
sortOrder = model.getLimit().getSort().getSortOrder();
if (sortOrder.equals(TableConstants.SORT_DEFAULT)) {
sortOrder = TableConstants.SORT_ASC;
} else if (sortOrder.equals(TableConstants.SORT_ASC)) {
headerClass = model.getPreferences().getPreference(PreferencesConstants.TABLE_HEADER_SORT_CLASS);
sortImage = BuilderUtils.getImage(model, BuilderConstants.SORT_ASC_IMAGE);
sortOrder = TableConstants.SORT_DESC;
} else if (sortOrder.equals(TableConstants.SORT_DESC)) {
headerClass = model.getPreferences().getPreference(PreferencesConstants.TABLE_HEADER_SORT_CLASS);
sortImage = BuilderUtils.getImage(model, BuilderConstants.SORT_DESC_IMAGE);
sortOrder = TableConstants.SORT_DEFAULT;
}
} else {
sortOrder = TableConstants.SORT_ASC; // the default
}
buildHeaderHtml(html, model, column, headerClass, sortImage, sortOrder);
return html.toString();
}
protected void buildHeaderHtml(HtmlBuilder html, TableModel model, Column column, String headerClass, String sortImage, String sortOrder) {
html.td(2);
if (column.getColspan() > 1) {
html.styleClass(BuilderConstants.TABLE_HEADER_ROW_CSS);
} else if (StringUtils.isNotEmpty(headerClass)) {
html.styleClass(headerClass);
}
if (StringUtils.isNotEmpty(column.getHeaderStyle())) {
html.style(column.getHeaderStyle());
}
if (StringUtils.isNotEmpty(column.getWidth())) {
html.width(column.getWidth());
}
if (column.getColspan() > 1) {
html.colSpan(String.valueOf(column.getColspan()));
}
if (column.getRowspan() > 1) {
html.rowSpan(String.valueOf(column.getRowspan()));
}
if (column.isSortable()) {
if (sortOrder.equals(TableConstants.SORT_ASC)) {
html.onmouseover("this.className='" + BuilderConstants.TABLE_HEADER_SORT_CSS + "';this.style.cursor='pointer'");
if (StringUtils.isNotEmpty(headerClass)) {
html.onmouseout("this.className='" + headerClass + "';this.style.cursor='default'");
} else {
html.onmouseout("this.className='" + BuilderConstants.TABLE_HEADER_CSS + "';this.style.cursor='default'");
}
}
if (sortOrder.equals(TableConstants.SORT_DEFAULT) || sortOrder.equals(TableConstants.SORT_DESC)) {
html.onmouseover("this.style.cursor='pointer'");
html.onmouseout("this.style.cursor='default'");
}
html.onclick(new TableActions(model).getSortAction(column, sortOrder));
boolean showTooltips = model.getTableHandler().getTable().isShowTooltips();
if (showTooltips) {
String headercellTooltip = model.getMessages().getMessage(MessagesConstants.COLUMN_HEADERCELL_TOOLTIP_SORT);
html.title(headercellTooltip + " " + column.getTitle());
}
}
html.close();
html.append(column.getTitle());
if (column.isSortable()) {
if (StringUtils.isNotEmpty(sortImage)) {
html.nbsp();
html.img();
html.src(sortImage);
html.style("border:0");
html.alt("Arrow");
html.xclose();
}
}
html.tdEnd();
}
}