| package org.testng.xml.dom; |
| |
| import org.testng.collections.Lists; |
| import org.w3c.dom.Element; |
| import org.w3c.dom.NodeList; |
| |
| import java.lang.annotation.Annotation; |
| import java.util.List; |
| |
| public class Wrapper { |
| |
| private OnElement m_onElement; |
| private OnElementList m_onElementList; |
| private Tag m_tag; |
| private TagContent m_tagContent; |
| private Object m_bean; |
| |
| public Wrapper(Annotation a, Object bean) { |
| m_bean = bean; |
| if (a instanceof OnElement) m_onElement = (OnElement) a; |
| else if (a instanceof OnElementList) m_onElementList = (OnElementList) a; |
| else if (a instanceof Tag) m_tag = (Tag) a; |
| else if (a instanceof TagContent) m_tagContent = (TagContent) a; |
| else throw new RuntimeException("Illegal annotation " + a); |
| } |
| |
| public String getTagName() { |
| if (m_onElement != null) return m_onElement.tag(); |
| else if (m_onElementList != null) return m_onElementList.tag(); |
| else return m_tag.name(); |
| } |
| |
| public List<Object[]> getParameters(Element element) { |
| List<Object[]> allParameters = Lists.newArrayList(); |
| if (m_onElement != null) { |
| List<Object> result = Lists.newArrayList(); |
| for (String attributeName : m_onElement.attributes()) { |
| result.add(element.getAttribute(attributeName)); |
| } |
| allParameters.add(result.toArray()); |
| } else if (m_tag != null) { |
| List<Object> result = Lists.newArrayList(); |
| result.add(m_bean); |
| allParameters.add(result.toArray()); |
| } else { |
| NodeList childNodes = element.getChildNodes(); |
| for (int i = 0; i < childNodes.getLength(); i++) { |
| if (childNodes.item(i).hasAttributes()) { |
| Element item = (Element) childNodes.item(i); |
| List<Object> result = Lists.newArrayList(); |
| for (String attributeName : m_onElementList.attributes()) { |
| result.add(item.getAttribute(attributeName)); |
| } |
| allParameters.add(result.toArray()); |
| } |
| } |
| } |
| |
| return allParameters; |
| } |
| } |