/******************************************************************************* * 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 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.util.Constants; 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; import org.jboss.tools.vpe.editor.util.HTML; public class RichFacesDataOrderedListTemplate extends VpeAbstractTemplate { private static final String ORDERED_LIST_CLASSES = "dr-list rich-orderedlist"; //$NON-NLS-1$ private static final String LIST_ITEM_CLASSES = "dr-list-item rich-list-item"; //$NON-NLS-1$ private static final String CSS_FILE_NAME = "dataOrderedList/dataOrderedList.css"; //$NON-NLS-1$ public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument) { Element sourceElement = (Element)sourceNode; nsIDOMElement orderedList = visualDocument.createElement(HTML.TAG_OL); ComponentUtil.setCSSLink(pageContext, CSS_FILE_NAME, "richFacesDataOrderList"); //$NON-NLS-1$ VisualDomUtil.copyAttributes(sourceNode, orderedList); ComponentUtil.correctAttribute(sourceElement, orderedList, RichFaces.ATTR_STYLE_CLASS, HTML.ATTR_CLASS, ORDERED_LIST_CLASSES, ORDERED_LIST_CLASSES); ComponentUtil.correctAttribute(sourceElement, orderedList, RichFaces.ATTR_STYLE, HTML.ATTR_STYLE , null, null); VpeCreationData creatorInfo = new VpeCreationData(orderedList); creatorInfo.addChildrenInfo(new VpeChildrenInfo(null)); int rows = 1; try { rows = Integer.parseInt(sourceElement.getAttribute(RichFaces.ATTR_ROWS)); } catch (NumberFormatException x) { // this is OK, rows still equals 1 } String rowClassesString = sourceElement.getAttribute(RichFaces.ATTR_ROW_CLASSES); String[] rowClasses = null; if (ComponentUtil.isNotBlank(rowClassesString)) { rowClasses = rowClassesString.split(Constants.COMMA); } /* * If rows==0 display at least one row. */ int i = 0; do { nsIDOMElement listItem = visualDocument.createElement(HTML.TAG_LI); String rowClass = LIST_ITEM_CLASSES; if ((null != rowClasses) && (rowClasses.length > 0)) { rowClass += Constants.WHITE_SPACE + rowClasses[i % rowClasses.length]; } listItem.setAttribute(HTML.ATTR_CLASS, rowClass); orderedList.appendChild(listItem); VpeChildrenInfo info = new VpeChildrenInfo(listItem); encodeListItem(info, sourceElement); creatorInfo.addChildrenInfo(info); i++; } while (i < rows); return creatorInfo; } 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; } }