package hudson.plugins.tfs;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.digester.Digester;
import org.apache.commons.io.IOUtils;
import org.xml.sax.SAXException;
import hudson.model.AbstractBuild;
import hudson.plugins.tfs.model.ChangeLogSet;
import hudson.plugins.tfs.model.ChangeSet;
import hudson.scm.ChangeLogParser;
import hudson.util.Digester2;
/**
* TeamFoundation change log reader.
*
* @author Erik Ramfelt
*/
public class ChangeSetReader extends ChangeLogParser {
@Override
public ChangeLogSet parse(AbstractBuild build, File changelogFile) throws IOException, SAXException {
FileReader reader = new FileReader(changelogFile);
try {
return parse(build, reader);
} finally {
IOUtils.closeQuietly(reader);
}
}
public ChangeLogSet parse(AbstractBuild<?,?> build, Reader reader) throws IOException, SAXException {
List<ChangeSet> changesetList = new ArrayList<ChangeSet>();
Digester digester = new Digester2();
digester.push(changesetList);
digester.addObjectCreate("*/changeset", ChangeSet.class);
digester.addSetProperties("*/changeset");
digester.addBeanPropertySetter("*/changeset/date", "dateStr");
digester.addBeanPropertySetter("*/changeset/user");
digester.addBeanPropertySetter("*/changeset/checked_in_by_user", "checkedInBy");
digester.addBeanPropertySetter("*/changeset/comment");
digester.addSetNext("*/changeset", "add");
digester.addObjectCreate("*/changeset/items/item", ChangeSet.Item.class);
digester.addSetProperties("*/changeset/items/item");
digester.addBeanPropertySetter("*/changeset/items/item", "path");
digester.addSetNext("*/changeset/items/item", "add");
digester.parse(reader);
return new ChangeLogSet(build, changesetList);
}
}