package kernel.operation; import kernel.Cell; import kernel.Formula; import java.io.Serializable; import java.util.ArrayList; import java.util.List; abstract public class BinaryOperation implements Formula, Serializable { private static final long serialVersionUID = 1L; private Cell leftCell; private Cell rightCell; public BinaryOperation(Cell leftCell, Cell rightCell) { this.leftCell = leftCell; this.rightCell = rightCell; } abstract public double eval(); abstract public String getOperator(); public Cell getLeftCell() { return this.leftCell; } public Cell getRightCell() { return this.rightCell; } @Override public String getDevelopedFormula() { return "(" + this.leftCell.getDevelopedFormula() + this.getOperator() + this.rightCell.getDevelopedFormula() + ")"; } @Override public String toString() { return "(" + this.leftCell.getId() + this.getOperator() + this.rightCell.getId() + ")"; } @Override public boolean createCycle(Cell cell) { if (this.createCycleWith(this.leftCell, cell) || this.createCycleWith(this.rightCell, cell)) return true; return this.rightCell.equals(cell) || this.leftCell.equals(cell); } @Override public List getUtilisedCells() { List cells = new ArrayList<>(); cells.add(this.leftCell); cells.add(this.rightCell); return cells; } private boolean createCycleWith(Cell cell, Cell current) { return cell.containFormula() && cell.getFormula().createCycle(current); } }