Refactoring.java

package edu.odu.cs.cs350;

import java.util.List;

import edu.odu.cs.cs350.Interfaces.RefactoringInterface;
import edu.odu.cs.cs350.Interfaces.TokenInterface;

/**
 * A refactoring object contains the information needed by
 * Output to print the refactoring suggestion and its associated metadata.
 */
public class Refactoring implements RefactoringInterface, Comparable<Refactoring> {

    public int numberOfTokens;
    public String absolutePath;
    public int lineNumber;
    public int columnNumber;
    public String tokenList;
    public int opportunityValue;

    public Refactoring(List<TokenInterface> current, List<TokenInterface> list) {
        numberOfTokens = current.size();
        absolutePath = current.get(0).getAbsolutePath();
        lineNumber = Integer.parseInt(current.get(0).getLineNumber());
        columnNumber = Integer.parseInt(current.get(0).getColumnNumber());
        tokenList = current.toString();
    }

    public Refactoring(List<? extends TokenInterface> candidate, int opportunityValue) {
        this.numberOfTokens = candidate.size();
        this.absolutePath = candidate.get(0).getAbsolutePath();
        this.lineNumber = Integer.parseInt(candidate.get(0).getLineNumber());
        this.columnNumber = Integer.parseInt(candidate.get(0).getColumnNumber());
        this.tokenList = "";
        for(var s : candidate) this.tokenList += s.getLexeme() + " ";
        // this.tokenList = candidate.toString();
        this.opportunityValue = opportunityValue;
    }

    @Override
    public String getNumberOfTokens() {
        return Integer.toString(numberOfTokens);
    }

    @Override
    public String getAbsolutePath() {
        return absolutePath;
    }

    @Override
    public String getLineNumber() {
        return Integer.toString(lineNumber);
    }

    @Override
    public String getColumnNumber() {
        return Integer.toString(columnNumber-1);
    }

    @Override
    public String getTokenList() {
        return tokenList;
    }

    @Override
    public int compareTo(Refactoring o) {
        return o.opportunityValue - this.opportunityValue;
    }

    @Override
    public String toString() {
        String result = "";

        result += numberOfTokens + " ";
        result += "ABSPATH" + " ";
        result += lineNumber + " ";
        result += columnNumber + " ";
        result += tokenList + " ";
        result += opportunityValue;

        return result;
    }

    @Override
    public int getOpportunityValue() {
        return this.opportunityValue;
    }
}