blob: de7f362ccb62fdd570a841ce5826c7e67853fe54 [file] [log] [blame]
package org.testng;
import org.testng.collections.Lists;
import org.testng.internal.ClassHelper;
import org.testng.internal.PropertyUtils;
import org.testng.internal.Utils;
import java.util.List;
/**
* Stores the information regarding the configuration of a pluggable report listener. Used also
* in conjunction with the <reporter> sub-element of the Ant task
*
* NOTE: this class needs to be public. It's used by TestNG Ant task
*
* @author Cosmin Marginean, Apr 12, 2007
*/
public class ReporterConfig {
/**
* The class name of the reporter listener
*/
private String m_className;
/**
* The properties of the reporter listener
*/
private List<Property> m_properties = Lists.newArrayList();
public void addProperty(Property property) {
m_properties.add(property);
}
public List<Property> getProperties() {
return m_properties;
}
public String getClassName() {
return m_className;
}
public void setClassName(String className) {
this.m_className = className;
}
public String serialize() {
StringBuffer sb = new StringBuffer();
sb.append(m_className);
if (!m_properties.isEmpty()) {
sb.append(":");
for (int i = 0; i < m_properties.size(); i++) {
ReporterConfig.Property property = m_properties.get(i);
sb.append(property.getName());
sb.append("=");
sb.append(property.getValue());
if (i < m_properties.size() - 1) {
sb.append(",");
}
}
}
return sb.toString();
}
public static ReporterConfig deserialize(String inputString) {
ReporterConfig reporterConfig = null;
if (!Utils.isStringEmpty(inputString)) {
reporterConfig = new ReporterConfig();
int clsNameEndIndex = inputString.indexOf(":");
if (clsNameEndIndex == -1) {
reporterConfig.setClassName(inputString);
} else {
reporterConfig.setClassName(inputString.substring(0, clsNameEndIndex));
String propString = inputString.substring(clsNameEndIndex + 1, inputString.length());
String[] props = propString.split(",");
if ((props != null) && (props.length > 0)) {
for (String prop : props) {
String[] propNameAndVal = prop.split("=");
if ((propNameAndVal != null) && (propNameAndVal.length == 2)) {
Property property = new Property();
property.setName(propNameAndVal[0]);
property.setValue(propNameAndVal[1]);
reporterConfig.addProperty(property);
}
}
}
}
}
return reporterConfig;
}
/**
* Creates a reporter based on the current configuration
*/
public Object newReporterInstance() {
Object result = null;
Class reporterClass = ClassHelper.forName(m_className);
if (reporterClass != null) {
result = ClassHelper.newInstance(reporterClass);
for (ReporterConfig.Property property : m_properties) {
PropertyUtils.setProperty(result, property.getName(), property.getValue());
}
}
return result;
}
public static class Property {
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
@Override
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("\nClass = " + m_className);
for (Property prop : m_properties) {
buf.append("\n\t " + prop.getName() + "=" + prop.getValue());
}
return buf.toString();
}
}