Function.java 1.25 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;
		} else
			return true;
		
		return false;
	}
	
	public List<Cell> getUtilisedCells() {
		return this.listCells;
	}
}