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.leftCell.containFormula() && !this.rightCell.containFormula()) return this.leftCell.getFormula().createCycle(cell); if (!this.leftCell.containFormula() && this.rightCell.containFormula()) return this.rightCell.getFormula().createCycle(cell); if (this.leftCell.containFormula() && this.rightCell.containFormula()) return this.leftCell.getFormula().createCycle(cell) && this.rightCell.getFormula().createCycle(cell); return (cell.getId().equals(this.rightCell.getId()) || cell.getId().equals(this.leftCell.getId())); } @Override public List getUtilisedCells() { List cells = new ArrayList<>(); cells.add(this.leftCell); cells.add(this.rightCell); return cells; } }