/** * Copyright (c) 2016, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.wifi.hotspot2.omadm; import android.text.TextUtils; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * A class represent a node in an XML tree. Each node is an XML element. * Used by {@link XMLParser} for parsing/converting each XML element to XMLNode. * * @hide */ public class XMLNode { private final String mTag; private final List mChildren; private final XMLNode mParent; private StringBuilder mTextBuilder; private String mText; public XMLNode(XMLNode parent, String tag) { mTag = tag; mParent = parent; mChildren = new ArrayList<>(); mTextBuilder = new StringBuilder(); mText = null; } /** * Adding a text to this node. Invoked by {@link XMLParser#characters}. * * @param text String to be added */ public void addText(String text) { mTextBuilder.append(text); } /** * Adding a child node to this node. Invoked by {@link XMLParser#startElement}. * * @param child XMLNode to be added */ public void addChild(XMLNode child) { mChildren.add(child); } /** * Invoked when the end of the XML element is detected. Used for further processing * of the text enclosed within this XML element. Invoked by {@link XMLParser#endElement}. */ public void close() { // Remove the leading and the trailing whitespaces. mText = mTextBuilder.toString().trim(); mTextBuilder = null; } public String getTag() { return mTag; } public XMLNode getParent() { return mParent; } public String getText() { return mText; } public List getChildren() { return mChildren; } @Override public boolean equals(Object thatObject) { if (this == thatObject) { return true; } if (!(thatObject instanceof XMLNode)) { return false; } XMLNode that = (XMLNode) thatObject; return TextUtils.equals(mTag, that.mTag) && TextUtils.equals(mText, that.mText) && mChildren.equals(that.mChildren); } @Override public int hashCode() { return Objects.hash(mTag, mText, mChildren); } }