package org.hudson.serena;
import hudson.model.User;
import hudson.model.AbstractBuild;
import hudson.scm.ChangeLogSet;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;
/**
* Stores update path and Dimensions Item object key.
*
* @author Jose Noheda [jose.noheda@gmail.com]
*/
public final class DimensionsChangeLogSet extends ChangeLogSet<ChangeLogSet.Entry> {
private static final Logger LOGGER = Logger.getLogger(DimensionsChangeLogSet.class.getName());
private List<ChangeLogSet.Entry> items = new ArrayList<Entry>();
public DimensionsChangeLogSet(final AbstractBuild build, final File changelogFile) {
super(build);
String line;
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(changelogFile));
while((line = reader.readLine()) != null) {
if (line.indexOf("Updated") >= 0) {
final String path = line.substring(line.indexOf('\'') + 1, line.indexOf("' using"));
final String item = line.substring(line.indexOf("Item"));
items.add(new ChangeLogSet.Entry() {
@Override public String getMsg() {
return "Updated [" + path + "];" + item;
}
@Override public User getAuthor() {
return null;
}
@Override public Collection<String> getAffectedPaths() {
return Arrays.asList(path);
}
});
}
}
} catch (IOException ioe) {
LOGGER.warning("Unexpected exception reading Dimensions change log file: " + ioe.getMessage());
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException ioe) {
LOGGER.warning("Could not close Dimensions change log file: " + ioe.getMessage());
}
}
}
@Override public boolean isEmptySet() {
return items.size() == 0;
}
@Override public Iterator iterator() {
return items.iterator();
}
}