Function.java 1.4 KB
package kernel.function;

import kernel.Cell;
import kernel.Formula;
import kernel.Grid;
import kernel.LanguageEnum;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

abstract public class Function implements Formula, Serializable {

    private static final long serialVersionUID = 1L;
    public Map<LanguageEnum, String> names = new HashMap<>();
    public List<Cell> listCells;

    public Function(List<Cell> listCells) {
        this.listCells = listCells;
    }

    abstract public double eval();

    public String getDevelopedFormula() {
        return names.get(Grid.language) + "("
                + this.listCells.stream()
                .map(Cell::getDevelopedFormula)
                .collect(Collectors.joining(",")) + ")";
    }

    public String toString() {
        return names.get(Grid.language) + "("
                + this.listCells.stream()
                .map(Cell::getId)
                .collect(Collectors.joining(",")) + ")";
    }

    public boolean createCycle(Cell cell) {
        if (!this.listCells.contains(cell))
            for (Cell currentCell : this.listCells)
                if (currentCell.containFormula() && currentCell.getFormula().createCycle(cell))
                    return true;

        return true;
    }

    public List<Cell> getUtilisedCells() {
        return this.listCells;
    }
}