1package org.testng.xml;
2
3import org.testng.TestNGException;
4import org.testng.reporters.XMLStringBuffer;
5import org.testng.xml.dom.OnElement;
6
7import java.util.Properties;
8
9/**
10 * This class describes the tag <method-selector>  in testng.xml.
11 *
12 * Created on Sep 26, 2005
13 * @author cbeust
14 * @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a>
15 */
16public class XmlMethodSelector {
17  // Either this:
18  private String m_className;
19  private int m_priority;
20
21  // Or that:
22  private XmlScript m_script = new XmlScript();
23
24  // For YAML
25  public void setClassName(String s) {
26    m_className = s;
27  }
28
29  public String getClassName() {
30    return m_className;
31  }
32
33  // For YAML
34  @OnElement(tag = "selector-class", attributes = { "name", "priority" })
35  public void setElement(String name, String priority) {
36    setName(name);
37    setPriority(Integer.parseInt(priority));
38  }
39
40  public void setName(String name) {
41    m_className = name;
42  }
43
44  public void setScript(XmlScript script) {
45    m_script = script;
46  }
47
48  /**
49   * @return Returns the expression.
50   */
51  public String getExpression() {
52    return m_script.getScript();
53  }
54
55  /**
56   * @param expression The expression to set.
57   */
58  public void setExpression(String expression) {
59    m_script.setScript(expression);
60  }
61
62  /**
63   * @return Returns the language.
64   */
65  public String getLanguage() {
66    return m_script.getLanguage();
67  }
68
69  /**
70   * @param language The language to set.
71   */
72//  @OnElement(tag = "script", attributes = "language")
73  public void setLanguage(String language) {
74    m_script.setLanguage(language);
75//    m_language = language;
76  }
77
78  public int getPriority() {
79    return m_priority;
80  }
81
82  public void setPriority(int priority) {
83    m_priority = priority;
84  }
85
86  private void ppp(String s) {
87    System.out.println("[XmlMethodSelector] " + s);
88  }
89
90  public String toXml(String indent) {
91    XMLStringBuffer xsb = new XMLStringBuffer(indent);
92
93    xsb.push("method-selector");
94
95    if (null != m_className) {
96      Properties clsProp = new Properties();
97      clsProp.setProperty("name", getClassName());
98      if(getPriority() != -1) {
99        clsProp.setProperty("priority", String.valueOf(getPriority()));
100      }
101      xsb.addEmptyElement("selector-class", clsProp);
102    }
103    else if (getLanguage() != null) {
104      Properties scriptProp = new Properties();
105      scriptProp.setProperty("language", getLanguage());
106      xsb.push("script", scriptProp);
107      xsb.addCDATA(getExpression());
108      xsb.pop("script");
109    }
110    else {
111      throw new TestNGException("Invalid Method Selector:  found neither class name nor language");
112    }
113
114    xsb.pop("method-selector");
115
116    return xsb.toXML();
117  }
118
119  @Override
120  public int hashCode() {
121    final int prime = 31;
122    int result = 1;
123    result = prime * result
124        + ((m_className == null) ? 0 : m_className.hashCode());
125    result = prime * result
126        + ((getExpression() == null) ? 0 : getExpression().hashCode());
127    result = prime * result
128        + ((getLanguage() == null) ? 0 : getLanguage().hashCode());
129    result = prime * result + m_priority;
130    return result;
131  }
132
133  @Override
134  public boolean equals(Object obj) {
135    if (this == obj)
136      return true;
137    if (obj == null)
138      return XmlSuite.f();
139    if (getClass() != obj.getClass())
140      return XmlSuite.f();
141    XmlMethodSelector other = (XmlMethodSelector) obj;
142    if (m_className == null) {
143      if (other.m_className != null)
144        return XmlSuite.f();
145    } else if (!m_className.equals(other.m_className))
146      return XmlSuite.f();
147    if (getExpression() == null) {
148      if (other.getExpression() != null)
149        return XmlSuite.f();
150    } else if (!getExpression().equals(other.getExpression()))
151      return XmlSuite.f();
152    if (getLanguage() == null) {
153      if (other.getLanguage() != null)
154        return XmlSuite.f();
155    } else if (!getLanguage().equals(other.getLanguage()))
156      return XmlSuite.f();
157    if (m_priority != other.m_priority)
158      return XmlSuite.f();
159    return true;
160  }
161}
162