/******************************************************************************* * 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 static org.jboss.tools.vpe.xulrunner.util.XPCOM.queryInterface; import org.jboss.tools.jsf.vpe.richfaces.ComponentUtil; import org.jboss.tools.vpe.editor.context.VpePageContext; 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.mozilla.interfaces.nsIDOMDocument; import org.mozilla.interfaces.nsIDOMElement; import org.mozilla.interfaces.nsIDOMNode; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * Create template for rich:treeNodes element * * @author dsakovich@exadel.com * */ public class RichFacesTreeNodeTemplate extends RichFacesAbstractTreeTemplate { /** * Creates a node of the visual tree on the node of the source tree. This * visual node should not have the parent node This visual node can have * child nodes. * * @param pageContext * Contains the information on edited page. * @param sourceNode * The current node of the source tree. * @param visualDocument * The document of the visual tree. * @return The information on the created node of the visual tree. */ public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument) { nsIDOMElement div = visualDocument.createElement(HTML.TAG_DIV); nsIDOMElement visualElement = visualDocument .createElement(HTML.TAG_TABLE); addBasicTreeNodeAttributes(visualElement); div.appendChild(visualElement); nsIDOMElement tbody = visualDocument.createElement(HTML.TAG_TBODY); nsIDOMElement tableRow = visualDocument.createElement(HTML.TAG_TR); addAttributeToTableNode((Element) sourceNode, tableRow); visualElement.appendChild(tbody); tbody.appendChild(tableRow); VpeCreationData vpeCreationData = new VpeCreationData(div); createBasicTree(pageContext, visualDocument, tableRow, sourceNode, vpeCreationData); return vpeCreationData; } @Override public void setAttribute(VpePageContext pageContext, Element sourceElement, nsIDOMDocument visualDocument, nsIDOMNode visualNode, Object data, String name, String value) { /* * processed only next attributes iconExpanded and icon, because tree * always shows as expanded and information is it leaf or not contains * in model */ if (NODE_ICON_EXPANDED_ATTR_NAME.equalsIgnoreCase(name)) { nsIDOMElement expandedIconCell = queryInterface(visualNode .getChildNodes().item(0), nsIDOMElement.class); nsIDOMElement img = queryInterface(expandedIconCell.getChildNodes() .item(0), nsIDOMElement.class); ComponentUtil.setImgFromResources(pageContext, img, value, UNDEFINED_ICON); img.setAttribute(ICON_PARAM_NAME, Constants.EMPTY); } else if (NODE_ICON_ATTR_NAME.equals(name) && !isLastElement(visualNode)) { nsIDOMElement iconCell = queryInterface(visualNode.getChildNodes() .item(1), nsIDOMElement.class); nsIDOMElement img = queryInterface( iconCell.getChildNodes().item(0), nsIDOMElement.class); ComponentUtil.setImgFromResources(pageContext, img, value, UNDEFINED_ICON); img.setAttribute(ICON_PARAM_NAME, Constants.EMPTY); } else if (NODE_ICON_LEAF_ATTR_NAME.equals(name) && isLastElement(sourceElement)) { nsIDOMElement iconCell = queryInterface(visualNode.getChildNodes() .item(1), nsIDOMElement.class); nsIDOMElement img = queryInterface( iconCell.getChildNodes().item(0), nsIDOMElement.class); ComponentUtil.setImgFromResources(pageContext, img, value, UNDEFINED_ICON); img.setAttribute(ICON_PARAM_NAME, Constants.EMPTY); } } @Override public void removeAttribute(VpePageContext pageContext, Element sourceElement, nsIDOMDocument visualDocument, nsIDOMNode visualNode, Object data, String name) { /* * processed only next attributes iconExpanded and icon, because tree * always shows as expanded and information is it leaf or not contains * in model */ Element parentElement = (Element) sourceElement.getParentNode(); boolean showLinesValue = getShowLinesAttr(sourceElement); if (NODE_ICON_EXPANDED_ATTR_NAME.equalsIgnoreCase(name)) { nsIDOMElement expandedIconCell = queryInterface(visualNode .getChildNodes().item(0), nsIDOMElement.class); nsIDOMElement img = queryInterface(expandedIconCell.getChildNodes() .item(0), nsIDOMElement.class); if (parentElement.hasAttribute(NODE_ICON_EXPANDED_ATTR_NAME)) { String parentAttrName = parentElement .getAttribute(NODE_ICON_EXPANDED_ATTR_NAME); ComponentUtil.setImgFromResources(pageContext, img, parentAttrName, UNDEFINED_ICON); } else { ComponentUtil.setImg(img, showLinesValue == true ? ICON_EXPANDED_WITH_LINES : ICON_EXPANDED_WITHOUT_LINES); } img.setAttribute(ICON_PARAM_NAME, DEFAULT_ICON_EXPANDED_PARAM_VALUE); } else if (NODE_ICON_ATTR_NAME.equalsIgnoreCase(name) && !isLastElement(sourceElement)) { nsIDOMElement iconCell = queryInterface(visualNode.getChildNodes() .item(1), nsIDOMElement.class); nsIDOMElement img = queryInterface( iconCell.getChildNodes().item(0), nsIDOMElement.class); if (parentElement.hasAttribute(NODE_ICON_ATTR_NAME)) { String parentAttrName = parentElement .getAttribute(NODE_ICON_ATTR_NAME); ComponentUtil.setImgFromResources(pageContext, img, parentAttrName, UNDEFINED_ICON); } else { ComponentUtil.setImg(img, showLinesValue == true ? ICON_NODE_WITH_LINES : ICON_NODE_WITHOUT_LINES); } img.setAttribute(ICON_PARAM_NAME, DEFAULT_ICON_PARAM_VALUE); } else if (NODE_ICON_LEAF_ATTR_NAME.equalsIgnoreCase(name) && isLastElement(sourceElement)) { nsIDOMElement iconCell = queryInterface(visualNode.getChildNodes() .item(1), nsIDOMElement.class); nsIDOMElement img = queryInterface( iconCell.getChildNodes().item(0), nsIDOMElement.class); if (parentElement.hasAttribute(NODE_ICON_LEAF_ATTR_NAME)) { String parentAttrName = parentElement .getAttribute(NODE_ICON_LEAF_ATTR_NAME); ComponentUtil.setImgFromResources(pageContext, img, parentAttrName, UNDEFINED_ICON); } else { ComponentUtil.setImg(img, showLinesValue == true ? ICON_LEAF_WITH_LINES : ICON_LEAF_WITHOUT_LINES); } img.setAttribute(ICON_PARAM_NAME, NODE_ICON_LEAF_ATTR_NAME); } } }