/*******************************************************************************
* Copyright (c) 2007 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:
* 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.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.mozilla.interfaces.nsIDOMNode;
import org.mozilla.interfaces.nsIDOMNodeList;
import org.mozilla.interfaces.nsIDOMText;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public abstract class RichFacesAbstractTreeTemplate extends VpeAbstractTemplate {
public static final String TREE = "tree"; //$NON-NLS-1$
public static final String TREE_NODE = "treeNode"; //$NON-NLS-1$
public static final String TREE_NODES_ADAPTOR = "treeNodesAdaptor"; //$NON-NLS-1$
public static final String RECURSIVE_TREE_NODES_ADAPTOR = "recursiveTreeNodesAdaptor"; //$NON-NLS-1$
public static final String TREE_MODEL_ADAPTOR = "treeModelAdaptor"; //$NON-NLS-1$
public static final String TREE_MODEL_RECURSIVE_ADAPTOR = "treeModelRecursiveAdaptor"; //$NON-NLS-1$
public static final String SHOW_LINES_ATTR_NAME = "showConnectingLines"; //$NON-NLS-1$
public static final String NODES_NAME = "nodes"; //$NON-NLS-1$
public static final String DEFAULT_ICON_PARAM_VALUE = "DEFAULT_ICON_PARAM"; //$NON-NLS-1$
public static final String ICON_PARAM_NAME = "richFacesTreeNodeParam"; //$NON-NLS-1$
public static final String DEFAULT_ICON_EXPANDED_PARAM_VALUE = "DEFAULT_ICON_EXPANDED_PARAM"; //$NON-NLS-1$
public static final String UNDEFINED_ICON = "/tree/unresolved.gif"; //$NON-NLS-1$
public static final String NODE_ICON_LEAF_ATTR_NAME = "iconLeaf"; //$NON-NLS-1$
public static final String ICON_NODE_WITH_LINES = "/tree/iconNodeWithLines.gif"; //$NON-NLS-1$
public static final String ICON_NODE_WITH_LINE = "/tree/iconNodeWithLine.gif"; //$NON-NLS-1$
public static final String ICON_EXPANDED_WITH_LINES = "/tree/iconCollapsedWithLines.gif"; //$NON-NLS-1$
public static final String ICON_NODE_WITHOUT_LINES = "/tree/iconNode.gif"; //$NON-NLS-1$
public static final String ICON_EXPANDED_WITHOUT_LINES = "/tree/iconCollapsed.gif"; //$NON-NLS-1$
public static final String ICON_NOT_EXPANDED_WITH_LINES = "/tree/iconNotCollapsedWithLines.gif"; //$NON-NLS-1$
public static final String ICON_NOT_EXPANDED_WITH_ALL_LINES = "/tree/iconNotCollapsedWithAllLines.gif"; //$NON-NLS-1$
public static final String ICON_NOT_EXPANDED_WITHOUT_LINES = "/tree/iconNotCollapsed.gif"; //$NON-NLS-1$
public static final String ICON_EXPANDED_ADAPTER_WITH_LINES = "/tree/iconClosedNodeWithLines.gif"; //$NON-NLS-1$
public static final String ICON_EXPANDED_ADAPTER_WITHOUT_LINES = "/tree/iconClosedNode.gif"; //$NON-NLS-1$
public static final String ICON_LEAF_WITH_LINES = "/tree/iconLeafWithLines.gif"; //$NON-NLS-1$
public static final String ICON_RIGHT_LINE = "/tree/rightLine.gif"; //$NON-NLS-1$
public static final String ICON_LEFT_LINE = "/tree/leftLine.gif"; //$NON-NLS-1$
public static final String ICON_LINE = "/tree/line.gif"; //$NON-NLS-1$
public static final String ICON_LEAF_WITHOUT_LINES = "/tree/iconLeaf.gif"; //$NON-NLS-1$
protected static final String TREE_TABLE_PICTURE_STYLE_CLASS_NAME = "treePictureStyle"; //$NON-NLS-1$
protected static final String STYLE_CLASS_FOR_NODE_TITLE = "treeNodeNameStyle"; //$NON-NLS-1$
protected static final String NODE_TITLE_STYLE_CLASS_ATTR_NAME = "nodeClass"; //$NON-NLS-1$
protected static final String NODE_ICON_EXPANDED_ATTR_NAME = "iconExpanded"; //$NON-NLS-1$
protected static final String NODE_ICON_ATTR_NAME = "icon"; //$NON-NLS-1$
protected static final String TREE_TABLE_ATR_CELLSPACING_VALUE = "0px"; //$NON-NLS-1$
protected static final String TREE_TABLE_ATR_CELLPADDING_VALUE = "0px"; //$NON-NLS-1$
protected static final String TREE_TABLE_ATR_BORDER_VALUE = "0px"; //$NON-NLS-1$
protected static final String NODE_LINES_STYLE = "background-position: center; background-repeat: repeat-y;"; //$NON-NLS-1$
/**
* Get showConnectingLines attribute
*
* @param sourceNode
* @return
*/
protected boolean getShowLinesAttr(Node sourceNode) {
String treeName = sourceNode.getPrefix() + Constants.COLON + TREE;
do {
sourceNode = sourceNode.getParentNode();
if (!(sourceNode instanceof Element)) {
return true;
}
} while (!sourceNode.getNodeName().equals(treeName));
String showLinesParam = ((Element) sourceNode)
.getAttribute(SHOW_LINES_ATTR_NAME);
boolean showLinesValue = true;
if (showLinesParam != null
&& Constants.FALSE.equalsIgnoreCase(showLinesParam)) {
showLinesValue = false;
}
return showLinesValue;
}
/**
* Is adapter between treeNodes
*
* @param sourceNode
* @return
*/
protected boolean isAdapterBetweenNodes(Node sourceNode) {
Node parentNode = sourceNode.getParentNode();
NodeList childs = parentNode.getChildNodes();
Node beforeAdapterNode = null;
Node afterAdapterNode = null;
Node adapterNode = null;
for (int i = 0; i < childs.getLength(); i++) {
Node el = childs.item(i);
if (!(el instanceof Element)) {
continue;
}
if (el.equals(sourceNode)) {
adapterNode = el;
} else {
if (el.getNodeName().endsWith(Constants.COLON + TREE_NODE)) {
if (adapterNode == null) {
beforeAdapterNode = el;
} else {
afterAdapterNode = el;
}
}
}
}
if (beforeAdapterNode != null && afterAdapterNode != null) {
return true;
}
return false;
}
/**
* Next element is Adaptor
*
* @param sourceNode
* @return
*/
protected boolean isHasNextAdaptorElement(Node sourceNode) {
Node parentTree = sourceNode.getParentNode();
if (!(parentTree instanceof Element)) {
return true;
}
NodeList childs = parentTree.getChildNodes();
Node lastElement = null;
Node el = null;
for (int i = 0; i < childs.getLength(); i++) {
el = childs.item(i);
if (!(el instanceof Element)) {
continue;
}
if (lastElement != null) {
break;
}
if (sourceNode.equals(el)) {
lastElement = el;
}
}
if (el.getNodeName().endsWith(Constants.COLON + TREE_NODES_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + RECURSIVE_TREE_NODES_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + TREE_MODEL_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + TREE_MODEL_RECURSIVE_ADAPTOR)) {
return true;
}
return false;
}
/**
* Has Next element
*
* @param sourceNode
* @return
*/
protected boolean isHasNextParentAdaptorElement(Node sourceNode) {
Node tree = sourceNode.getParentNode();
if (!(tree instanceof Element)) {
return true;
}
Node parentTree = tree.getParentNode();
if (!(parentTree instanceof Element)) {
return true;
}
NodeList childs = parentTree.getChildNodes();
Node lastElement = null;
Node el = null;
for (int i = 0; i < childs.getLength(); i++) {
el = childs.item(i);
if (!(el instanceof Element)) {
continue;
}
if (lastElement != null) {
break;
}
if (el.equals(tree)) {
lastElement = el;
}
}
if (el.getNodeName().endsWith(Constants.COLON + TREE_NODE)
|| el.getNodeName().endsWith(Constants.COLON + TREE_NODES_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + RECURSIVE_TREE_NODES_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + TREE_MODEL_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + TREE_MODEL_RECURSIVE_ADAPTOR)) {
return true;
}
return false;
}
/**
*
* @param sourceNode
* @return
*/
protected boolean isHasParentAdapter(Node sourceNode) {
Node node = sourceNode.getParentNode();
if (node.getNodeName().endsWith(Constants.COLON + TREE_NODES_ADAPTOR)
|| node.getNodeName().endsWith(Constants.COLON + RECURSIVE_TREE_NODES_ADAPTOR)
|| node.getNodeName().endsWith(Constants.COLON + TREE_MODEL_ADAPTOR)
|| node.getNodeName().endsWith(Constants.COLON + TREE_MODEL_RECURSIVE_ADAPTOR)) {
return true;
}
return false;
}
/**
*
* Function for parsing tree by tree nodes;
*
* @param pageContext
* @param sourceNode
* @param visualDocument
* @return
*/
protected void parseTree(VpePageContext pageContext, Node sourceNode,
nsIDOMDocument visualDocument, VpeCreationData vpeCreationData,
nsIDOMElement parentElement) {
NodeList nodeList = sourceNode.getChildNodes();
Element element = null;
int lenght = nodeList.getLength();
VpeChildrenInfo vpeChildrenInfo = null;
for (int i = 0; i < lenght; i++) {
if (!(nodeList.item(i) instanceof Element)) {
continue;
}
element = (Element) nodeList.item(i);
if (element.getNodeName().endsWith(Constants.COLON + TREE_NODE)
|| element.getNodeName().endsWith(Constants.COLON + RECURSIVE_TREE_NODES_ADAPTOR)
|| element.getNodeName().endsWith(Constants.COLON + TREE_MODEL_RECURSIVE_ADAPTOR)) {
vpeChildrenInfo = new VpeChildrenInfo(parentElement);
vpeCreationData.addChildrenInfo(vpeChildrenInfo);
vpeChildrenInfo.addSourceChild(element);
} else if (element.getNodeName().endsWith(Constants.COLON + TREE_NODES_ADAPTOR)
|| element.getNodeName().endsWith(Constants.COLON + TREE_MODEL_ADAPTOR)) {
vpeChildrenInfo = new VpeChildrenInfo(parentElement);
vpeCreationData.addChildrenInfo(vpeChildrenInfo);
vpeChildrenInfo.addSourceChild(element);
}
}
}
/**
* Create simple tree node attribute.Used for creating more complex trees.
*
* @param treeNodeTitle
* @param visualDocument
* @return tree
*/
protected void createBasicTree(VpePageContext pageContext,
nsIDOMDocument visualDocument, nsIDOMElement treeRow,
Node sourceNode, VpeCreationData vpeCreationData) {
// creates icon node
String backgroundLinePath = null;
boolean showLinesValue = getShowLinesAttr((Element) sourceNode);
nsIDOMElement iconNode = visualDocument.createElement(HTML.TAG_TD);
// creates icon with status of node(collapsed or not) node
nsIDOMElement td1 = visualDocument.createElement(HTML.TAG_TD);
// sets icon node
if (!isLastElement(sourceNode) && isAdaptorChild(sourceNode)
&& !isHasNextAdaptorElement(sourceNode)) {
backgroundLinePath = RichFacesTemplatesActivator
.getPluginResourcePath() + ICON_LINE;
setAttributeForPictureNode(pageContext, visualDocument,
(Element) sourceNode, td1, NODE_ICON_EXPANDED_ATTR_NAME,
showLinesValue == true ? ICON_EXPANDED_ADAPTER_WITH_LINES
: ICON_EXPANDED_ADAPTER_WITHOUT_LINES);
setAttributeForPictureNode(pageContext, visualDocument,
(Element) sourceNode, iconNode, NODE_ICON_ATTR_NAME,
showLinesValue == true ? ICON_NODE_WITH_LINE
: ICON_NODE_WITHOUT_LINES);
} else if (!isLastElement(sourceNode) && isAdaptorChild(sourceNode)
&& isHasNextAdaptorElement(sourceNode)) {
backgroundLinePath = RichFacesTemplatesActivator
.getPluginResourcePath() + ICON_LINE;
setAttributeForPictureNode(pageContext, visualDocument,
(Element) sourceNode, td1, NODE_ICON_EXPANDED_ATTR_NAME,
showLinesValue == true ? ICON_EXPANDED_ADAPTER_WITH_LINES
: ICON_EXPANDED_ADAPTER_WITHOUT_LINES);
setAttributeForPictureNode(pageContext, visualDocument,
(Element) sourceNode, iconNode, NODE_ICON_ATTR_NAME,
showLinesValue == true ? ICON_NODE_WITH_LINES
: ICON_NODE_WITHOUT_LINES);
if (showLinesValue) {
String path = RichFacesTemplatesActivator
.getPluginResourcePath() + ICON_LEFT_LINE;
iconNode.setAttribute(HTML.ATTR_STYLE,
"background-image: url(file://" + path + "); " //$NON-NLS-1$ //$NON-NLS-2$
+ NODE_LINES_STYLE);
}
} else if ((isAdaptorChild(sourceNode) && isLastElement(sourceNode) && (isLastElementAfterAdaptor(sourceNode) == isAdaptorInTree(sourceNode)))
|| (!isAdaptorChild(sourceNode) && isLastElement(sourceNode))
|| (isAdaptorChild(sourceNode) && isOnlyOneNodeInAdaptor(sourceNode))) {
if (isAdaptorChild(sourceNode)
&& isOnlyOneNodeInAdaptor(sourceNode)
&& !isLastElementAfterAdaptor(sourceNode)
&& isHasNextParentAdaptorElement(sourceNode)) {
backgroundLinePath = RichFacesTemplatesActivator
.getPluginResourcePath() + ICON_LINE;
setAttributeForPictureNode(
pageContext,
visualDocument,
(Element) sourceNode,
td1,
NODE_ICON_EXPANDED_ATTR_NAME,
showLinesValue == true ? ICON_NOT_EXPANDED_WITH_ALL_LINES
: ICON_NOT_EXPANDED_WITHOUT_LINES);
} else {
backgroundLinePath = RichFacesTemplatesActivator
.getPluginResourcePath() + ICON_RIGHT_LINE;
setAttributeForPictureNode(pageContext, visualDocument,
(Element) sourceNode, td1,
NODE_ICON_EXPANDED_ATTR_NAME,
showLinesValue == true ? ICON_NOT_EXPANDED_WITH_LINES
: ICON_NOT_EXPANDED_WITHOUT_LINES);
}
setAttributeForPictureNode(pageContext, visualDocument,
(Element) sourceNode, iconNode, NODE_ICON_LEAF_ATTR_NAME,
showLinesValue == true ? ICON_LEAF_WITH_LINES
: ICON_LEAF_WITHOUT_LINES);
} else {
backgroundLinePath = RichFacesTemplatesActivator
.getPluginResourcePath() + ICON_RIGHT_LINE;
setAttributeForPictureNode(pageContext, visualDocument,
(Element) sourceNode, td1, NODE_ICON_EXPANDED_ATTR_NAME,
showLinesValue == true ? ICON_EXPANDED_WITH_LINES
: ICON_EXPANDED_WITHOUT_LINES);
if (showLinesValue) {
String path = RichFacesTemplatesActivator
.getPluginResourcePath() + ICON_LEFT_LINE;
iconNode.setAttribute(HTML.ATTR_STYLE,
"background-image: url(file://" + path + "); " //$NON-NLS-1$ //$NON-NLS-2$
+ NODE_LINES_STYLE);
}
setAttributeForPictureNode(pageContext, visualDocument,
(Element) sourceNode, iconNode, NODE_ICON_ATTR_NAME,
showLinesValue == true ? ICON_NODE_WITH_LINES
: ICON_NODE_WITHOUT_LINES);
}
if (showLinesValue) {
td1.setAttribute(HTML.ATTR_STYLE,
"background-image: url(file://" + backgroundLinePath //$NON-NLS-1$
+ "); " + NODE_LINES_STYLE); //$NON-NLS-1$
}
treeRow.appendChild(td1);
treeRow.appendChild(iconNode);
// creates Tree Node Name Message
nsIDOMElement nodeTitle = visualDocument.createElement(HTML.TAG_TD);
addBasicNodeTitleAttributes(nodeTitle);
// Create mapping to Encode body
if (sourceNode.getNodeName().endsWith(Constants.COLON + RECURSIVE_TREE_NODES_ADAPTOR)
|| sourceNode.getNodeName().endsWith(Constants.COLON + TREE_MODEL_RECURSIVE_ADAPTOR)) {
Element sourceElement = (Element) sourceNode;
String nodesAttrValue = sourceElement.hasAttribute(NODES_NAME) ? sourceElement.getAttribute(NODES_NAME) : Constants.EMPTY;
nsIDOMElement textContainer = VisualDomUtil.createBorderlessContainer(visualDocument);
nsIDOMText text = visualDocument.createTextNode(nodesAttrValue);
textContainer.appendChild(text);
nodeTitle.appendChild(textContainer);
} else {
VpeChildrenInfo tdInfo = new VpeChildrenInfo(nodeTitle);
// Create mapping to Encode body
List<Node> children = ComponentUtil.getChildren((Element) sourceNode, true);
for (Node child : children) {
tdInfo.addSourceChild(child);
}
vpeCreationData.addChildrenInfo(tdInfo);
}
treeRow.appendChild(nodeTitle);
}
/**
*
* @param parentTree
* @param sourceNode
* @return
*/
protected boolean isLastElement(nsIDOMNode sourceNode) {
nsIDOMNode parentTree = sourceNode.getParentNode();
if (!(parentTree instanceof Element)) {
return true;
}
nsIDOMNodeList childs = parentTree.getChildNodes();
nsIDOMNode lastElement = null;
nsIDOMNode el = null;
for (int i = 0; i < childs.getLength(); i++) {
el = childs.item(i);
if (el.getNodeName().endsWith(Constants.COLON + TREE_NODE)
|| el.getNodeName().endsWith(Constants.COLON + TREE_NODES_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + RECURSIVE_TREE_NODES_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + TREE_MODEL_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + TREE_MODEL_RECURSIVE_ADAPTOR)) {
lastElement = el;
}
}
return sourceNode.equals(lastElement);
}
/**
* Node is Adaptor child
*
* @param sourceNode
* @return
*/
private boolean isAdaptorChild(Node sourceNode) {
Node parentNode = sourceNode.getParentNode();
if (!(parentNode instanceof Element)) {
return true;
}
if (parentNode.getNodeName().endsWith(Constants.COLON + TREE_NODES_ADAPTOR)
|| parentNode.getNodeName().endsWith(Constants.COLON + RECURSIVE_TREE_NODES_ADAPTOR)
|| parentNode.getNodeName().endsWith(Constants.COLON + TREE_MODEL_ADAPTOR)
|| parentNode.getNodeName().endsWith(Constants.COLON + TREE_MODEL_RECURSIVE_ADAPTOR)) {
return true;
}
return false;
}
/**
* Node is last element
*
* @param parentTree
* @param sourceNode
* @return
*/
protected boolean isLastElement(Node sourceNode) {
Node parentTree = sourceNode.getParentNode();
if (!(parentTree instanceof Element)) {
return true;
}
NodeList childs = parentTree.getChildNodes();
Node lastElement = null;
Node el = null;
for (int i = 0; i < childs.getLength(); i++) {
el = childs.item(i);
if (el.getNodeName().endsWith(Constants.COLON + TREE_NODE)
|| el.getNodeName().endsWith(Constants.COLON + TREE_NODES_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + RECURSIVE_TREE_NODES_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + TREE_MODEL_ADAPTOR)
|| el.getNodeName().endsWith(Constants.COLON + TREE_MODEL_RECURSIVE_ADAPTOR)) {
lastElement = el;
}
}
return sourceNode.equals(lastElement);
}
/**
* Adds basic attributes to tree
*
* @param img
*/
private void addBasicAttributesToPicture(nsIDOMElement img) {
img.setAttribute(HTML.ATTR_CLASS, TREE_TABLE_PICTURE_STYLE_CLASS_NAME);
}
/**
* Sets attributes for no node title name
*
* @param nodeTitle
*/
private void addBasicNodeTitleAttributes(nsIDOMElement nodeTitle) {
nodeTitle.setAttribute(HTML.ATTR_CLASS, STYLE_CLASS_FOR_NODE_TITLE);
}
/**
* Used for setting images into tree nodes
*
* @param pageContext
* page context
* @param visualDocument
* visual document
* @param sourceNode
* treeNode element
* @param iconCell
* cell were image should be setted
* @param nodeAttrName
* image attr name( icon, iconExpanded, ...)
* @param defaultImage
* (image by default)
*/
private void setAttributeForPictureNode(VpePageContext pageContext,
nsIDOMDocument visualDocument, Element sourceNode,
nsIDOMElement iconCell, String nodeAttrName, String defaultImage) {
if (RichFacesTemplatesActivator.getDefault().isDebugging()) {
System.out.println("call setAttributeForPictureNode"); //$NON-NLS-1$
}
nsIDOMElement img = visualDocument.createElement(HTML.TAG_IMG);
addBasicAttributesToPicture(img);
iconCell.appendChild(img);
// get image from treeNode
String imgName = sourceNode.getAttribute(nodeAttrName);
// if in tree node image doesn't exist we get image attr from tree
if (imgName == null || imgName.length() == 0) {
Node parentElement = sourceNode.getParentNode();
if (parentElement instanceof Element) {
imgName = ((Element) parentElement).getAttribute(nodeAttrName);
}
} else {
img.setAttribute(ICON_PARAM_NAME, Constants.EMPTY);
}
// if we can't get attribute from parent we use default attribute
addBasicAttributesToPicture(img);
iconCell.appendChild(img);
if (imgName == null || imgName.length() == 0) {
ComponentUtil.setImg(img, defaultImage);
} else {
ComponentUtil.setImgFromResources(pageContext, img, imgName,
UNDEFINED_ICON);
}
if (nodeAttrName.equals(NODE_ICON_EXPANDED_ATTR_NAME)) {
img.setAttribute(ICON_PARAM_NAME, DEFAULT_ICON_EXPANDED_PARAM_VALUE);
} else if (nodeAttrName.equals(NODE_ICON_ATTR_NAME)) {
img.setAttribute(ICON_PARAM_NAME, DEFAULT_ICON_PARAM_VALUE);
} else if (nodeAttrName.equals(NODE_ICON_LEAF_ATTR_NAME)) {
img.setAttribute(ICON_PARAM_NAME, NODE_ICON_LEAF_ATTR_NAME);
}
}
private boolean isOnlyOneNodeInAdaptor(Node sourceNode) {
Node parent = sourceNode.getParentNode();
NodeList list = parent.getChildNodes();
Node currentNode = null;
for (int i = 0; i < list.getLength(); i++) {
Node el = list.item(i);
if (!(el instanceof Element)) {
continue;
}
if (el.getNodeName().endsWith(Constants.COLON + TREE_NODE)) {
if (currentNode == null) {
currentNode = el;
} else {
return false;
}
} else {
return false;
}
}
return true;
}
/**
* Node has element after adaptor
*
* @param sourceNode
* @return
*/
private boolean isLastElementAfterAdaptor(Node sourceNode) {
Node nodeAdaptor = sourceNode.getParentNode();
if (!(nodeAdaptor instanceof Element)) {
return true;
}
return isLastElement(nodeAdaptor);
}
/**
*
* @param sourceNode
* @return
*/
private boolean isAdaptorInTree(Node sourceNode) {
Node adaptorNode = sourceNode.getParentNode();
if (!(adaptorNode instanceof Element)) {
return true;
}
if (adaptorNode.getNodeName().endsWith(Constants.COLON + TREE_NODES_ADAPTOR)
|| adaptorNode.getNodeName().endsWith(Constants.COLON + RECURSIVE_TREE_NODES_ADAPTOR)
|| adaptorNode.getNodeName().endsWith(Constants.COLON + TREE_MODEL_ADAPTOR)
|| adaptorNode.getNodeName().endsWith(Constants.COLON + TREE_MODEL_RECURSIVE_ADAPTOR)) {
Node treeNode = adaptorNode.getParentNode();
if (treeNode.getNodeName().endsWith(Constants.COLON + TREE)) {
return true;
}
}
return false;
}
/**
* Set attributes for treeNode
*
* @param table
*/
protected void addBasicTreeNodeAttributes(nsIDOMElement table) {
if (table == null) {
return;
}
table.setAttribute(HTML.ATTR_CELLPADDING,
TREE_TABLE_ATR_CELLPADDING_VALUE);
table.setAttribute(HTML.ATTR_CELLSPACING,
TREE_TABLE_ATR_CELLSPACING_VALUE);
table.setAttribute(HTML.ATTR_BORDER, TREE_TABLE_ATR_BORDER_VALUE);
table.setAttribute(HTML.ATTR_CLASS, "dr-tree-full-width"); //$NON-NLS-1$
}
/**
* Checks for attributes for node and if such exist convert it's to html
* atributes.
*
* @param sourceNode
* @param tableRow
*/
protected void addAttributeToTableNode(Element sourceNode,
nsIDOMElement tableRow) {
if (sourceNode.hasAttribute(NODE_TITLE_STYLE_CLASS_ATTR_NAME)) {
tableRow.setAttribute(HTML.ATTR_CLASS,
sourceNode.getAttribute(NODE_TITLE_STYLE_CLASS_ATTR_NAME));
}
}
}