All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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