package net.sourceforge.cruisecontrol.dashboard.saxhandler;
import net.sourceforge.cruisecontrol.dashboard.BuildMessage;
import net.sourceforge.cruisecontrol.dashboard.MessageLevel;
import org.apache.commons.lang.StringUtils;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.util.Iterator;
public class MessageExtractor extends SAXBasedExtractor {
private boolean readingMessage;
private String priority;
private List messages = new ArrayList();
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if ("message".equals(qName)) {
readingMessage = true;
priority = attributes.getValue("priority");
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
if (readingMessage) {
String text = new String(ch, start, length);
if (StringUtils.isBlank(text)) {
return;
}
messages.add(text);
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if ("message".equals(qName)) {
readingMessage = false;
}
}
public void report(Map resultSet) {
if (!messages.isEmpty()) {
String text = "";
for (Iterator i = messages.iterator(); i.hasNext();) {
text += (String) i.next();
}
resultSet.put("message", new BuildMessage(text, MessageLevel.getLevelForPriority(priority)));
}
}
}