/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.vpe.richfaces.template;
import java.util.List;
import org.jboss.tools.jsf.vpe.richfaces.ComponentUtil;
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.template.expression.VpeExpression;
import org.jboss.tools.vpe.editor.template.expression.VpeExpressionException;
import org.jboss.tools.vpe.editor.util.HTML;
import org.jboss.tools.vpe.editor.util.VisualDomUtil;
import org.jboss.tools.vpe.editor.util.VpeClassUtil;
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;
/**
*
*/
public class RichFacesDataListTemplate extends VpeAbstractTemplate {
/** CSS_FILE_NAME */
final static private String CSS_FILE_NAME = "dataList/dataList.css";//$NON-NLS-1$
final static private int NUMBER_OF_ROWS_TO_DISPLAY = 1;
public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument) {
Element sourceElement = (Element)sourceNode;
nsIDOMElement unorderedList = visualDocument.createElement(HTML.TAG_UL);
ComponentUtil.setCSSLink(pageContext, CSS_FILE_NAME, "richFacesDataList");//$NON-NLS-1$
VisualDomUtil.copyAttributes(sourceNode, unorderedList);
ComponentUtil.correctAttribute(sourceElement, unorderedList,
RichFaces.ATTR_STYLE_CLASS,
HTML.ATTR_CLASS,
"dr-list rich-datalist", //$NON-NLS-1$
"dr-list rich-datalist");//$NON-NLS-1$
ComponentUtil.correctAttribute(sourceElement, unorderedList,
RichFaces.ATTR_STYLE,
HTML.ATTR_STYLE, null, null);
VpeCreationData creatorInfo = new VpeCreationData(unorderedList);
creatorInfo.addChildrenInfo(new VpeChildrenInfo(null));
final List<String> rowClasses;
try {
final VpeExpression exprRowClasses = RichFaces.getExprRowClasses();
rowClasses = VpeClassUtil.getClasses(exprRowClasses, sourceNode,
pageContext);
} catch (VpeExpressionException e) {
throw new RuntimeException(e);
}
final int rowClassesSize = rowClasses.size();
int rows = NUMBER_OF_ROWS_TO_DISPLAY;
for (int i = 0; i < rows; i++) {
nsIDOMElement listItem = visualDocument.createElement(HTML.TAG_LI);
String rowClass = "dr-list-item rich-list-item"; //$NON-NLS-1$
if (rowClassesSize > 0) {
rowClass+= " " + rowClasses.get(i % rowClassesSize); //$NON-NLS-1$
}
listItem.setAttribute(HTML.ATTR_CLASS, rowClass);
unorderedList.appendChild(listItem);
VpeChildrenInfo info = new VpeChildrenInfo(listItem);
encodeListItem(info, sourceElement);
creatorInfo.addChildrenInfo(info);
}
return creatorInfo;
}
private void encodeListItem(VpeChildrenInfo info, Element sourceElement) {
NodeList children = sourceElement.getChildNodes();
int cnt = children != null ? children.getLength() : 0;
if (cnt > 0) {
for (int i = 0; i < cnt; i++) {
Node child = children.item(i);
if (child.getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element)child;
info.addSourceChild(childElement);
}
}
}
}
@Override
public boolean recreateAtAttrChange(VpePageContext pageContext,
Element sourceElement, nsIDOMDocument visualDocument,
nsIDOMElement visualNode, Object data, String name, String value) {
return true;
}
}