/**
*
*/
package org.jboss.tools.jsf.vpe.richfaces.template;
import java.util.ArrayList;
import org.jboss.tools.jsf.vpe.richfaces.ComponentUtil;
import org.jboss.tools.jsf.vpe.richfaces.Messages;
import org.jboss.tools.jsf.vpe.richfaces.RichFacesTemplatesActivator;
import org.jboss.tools.vpe.editor.context.VpePageContext;
import org.jboss.tools.vpe.editor.template.VpeAbstractTemplate;
import org.jboss.tools.vpe.editor.template.VpeChildrenInfo;
import org.jboss.tools.vpe.editor.template.VpeCreationData;
import org.jboss.tools.vpe.editor.util.Constants;
import org.jboss.tools.vpe.editor.util.HTML;
import org.jboss.tools.vpe.editor.util.VisualDomUtil;
import org.mozilla.interfaces.nsIDOMDocument;
import org.mozilla.interfaces.nsIDOMElement;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* @author dmaliarevich
*
*/
public class RichFacesOrderingList extends VpeAbstractTemplate {
private static final String COLUMN = ':' + RichFaces.TAG_COLUMN;
private static final String COLUMNS = ':' + RichFaces.TAG_COLUMNS;
private static final String DEFAULT_LIST_HEIGHT = "150px"; //$NON-NLS-1$
private static final String DEFAULT_LIST_WIDTH = "300px"; //$NON-NLS-1$
private static final String DEFAULT_HEIGHT = "200px"; //$NON-NLS-1$
private static final String DEFAULT_WIDTH = "300px"; //$NON-NLS-1$
private static final String TOP_CONTROL_FACET = "topControl"; //$NON-NLS-1$
private static final String UP_CONTROL_FACET = "upControl"; //$NON-NLS-1$
private static final String DOWN_CONTROL_FACET = "downControl"; //$NON-NLS-1$
private static final String BOTTOM_CONTROL_FACET = "bottomControl"; //$NON-NLS-1$
private static final String HEADER = "header"; //$NON-NLS-1$
private static final String HEADER_CLASS = "headerClass"; //$NON-NLS-1$
private static final String ARROW_TOP = "\u21D1"; //$NON-NLS-1$
private static final String ARROW_UP = "\u2191"; //$NON-NLS-1$
private static final String ARROW_DOWN = "\u2193"; //$NON-NLS-1$
private static final String ARROW_BOTTOM = "\u21D3"; //$NON-NLS-1$
private static final String TOP_CONTROL_IMG = "orderingList/top.gif"; //$NON-NLS-1$
private static final String UP_CONTROL_IMG = "orderingList/up.gif"; //$NON-NLS-1$
private static final String DOWN_CONTROL_IMG = "orderingList/down.gif"; //$NON-NLS-1$
private static final String BOTTOM_CONTROL_IMG = "orderingList/bottom.gif"; //$NON-NLS-1$
private static final String BUTTON_BG = "orderingList/button_bg.gif"; //$NON-NLS-1$
private static final String HEADER_CELL_BG = "orderingList/table_header_cell_bg.gif"; //$NON-NLS-1$
private static final String WIDTH = "width"; //$NON-NLS-1$
private static final String HEIGHT = "height"; //$NON-NLS-1$
private static final String LIST_WIDTH = "listWidth"; //$NON-NLS-1$
private static final String LIST_HEIGHT = "listHeight"; //$NON-NLS-1$
private static final String TOP_CONTROL_LABEL = "topControlLabel"; //$NON-NLS-1$
private static final String UP_CONTROL_LABEL = "upControlLabel"; //$NON-NLS-1$
private static final String DOWN_CONTROL_LABEL = "downControlLabel"; //$NON-NLS-1$
private static final String BOTTOM_CONTROL_LABEL = "bottomControlLabel"; //$NON-NLS-1$
private static final String TOP_CONTROL_LABEL_DEFAULT = Messages.RichFacesOrderingList_FirstLabel;
private static final String UP_CONTROL_LABEL_DEFAULT = Messages.RichFacesOrderingList_UpLabel;
private static final String DOWN_CONTROL_LABEL_DEFAULT = Messages.RichFacesOrderingList_DownLabel;
private static final String BOTTOM_CONTROL_LABEL_DEFAULT = Messages.RichFacesOrderingList_LastLabel;
private static final String CAPTION_LABEL = "captionLabel"; //$NON-NLS-1$
private static final String CONTROLS_TYPE = "controlsType"; //$NON-NLS-1$
private static final String CONTROLS_VERTICAL_ALIGN = "controlsVerticalAlign"; //$NON-NLS-1$
private static final String CONTROLS_HORIZONTAL_ALIGN = "controlsHorizontalAlign"; //$NON-NLS-1$
private static final String SHOW_BUTTON_LABELS = "showButtonLabels"; //$NON-NLS-1$
private static final String FAST_ORDER_CONTROL_VISIBLE = "fastOrderControlsVisible"; //$NON-NLS-1$
private static final String ORDER_CONTROL_VISIBLE = "orderControlsVisible"; //$NON-NLS-1$
private static final String LIST_CLASS = "listClass"; //$NON-NLS-1$
private static final String CONTROLS_CLASS = "controlsClass"; //$NON-NLS-1$
private static final String TOP_CONTROL_CLASS = "topControlClass"; //$NON-NLS-1$
private static final String UP_CONTROL_CLASS = "upControlClass"; //$NON-NLS-1$
private static final String DOWN_CONTROL_CLASS = "downControlClass"; //$NON-NLS-1$
private static final String BOTTOM_CONTROL_CLASS = "bottomControlClass"; //$NON-NLS-1$
private static final String CSS_CAPTION_CLASS = "rich-ordering-list-caption"; //$NON-NLS-1$
private static final String CSS_CONTROLS_CLASS = "rich-ordering-controls"; //$NON-NLS-1$
private static final String CSS_TOP_CONTROL_CLASS = "rich-ordering-control-top"; //$NON-NLS-1$
private static final String CSS_BUTTON_LAYOUT_CLASS = "rich-ordering-list-button-layout"; //$NON-NLS-1$
private static final String CSS_UP_CONTROL_CLASS = "rich-ordering-control-up"; //$NON-NLS-1$
private static final String CSS_DOWN_CONTROL_CLASS = "rich-ordering-control-down"; //$NON-NLS-1$
private static final String CSS_BOTTOM_CONTROL_CLASS = "rich-ordering-control-bottom"; //$NON-NLS-1$
private static final String CSS_BUTTON_CLASS = "rich-ordering-list-button"; //$NON-NLS-1$
private static final String CSS_BUTTON_SELECTION_CLASS = "rich-ordering-list-button-selection"; //$NON-NLS-1$
private static final String CSS_BUTTON_CONTENT_CLASS = "rich-ordering-list-button-content"; //$NON-NLS-1$
private static final String CSS_BUTTON_VALIGN_CLASS = "rich-ordering-list-button-valign"; //$NON-NLS-1$
private static final String CSS_HEADER_CLASS = "rich-ordering-list-header"; //$NON-NLS-1$
private static final String CSS_TABLE_HEADER_CLASS = "rich-ordering-list-table-header"; //$NON-NLS-1$
private static final String CSS_TABLE_HEADER_CELL_CLASS = "rich-ordering-list-table-header-cell"; //$NON-NLS-1$
private static final String CSS_LIST_BODY_CLASS = "rich-ordering-list-body"; //$NON-NLS-1$
private static final String CSS_LIST_OUTPUT_CLASS = "rich-ordering-list-output"; //$NON-NLS-1$
private static final String CSS_LIST_CONTENT_CLASS = "rich-ordering-list-content"; //$NON-NLS-1$
private static final String CSS_LIST_ITEMS_CLASS = "rich-ordering-list-items"; //$NON-NLS-1$
private static final String CSS_LIST_ROW_CLASS = "rich-ordering-list-row"; //$NON-NLS-1$
/*
* (non-Javadoc)
*
* @see org.jboss.tools.vpe.editor.template.VpeTemplate#create(org.jboss.tools.vpe.editor.context.VpePageContext,
* org.w3c.dom.Node, org.mozilla.interfaces.nsIDOMDocument)
*/
public VpeCreationData create(VpePageContext pageContext, Node sourceNode,
nsIDOMDocument visualDocument) {
/*
* Setting up ordering list css file
*/
ComponentUtil.setCSSLink(pageContext, "orderingList/orderingList.css", //$NON-NLS-1$
"richFacesOrderingList"); //$NON-NLS-1$
/*
* Getting source node attributes
*/
Element sourceElement = (Element) sourceNode;
String width = sourceElement.hasAttribute(WIDTH) ? sourceElement.getAttribute(WIDTH) : DEFAULT_WIDTH;
String height = sourceElement.hasAttribute(HEIGHT) ? sourceElement.getAttribute(HEIGHT) : DEFAULT_HEIGHT;
// String listWidth = sourceElement.getAttribute(LIST_WIDTH);
// String listHeight = sourceElement.getAttribute(LIST_HEIGHT);
/*
* Crating tags structure
*/
nsIDOMElement tableCommon = visualDocument.createElement(HTML.TAG_TABLE);
nsIDOMElement tableBody = visualDocument.createElement(HTML.TAG_TBODY);
nsIDOMElement tableCaptionRow = visualDocument.createElement(HTML.TAG_TR);
nsIDOMElement tableCaptionCell = visualDocument.createElement(HTML.TAG_TD);
nsIDOMElement tableCaptionDiv = visualDocument.createElement(HTML.TAG_DIV);
nsIDOMElement tableListAndButtonsRow = visualDocument.createElement(HTML.TAG_TR);
nsIDOMElement leftCell = visualDocument.createElement(HTML.TAG_TD);
nsIDOMElement rightCell = visualDocument.createElement(HTML.TAG_TD);
nsIDOMElement tableListCell;
nsIDOMElement tableButtonsCell;
tableCaptionCell.appendChild(tableCaptionDiv);
tableCaptionRow.appendChild(tableCaptionCell);
tableBody.appendChild(tableCaptionRow);
tableListAndButtonsRow.appendChild(leftCell);
tableListAndButtonsRow.appendChild(rightCell);
tableBody.appendChild(tableListAndButtonsRow);
tableCommon.appendChild(tableBody);
/*
* Set correct controls position
*/
String controlsHorizontalAlign = sourceElement.getAttribute(CONTROLS_HORIZONTAL_ALIGN);
if ("left".equalsIgnoreCase(controlsHorizontalAlign)) { //$NON-NLS-1$
tableButtonsCell = leftCell;
tableListCell = rightCell;
tableButtonsCell.setAttribute(HTML.ATTR_STYLE, "width: 1%;"); //$NON-NLS-1$
} else {
tableButtonsCell = rightCell;
tableListCell = leftCell;
}
/*
* Creating template's VpeCreationData.
*/
VpeCreationData creationData = new VpeCreationData(tableCommon);
/*
* Setting required attributes
*/
tableCommon.setAttribute(HTML.ATTR_WIDTH, width);
tableCommon.setAttribute(HTML.ATTR_HEIGHT, height);
tableCommon.setAttribute(HTML.ATTR_CLASS, CSS_LIST_BODY_CLASS);
tableCaptionCell.setAttribute(HTML.ATTR_CLASS, CSS_CAPTION_CLASS);
/*
* Encoding table caption
*/
Element captionFacet = ComponentUtil.getFacet(sourceElement, RichFaces.NAME_FACET_CAPTION);
if (null != captionFacet) {
/*
* Encode caption facet
*/
VpeChildrenInfo captionInfo = new VpeChildrenInfo(tableCaptionDiv);
captionInfo.addSourceChild(captionFacet);
creationData.addChildrenInfo(captionInfo);
} else {
/*
* Get value from caption label
*/
String captionLabel = sourceElement.getAttribute(CAPTION_LABEL);
tableCaptionCell.appendChild(visualDocument.createTextNode(captionLabel));
}
/*
* Encode controls
*/
String controlsType = sourceElement.getAttribute(CONTROLS_TYPE);
if (!"none".equalsIgnoreCase(controlsType)) { //$NON-NLS-1$
nsIDOMElement controlsDiv = createControlsDiv(pageContext, creationData, visualDocument, sourceElement);
tableButtonsCell.setAttribute(HTML.ATTR_CLASS,
CSS_BUTTON_VALIGN_CLASS);
tableButtonsCell.setAttribute(HTML.ATTR_ALIGN, "center"); //$NON-NLS-1$
if (sourceElement.hasAttribute(CONTROLS_VERTICAL_ALIGN)){
String controlsVerticalAlign = sourceElement.getAttribute(CONTROLS_VERTICAL_ALIGN);
String valign = "center".equalsIgnoreCase(controlsVerticalAlign) ? "middle" : controlsVerticalAlign; //$NON-NLS-1$ //$NON-NLS-2$
tableButtonsCell.setAttribute(HTML.ATTR_VALIGN, valign);
}
tableButtonsCell.appendChild(controlsDiv);
}
/*
* Encode ordering list itself
*/
tableListCell.appendChild(createResultList(pageContext, creationData, visualDocument,
sourceElement));
return creationData;
}
/**
* Creates the controls div.
*
* @param creationData the creation data
* @param visualDocument the visual document
* @param sourceElement the source element
*
* @return the element
*/
private nsIDOMElement createControlsDiv(final VpePageContext pageContext, VpeCreationData creationData, nsIDOMDocument visualDocument,
Element sourceElement) {
String topControlClass = sourceElement.getAttribute(TOP_CONTROL_CLASS);
String upControlClass = sourceElement.getAttribute(UP_CONTROL_CLASS);
String downControlClass = sourceElement.getAttribute(DOWN_CONTROL_CLASS);
String bottomControlClass = sourceElement.getAttribute(BOTTOM_CONTROL_CLASS);
String showButtonLabelsStr = sourceElement.getAttribute(SHOW_BUTTON_LABELS);
String fastOrderControlsVisibleStr = sourceElement.getAttribute(FAST_ORDER_CONTROL_VISIBLE);
String orderControlsVisibleStr = sourceElement.getAttribute(ORDER_CONTROL_VISIBLE);
boolean showButtonLabels = ComponentUtil.string2boolean(showButtonLabelsStr);
boolean fastOrderControlsVisible = ComponentUtil.string2boolean(fastOrderControlsVisibleStr);
boolean orderControlsVisible = ComponentUtil.string2boolean(orderControlsVisibleStr);
nsIDOMElement buttonsDiv = visualDocument.createElement(HTML.TAG_DIV);
String controlsClass = CSS_CONTROLS_CLASS + " "; //$NON-NLS-1$
if (sourceElement.hasAttribute(CONTROLS_CLASS)) {
controlsClass += sourceElement.getAttribute(CONTROLS_CLASS) + " "; //$NON-NLS-1$
}
buttonsDiv.setAttribute(HTML.ATTR_CLASS, controlsClass + CSS_BUTTON_LAYOUT_CLASS);
Element top_control_facet = ComponentUtil.getFacet(sourceElement, TOP_CONTROL_FACET);
Element up_control_facet = ComponentUtil.getFacet(sourceElement, UP_CONTROL_FACET);
Element down_control_facet = ComponentUtil.getFacet(sourceElement, DOWN_CONTROL_FACET);
Element bottom_control_facet = ComponentUtil.getFacet(sourceElement, BOTTOM_CONTROL_FACET);
if (fastOrderControlsVisible) {
String topControlLabel = sourceElement.hasAttribute(TOP_CONTROL_LABEL) ? sourceElement.getAttribute(TOP_CONTROL_LABEL) : TOP_CONTROL_LABEL_DEFAULT;
nsIDOMElement btnTopDiv = createSingleButtonDiv(pageContext, creationData, visualDocument,
topControlLabel, ARROW_TOP, showButtonLabels, top_control_facet,
CSS_TOP_CONTROL_CLASS, topControlClass);
buttonsDiv.appendChild(btnTopDiv);
}
if (orderControlsVisible) {
String upControlLabel = sourceElement.hasAttribute(UP_CONTROL_LABEL)? sourceElement.getAttribute(UP_CONTROL_LABEL) : UP_CONTROL_LABEL_DEFAULT;
String downControlLabel = sourceElement.hasAttribute(DOWN_CONTROL_LABEL) ? sourceElement.getAttribute(DOWN_CONTROL_LABEL) : DOWN_CONTROL_LABEL_DEFAULT;
nsIDOMElement btnUpDiv = createSingleButtonDiv(pageContext, creationData, visualDocument,
upControlLabel, ARROW_UP, showButtonLabels, up_control_facet,
CSS_UP_CONTROL_CLASS, upControlClass);
nsIDOMElement btnDownDiv = createSingleButtonDiv(pageContext, creationData, visualDocument,
downControlLabel, ARROW_DOWN, showButtonLabels, down_control_facet,
CSS_DOWN_CONTROL_CLASS, downControlClass);
buttonsDiv.appendChild(btnUpDiv);
buttonsDiv.appendChild(btnDownDiv);
}
if (fastOrderControlsVisible) {
String bottomControlLabel = sourceElement.hasAttribute(BOTTOM_CONTROL_LABEL) ? sourceElement.getAttribute(BOTTOM_CONTROL_LABEL) : BOTTOM_CONTROL_LABEL_DEFAULT;
nsIDOMElement btnBottomDiv = createSingleButtonDiv(pageContext, creationData, visualDocument,
bottomControlLabel, ARROW_BOTTOM, showButtonLabels, bottom_control_facet,
CSS_BOTTOM_CONTROL_CLASS, bottomControlClass);
buttonsDiv.appendChild(btnBottomDiv);
}
return buttonsDiv;
}
/**
* Creates the single button div.
*
* @param creationData the creation data
* @param visualDocument the visual document
* @param btnName the btn name
* @param arrowName the img name
* @param showButtonLabels the show button labels
* @param buttonFacet the button facet
* @param cssStyleName the css style name
* @param customStyleClass the custom style class
*
* @return the element
*/
private nsIDOMElement createSingleButtonDiv(final VpePageContext pageContext, VpeCreationData creationData,
nsIDOMDocument visualDocument, String btnName, String arrowName,
boolean showButtonLabels, Element buttonFacet, String cssStyleName,
String customStyleClass) {
nsIDOMElement div1 = visualDocument.createElement(HTML.TAG_DIV);
nsIDOMElement div2 = visualDocument.createElement(HTML.TAG_DIV);
// nsIDOMElement a = visualDocument.createElement(HTML.TAG_A);
nsIDOMElement div3 = visualDocument.createElement(HTML.TAG_DIV);
// nsIDOMElement arrowImg = visualDocument.createElement(HTML.TAG_IMG);
div1.setAttribute(HTML.ATTR_CLASS,
"dr-buttons-border" + " " + cssStyleName //$NON-NLS-1$ //$NON-NLS-2$
+ (null != customStyleClass ? " " + customStyleClass : "")); //$NON-NLS-1$ //$NON-NLS-2$
div2.setAttribute(HTML.ATTR_CLASS, CSS_BUTTON_CLASS);
String resourceFolder = RichFacesTemplatesActivator.getPluginResourcePath();
String divStyle = "width: 100%;background-image: url(file://" + resourceFolder + BUTTON_BG + ");"; //$NON-NLS-1$ //$NON-NLS-2$
div2.setAttribute(HTML.ATTR_STYLE, divStyle);
div1.appendChild(div2);
if (null != buttonFacet) {
// Creating button with facet content
nsIDOMElement fecetDiv = encodeControlsFacets(pageContext,
buttonFacet, cssStyleName, customStyleClass,
creationData, visualDocument);
div2.appendChild(fecetDiv);
} else {
/*
* Creating button with image and label
*/
// ComponentUtil.setImg(arrowImg, arrowName);
// arrowImg.setAttribute(HTML.ATTR_WIDTH, "15"); //$NON-NLS-1$
// arrowImg.setAttribute(HTML.ATTR_HEIGHT, "15"); //$NON-NLS-1$
// div3.appendChild(arrowImg);
if (showButtonLabels) {
div3.appendChild(visualDocument.createTextNode(arrowName
+ Constants.WHITE_SPACE + btnName));
} else {
div3.appendChild(visualDocument.createTextNode(arrowName));
}
// a.setAttribute(HTML.ATTR_CLASS, CSS_BUTTON_SELECTION_CLASS);
// a.appendChild(div3);
div3.setAttribute(HTML.ATTR_CLASS, CSS_BUTTON_SELECTION_CLASS + " " + CSS_BUTTON_CONTENT_CLASS); //$NON-NLS-1$
div2.appendChild(div3);
}
return div1;
}
/**
* Creates the result list.
*
* @param creationData the creation data
* @param visualDocument the visual document
* @param sourceElement the source element
*
* @return the element
*/
private nsIDOMElement createResultList(final VpePageContext pageContext, VpeCreationData creationData, nsIDOMDocument visualDocument,
Element sourceElement) {
/*
* Create list elements
*/
nsIDOMElement contentDiv = visualDocument.createElement(HTML.TAG_DIV);
nsIDOMElement contentTable = visualDocument.createElement(HTML.TAG_TABLE);
nsIDOMElement thead = visualDocument.createElement(HTML.TAG_THEAD);
/*
* Get list columns
*/
ArrayList<Element> columns = getColumns(sourceElement);
/*
* Encode Header
*/
ArrayList<Element> columnsHeaders = ComponentUtil.getColumnsWithFacet(columns, HEADER);
if (!columnsHeaders.isEmpty()) {
String headerClass = sourceElement.hasAttribute(HEADER_CLASS) ? sourceElement.getAttribute(HEADER_CLASS) : null;
nsIDOMElement tr = visualDocument.createElement(HTML.TAG_TR);
thead.appendChild(tr);
String styleClass = ComponentUtil.encodeStyleClass(null,
CSS_HEADER_CLASS + " " + CSS_TABLE_HEADER_CLASS, Constants.EMPTY, //$NON-NLS-1$
headerClass);
if (styleClass != null) {
tr.setAttribute(HTML.ATTR_CLASS,styleClass);
}
/*
* Encoding columns headers
*/
for (Element column : columnsHeaders) {
String columnHeaderClass = column.hasAttribute(RichFaces.ATTR_HEADER_CLASS) ? column.getAttribute(RichFaces.ATTR_HEADER_CLASS) : null;
nsIDOMElement td = visualDocument.createElement(HTML.TAG_TD);
tr.appendChild(td);
td.setAttribute(HTML.ATTR_BACKGROUND, "file:///" //$NON-NLS-1$
+ ComponentUtil.getAbsoluteResourcePath(HEADER_CELL_BG).replace('\\', '/'));
styleClass = ComponentUtil.encodeStyleClass(null, CSS_TABLE_HEADER_CELL_CLASS,
headerClass, columnHeaderClass);
td.setAttribute(HTML.ATTR_CLASS, styleClass);
if (column.hasAttribute(HTML.ATTR_COLSPAN)) {
String colspan = column.getAttribute(HTML.ATTR_COLSPAN);
td.setAttribute(HTML.ATTR_COLSPAN, colspan);
}
Element facetBody = ComponentUtil.getFacet(column, RichFaces.NAME_FACET_HEADER);
VpeChildrenInfo child = new VpeChildrenInfo(td);
child.addSourceChild(facetBody);
creationData.addChildrenInfo(child);
}
}
/*
* Encode content
*/
/*
* TODO: implement support of rowClasses
* following line commented by yradtsevich
* because the variable rowClasses was not used
*/
// String rowClasses = sourceElement.getAttribute(ROW_CLASSES);
String listWidth = sourceElement.hasAttribute(LIST_WIDTH) ? sourceElement.getAttribute(LIST_WIDTH) : DEFAULT_LIST_WIDTH;
String listHeight = sourceElement.hasAttribute(LIST_HEIGHT) ? sourceElement.getAttribute(LIST_HEIGHT) : DEFAULT_LIST_HEIGHT;
String divStyle = HTML.ATTR_WIDTH + " : " //$NON-NLS-1$
+ listWidth + ";" //$NON-NLS-1$
+ HTML.ATTR_HEIGHT + " : " //$NON-NLS-1$
+ listHeight + ";" //$NON-NLS-1$
+ "overflow: scroll;"; //$NON-NLS-1$
contentDiv.setAttribute(HTML.ATTR_STYLE, divStyle);
contentDiv.setAttribute(HTML.ATTR_CLASS,
CSS_LIST_OUTPUT_CLASS + " " + CSS_LIST_CONTENT_CLASS); //$NON-NLS-1$
String listClass = CSS_LIST_ITEMS_CLASS;
if (sourceElement.hasAttribute(LIST_CLASS)) {
listClass += " " + sourceElement.getAttribute(LIST_CLASS); //$NON-NLS-1$
}
contentTable.setAttribute(HTML.ATTR_CLASS, listClass);
contentTable.setAttribute(HTML.ATTR_CELLSPACING, "1"); //$NON-NLS-1$
VisualDomUtil.copyAttributes(sourceElement, contentTable);
contentTable.removeAttribute(HTML.ATTR_HEIGHT);
contentTable.setAttribute(HTML.ATTR_STYLE, "width: 100%;"); //$NON-NLS-1$
/*
* Encode children
*/
contentTable.appendChild(thead);
RichFacesDataTableChildrenEncoder childrenEncoder = new RichFacesDataTableChildrenEncoder(
creationData, visualDocument, sourceElement, contentTable);
childrenEncoder.setRowClasses(CSS_LIST_ROW_CLASS, CSS_LIST_ROW_CLASS);
childrenEncoder.encodeChildren();
contentDiv.appendChild(contentTable);
return contentDiv;
}
/**
* Encodes controls facets to DIV element with TABLE.
*
* @param pageContext
* @param facetBody the facet body
* @param cssStyleName the css style name
* @param customStyleClass the custom style class
* @param creationData the creation data
* @param visualDocument the visual document
* @return the DIV element with facet
*/
private nsIDOMElement encodeControlsFacets(final VpePageContext pageContext,
Element facetBody, String cssStyleName, String customStyleClass,
VpeCreationData creationData, nsIDOMDocument visualDocument) {
/*
* Create table for facet
*/
nsIDOMElement fecetDiv = visualDocument.createElement(HTML.TAG_DIV);
nsIDOMElement table = visualDocument.createElement(HTML.TAG_TABLE);
nsIDOMElement tbody = visualDocument.createElement(HTML.TAG_TBODY);
boolean isColumnGroup = facetBody.getNodeName()
.endsWith(":columnGroup"); //$NON-NLS-1$
boolean isSubTable = facetBody.getNodeName().endsWith(":subTable"); //$NON-NLS-1$
if (isColumnGroup) {
RichFacesColumnGroupTemplate.DEFAULT_INSTANCE.encodeSubTable(pageContext, creationData,
facetBody, visualDocument, tbody);
} else if (isSubTable) {
RichFacesSubTableTemplate.DEFAULT_INSTANCE.encodeSubTable(pageContext, creationData,
facetBody, visualDocument, tbody);
} else {
nsIDOMElement tr = visualDocument
.createElement(HTML.TAG_TR);
tbody.appendChild(tr);
nsIDOMElement td = visualDocument.createElement(HTML.TAG_TD);
tr.appendChild(td);
td.setAttribute(HTML.ATTR_SCOPE,
HTML.TAG_COLGROUP);
VpeChildrenInfo child = new VpeChildrenInfo(td);
child.addSourceChild(facetBody);
creationData.addChildrenInfo(child);
/*
* It is always controls facet
*/
tr.setAttribute(HTML.ATTR_CLASS,CSS_BUTTON_CLASS);
td.setAttribute(HTML.ATTR_CLASS,
CSS_BUTTON_CONTENT_CLASS + " " + cssStyleName + " " //$NON-NLS-1$ //$NON-NLS-2$
+ customStyleClass);
fecetDiv.setAttribute(HTML.ATTR_CLASS,
CSS_BUTTON_CLASS + " " + CSS_BUTTON_CONTENT_CLASS + " " //$NON-NLS-1$ //$NON-NLS-2$
+ cssStyleName + " " + customStyleClass); //$NON-NLS-1$
}
table.setAttribute(HTML.ATTR_CLASS,CSS_BUTTON_CONTENT_CLASS);
table.appendChild(tbody);
fecetDiv.appendChild(table);
return fecetDiv;
}
/**
*
* @param parentSourceElement
* @return list of columns
*/
private static ArrayList<Element> getColumns(Element parentSourceElement) {
ArrayList<Element> columns = new ArrayList<Element>();
NodeList children = parentSourceElement.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
String nodeName = child.getNodeName();
if ((child instanceof Element)
&& (nodeName.endsWith(COLUMN) || nodeName.endsWith(COLUMNS))) {
columns.add((Element) child);
}
}
return columns;
}
@Override
public boolean recreateAtAttrChange(VpePageContext pageContext,
Element sourceElement, nsIDOMDocument visualDocument,
nsIDOMElement visualNode, Object data, String name, String value) {
return true;
}
@Override
public void validate(VpePageContext pageContext, Node sourceNode,
nsIDOMDocument visualDocument, VpeCreationData data) {
RichFacesDataTableChildrenEncoder.validateChildren(pageContext, sourceNode, visualDocument, data);
}
}