/*******************************************************************************
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* Contributors:
* Gregory Amerson - initial implementation and ongoing maintenance
*******************************************************************************/
package com.liferay.ide.core.util;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
/**
* @author Greg Amerson
* @author Terry Jia
*/
public class NodeUtil
{
public static Element appendChildElement( Element parentElement, String newElementName )
{
return NodeUtil.appendChildElement( parentElement, newElementName, null );
}
public static Element appendChildElement( Element parentElement, String newElementName, String initialTextContent )
{
Element newChildElement = null;
if( parentElement != null && newElementName != null )
{
Document ownerDocument = parentElement.getOwnerDocument();
newChildElement = ownerDocument.createElement( newElementName );
if( initialTextContent != null )
{
newChildElement.appendChild( ownerDocument.createTextNode( initialTextContent ) );
}
parentElement.appendChild( newChildElement );
}
return newChildElement;
}
public static Node appendTextNode( Element parentElement, String initialTextContent )
{
Node newChildElement = null;
if( parentElement != null )
{
Document ownerDocument = parentElement.getOwnerDocument();
newChildElement = ownerDocument.createTextNode( initialTextContent );
parentElement.appendChild( newChildElement );
}
return newChildElement;
}
public static Element findChildElement( Element parentElement, String elementName )
{
Element retval = null;
if( parentElement == null )
{
return retval;
}
NodeList children = parentElement.getChildNodes();
for( int i = 0; i < children.getLength(); i++ )
{
Node child = children.item( i );
if( child instanceof Element && child.getNodeName().equals( elementName ) )
{
retval = (Element) child;
break;
}
}
return retval;
}
public static Node findFirstChild( Element element, String elementName )
{
if( element != null && !( CoreUtil.isNullOrEmpty( elementName ) ) )
{
NodeList children = element.getChildNodes();
if( children != null && children.getLength() > 0 )
{
for( int i = 0; i < children.getLength(); i++ )
{
Node child = children.item( i );
if( elementName.equals( child.getNodeName() ) )
{
return child;
}
}
}
}
return null;
}
public static Node findLastChild( Element element, String elementName )
{
if( element != null && !( CoreUtil.isNullOrEmpty( elementName ) ) )
{
NodeList children = element.getChildNodes();
if( children != null && children.getLength() > 0 )
{
for( int i = children.getLength() - 1; i >= 0; i-- )
{
Node child = children.item( i );
if( elementName.equals( child.getNodeName() ) )
{
return child;
}
}
}
}
return null;
}
public static String getChildElementContent( Node parent, String childElement )
{
String retval = null;
NodeList children = parent.getChildNodes();
if( children != null && children.getLength() > 0 )
{
for( int i = 0; i < children.getLength(); i++ )
{
Node child = children.item( i );
if( child instanceof Element && child.getNodeName().equals( childElement ) )
{
return getTextContent( (Element) child );
}
}
}
return retval;
}
public static Node getFirstNamedChildNode( Element element, String string )
{
NodeList children = element.getChildNodes();
if( children != null && children.getLength() > 0 )
{
for( int i = 0; i < children.getLength(); i++ )
{
Node item = children.item( i );
if( item.getNodeName().equals( string ) )
{
return item;
}
}
}
return null;
}
public static String getTextContent( Node node )
{
NodeList children = node.getChildNodes();
if( children.getLength() == 1 )
{
return children.item( 0 ).getNodeValue().trim();
}
StringBuffer s = new StringBuffer();
Node child = node.getFirstChild();
while( child != null )
{
s.append( child.getNodeValue().trim() );
child = child.getNextSibling();
}
return s.toString().trim();
}
public static Element insertChildElement(
Element parentElement, Node refNode, String newElementName, String initialTextContent )
{
Element newChildElement = null;
if( parentElement != null && newElementName != null )
{
Document ownerDocument = parentElement.getOwnerDocument();
newChildElement = ownerDocument.createElement( newElementName );
if( initialTextContent != null )
{
newChildElement.appendChild( ownerDocument.createTextNode( initialTextContent ) );
}
parentElement.insertBefore( newChildElement, refNode );
}
return newChildElement;
}
public static Element insertChildElementAfter(
Element parentElement, Node refNode, String newElementName, String initialTextContent )
{
Element newChildElement = null;
if( parentElement != null && newElementName != null )
{
Document ownerDocument = parentElement.getOwnerDocument();
newChildElement = ownerDocument.createElement( newElementName );
if( initialTextContent != null )
{
newChildElement.appendChild( ownerDocument.createTextNode( initialTextContent ) );
}
if( parentElement.getLastChild().equals( refNode ) )
{
parentElement.appendChild( newChildElement );
}
else
{
parentElement.insertBefore( newChildElement, refNode.getNextSibling() );
}
}
return newChildElement;
}
public static void removeChildren( Element element )
{
while( element != null && element.hasChildNodes() )
{
element.removeChild( element.getFirstChild() );
}
}
public static void removeChildren( Node node )
{
if( node == null || node.getChildNodes() == null || node.getChildNodes().getLength() <= 0 )
{
return;
}
NodeList children = node.getChildNodes();
for( int i = 0; i < children.getLength(); i++ )
{
node.removeChild( children.item( i ) );
}
}
public static Text setTextContent( Node namespaceNode, String textContent )
{
Text retval = null;
if( namespaceNode instanceof Text )
{
namespaceNode.setNodeValue( textContent );
retval = (Text) namespaceNode;
}
else if( namespaceNode instanceof Element )
{
Element namespaceElement = (Element) namespaceNode;
removeChildren( namespaceElement );
retval = namespaceElement.getOwnerDocument().createTextNode( textContent );
namespaceElement.appendChild( retval );
}
return retval;
}
}