package hudson.plugins.accurev.parsers.xml;
import hudson.plugins.accurev.AccurevLauncher.ICmdOutputXmlParser;
import hudson.plugins.accurev.AccurevLauncher.UnhandledAccurevCommandOutput;
import hudson.plugins.accurev.AccurevTransaction;
import hudson.plugins.accurev.ParseChangeLog;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.List;
public final class ParseHistory implements ICmdOutputXmlParser<Boolean, List<AccurevTransaction>> {
public Boolean parse(XmlPullParser parser, List<AccurevTransaction> context) throws UnhandledAccurevCommandOutput,
IOException, XmlPullParserException {
AccurevTransaction resultTransaction = null;
while (parser.next() != XmlPullParser.END_DOCUMENT) {
if (parser.getEventType() == XmlPullParser.START_TAG) {
if ("transaction".equalsIgnoreCase(parser.getName())) {
resultTransaction = new AccurevTransaction();
// parse transaction-values
resultTransaction.setId((parser.getAttributeValue("", "id")));
resultTransaction.setAction(parser.getAttributeValue("", "type"));
resultTransaction.setDate(ParseChangeLog.convertAccurevTimestamp(parser.getAttributeValue("",
"time")));
resultTransaction.setUser(parser.getAttributeValue("", "user"));
} else if ("comment".equalsIgnoreCase(parser.getName()) && resultTransaction != null) {
// parse comments
resultTransaction.setMsg(parser.nextText());
} else if ("version".equalsIgnoreCase(parser.getName()) && resultTransaction != null) {
// parse path & convert it to standard format
String path = parser.getAttributeValue("", "path");
if (path != null) {
path = path.replace("\\", "/");
if (path.startsWith("/./")) {
path = path.substring(3);
}
}
resultTransaction.addAffectedPath(path);
}
}
}
context.add(resultTransaction);
return resultTransaction != null;
}
public Boolean parseAll(XmlPullParser parser, List<AccurevTransaction> context) throws IOException, XmlPullParserException {
AccurevTransaction resultTransaction = null;
while (parser.next() != XmlPullParser.END_DOCUMENT) {
if (parser.getEventType() == XmlPullParser.START_TAG) {
if ("transaction".equalsIgnoreCase(parser.getName())) {
resultTransaction = new AccurevTransaction();
// parse transaction-values
resultTransaction.setId((parser.getAttributeValue("", "id")));
resultTransaction.setAction(parser.getAttributeValue("", "type"));
resultTransaction.setDate(ParseChangeLog.convertAccurevTimestamp(parser.getAttributeValue("",
"time")));
resultTransaction.setUser(parser.getAttributeValue("", "user"));
} else if ("comment".equalsIgnoreCase(parser.getName()) && resultTransaction != null) {
// parse comments
resultTransaction.setMsg(parser.nextText());
} else if ("version".equalsIgnoreCase(parser.getName()) && resultTransaction != null) {
String path = parser.getAttributeValue("", "path");
if (path != null)
resultTransaction.addAffectedPath(path);
}
}
context.add(resultTransaction);
}
return context != null;
}
}