BinaryOperation.java 1.46 KB
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<Cell> getUtilisedCells() {
		List<Cell> 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);
	}
}