
org.neo4j.build.plugins.changes.ChangelogExtractor Maven / Gradle / Ivy
The newest version!
package org.neo4j.build.plugins.changes;
import java.util.ArrayList;
import java.util.List;
public class ChangelogExtractor {
private enum ParseMode {SCANNING,EXTRACTING,DONE};
private List logLines;
private VersionMatcher versionMatcher;
private LineEvaluator lineEvaluator;
public ChangelogExtractor(List logLines,
VersionMatcher versionMatcher, LineEvaluator lineEvaluator)
{
this.logLines = logLines;
this.versionMatcher = versionMatcher;
this.lineEvaluator = lineEvaluator;
}
public List runExtraction(boolean includeHeadlines)
{
ParseMode mode = ParseMode.SCANNING;
List output = new ArrayList();
String prevLine = "";
for(String line : logLines) {
mode = processLine(prevLine, line, output, mode, includeHeadlines);
prevLine = line;
}
if(!output.get(output.size() - 1).equals("")) {
output.add("");
}
if(!output.get(output.size() - 2).equals("")) {
output.add("");
}
return output;
}
private ParseMode processLine(String prevLine, String line, List output,
ParseMode mode, boolean includeHeadlines)
{
switch(mode) {
case SCANNING:
if(isSectionStart(line) && isVersionHeadline(prevLine, versionMatcher)) {
mode = ParseMode.EXTRACTING;
if(includeHeadlines) {
output.add(prevLine);
}
}
break;
case EXTRACTING:
if(isSectionStart(line)) {
// Hit new section
output.add("");
mode = ParseMode.SCANNING;
return processLine(prevLine, line, output, mode, includeHeadlines);
} else if(prevLine.trim().length() > 0) {
if(includeHeadlines || !isSectionStart(prevLine)) {
if(lineEvaluator.include(prevLine)) {
output.add(prevLine);
}
}
}
break;
}
return mode;
}
private boolean isVersionHeadline(String line, VersionMatcher versionMatcher)
{
return versionMatcher.test(line.trim().split(" ")[0]);
}
private boolean isSectionStart(String line)
{
return line.startsWith("----");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy