summaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/eleven/lastfm/DomElement.java
diff options
context:
space:
mode:
authorlinus_lee <llee@cyngn.com>2014-11-20 16:39:38 -0800
committerlinus_lee <llee@cyngn.com>2014-12-09 12:23:20 -0800
commit71810ebb2bf8fd792c92487fe87f9dbebefc8541 (patch)
tree42a4d11ba03a4c7af843edc0b45375b17c64053c /src/com/cyanogenmod/eleven/lastfm/DomElement.java
parentf199f983c9a5e2f4434b85273d1da0d609c33228 (diff)
downloadandroid_packages_apps_Eleven-71810ebb2bf8fd792c92487fe87f9dbebefc8541.tar.gz
android_packages_apps_Eleven-71810ebb2bf8fd792c92487fe87f9dbebefc8541.tar.bz2
android_packages_apps_Eleven-71810ebb2bf8fd792c92487fe87f9dbebefc8541.zip
Update Eleven headers and namespace for open source
Change-Id: I82caf2ebf991998e67f546ff2ac7eaf2b30dc6be
Diffstat (limited to 'src/com/cyanogenmod/eleven/lastfm/DomElement.java')
-rw-r--r--src/com/cyanogenmod/eleven/lastfm/DomElement.java175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/com/cyanogenmod/eleven/lastfm/DomElement.java b/src/com/cyanogenmod/eleven/lastfm/DomElement.java
new file mode 100644
index 0000000..d3ace9a
--- /dev/null
+++ b/src/com/cyanogenmod/eleven/lastfm/DomElement.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2012, the Last.fm Java Project and Committers All rights
+ * reserved. Redistribution and use of this software in source and binary forms,
+ * with or without modification, are permitted provided that the following
+ * conditions are met: - Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the following disclaimer. -
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution. THIS SOFTWARE IS
+ * PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.cyanogenmod.eleven.lastfm;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <code>DomElement</code> wraps around an {@link Element} and provides
+ * convenience methods.
+ *
+ * @author Janni Kovacs
+ */
+public class DomElement {
+ private final Element e;
+
+ /**
+ * Creates a new wrapper around the given {@link Element}.
+ *
+ * @param elem An w3c Element
+ */
+ public DomElement(final Element elem) {
+ e = elem;
+ }
+
+ /**
+ * @return the original Element
+ */
+ public Element getElement() {
+ return e;
+ }
+
+ /**
+ * Tests if this element has an attribute with the specified name.
+ *
+ * @param name Name of the attribute.
+ * @return <code>true</code> if this element has an attribute with the
+ * specified name.
+ */
+ public boolean hasAttribute(final String name) {
+ return e.hasAttribute(name);
+ }
+
+ /**
+ * Returns the attribute value to a given attribute name or
+ * <code>null</code> if the attribute doesn't exist.
+ *
+ * @param name The attribute's name
+ * @return Attribute value or <code>null</code>
+ */
+ public String getAttribute(final String name) {
+ return e.hasAttribute(name) ? e.getAttribute(name) : null;
+ }
+
+ /**
+ * @return the text content of the element
+ */
+ public String getText() {
+ // XXX e.getTextContent() doesn't exsist under Android (Lukasz
+ // Wisniewski)
+ // / getTextContent() is now available in at least Android 2.2 if not
+ // earlier, so we'll keep using that
+ // return e.hasChildNodes() ? e.getFirstChild().getNodeValue() : null;
+ return e.getTextContent();
+ }
+
+ /**
+ * Checks if this element has a child element with the given name.
+ *
+ * @param name The child's name
+ * @return <code>true</code> if this element has a child element with the
+ * given name
+ */
+ public boolean hasChild(final String name) {
+ final NodeList list = e.getElementsByTagName(name);
+ for (int i = 0, j = list.getLength(); i < j; i++) {
+ final Node item = list.item(i);
+ if (item.getParentNode() == e) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the child element with the given name or <code>null</code> if it
+ * doesn't exist.
+ *
+ * @param name The child's name
+ * @return the child element or <code>null</code>
+ */
+ public DomElement getChild(final String name) {
+ final NodeList list = e.getElementsByTagName(name);
+ if (list.getLength() == 0) {
+ return null;
+ }
+ for (int i = 0, j = list.getLength(); i < j; i++) {
+ final Node item = list.item(i);
+ if (item.getParentNode() == e) {
+ return new DomElement((Element)item);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the text content of a child node with the given name. If no such
+ * child exists or the child does not have text content, <code>null</code>
+ * is returned.
+ *
+ * @param name The child's name
+ * @return the child's text content or <code>null</code>
+ */
+ public String getChildText(final String name) {
+ final DomElement child = getChild(name);
+ return child != null ? child.getText() : null;
+ }
+
+ /**
+ * @return all children of this element
+ */
+ public List<DomElement> getChildren() {
+ return getChildren("*");
+ }
+
+ /**
+ * Returns all children of this element with the given tag name.
+ *
+ * @param name The children's tag name
+ * @return all matching children
+ */
+ public List<DomElement> getChildren(final String name) {
+ final List<DomElement> l = new ArrayList<DomElement>();
+ final NodeList list = e.getElementsByTagName(name);
+ for (int i = 0; i < list.getLength(); i++) {
+ final Node node = list.item(i);
+ if (node.getParentNode() == e) {
+ l.add(new DomElement((Element)node));
+ }
+ }
+ return l;
+ }
+
+ /**
+ * Returns this element's tag name.
+ *
+ * @return the tag name
+ */
+ public String getTagName() {
+ return e.getTagName();
+ }
+}