Grid.java 3.16 KB
package kernel;

import kernel.exception.CellNotFoundException;
import kernel.exception.CreateCycleException;
import kernel.exception.InvalidIntervalException;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Grid implements Serializable {
	
	private static final long serialVersionUID = 1L;
	private static final int MAX_LIGNES = 20;
	private static final String MAX_COLONNES = "Z";
	private Map<String, Cell> cells = new HashMap<>();
	public static LanguageEnum language = LanguageEnum.FR;

	
	public void createCell(String column, int line, double value) throws InvalidIntervalException {
		column = column.toUpperCase();

		if (!validateInterval(column, line))
			throw new InvalidIntervalException();
		String id = this.getCellId(column, line);
		Cell cell = new Cell(column, line, value);
		this.cells.put(id, cell);

	}
	
	public void createCell(String column, int line, Formula formula) throws CreateCycleException, InvalidIntervalException {
		column = column.toUpperCase();

		if (!validateInterval(column, line))
			throw new InvalidIntervalException();
		String id = this.getCellId(column, line);
		Cell cell = new Cell(column, line, formula);
		this.cells.put(id, cell);

	}
	
	public void setValue(String column, int line, double value) throws CellNotFoundException {
		this.getCell(column, line).setValue(value);
	}
	
	public void setFormula(String column, int line, Formula formula) throws CellNotFoundException,
			CreateCycleException {
		this.getCell(column, line).setFormula(formula);
	}
	
	public Cell getCell(String column, int line) throws CellNotFoundException {
		Cell cell = this.cells.get(this.getCellId(column, line));
		
		if (cell != null)
			return cell;
		else
			throw new CellNotFoundException();
	}
	
	public List<Cell> getCells() {
		return new ArrayList<>(this.cells.values());
	}
	
	public List<String> getCellsId() {
		return new ArrayList<>(this.cells.keySet());
	}
	
	public double getValue(String column, int line) throws CellNotFoundException {
		return this.getCell(column, line).getValue();
	}
	
	public String getFormulaAsString(String column, int line) throws CellNotFoundException {
		return this.getCell(column, line).toString();
	}
	
	public String getDevelopedFormula(String column, int line) throws CellNotFoundException {
		return this.getCell(column, line).getDevelopedFormula();
	}
	
	private String getCellId(String column, int line) {
		return column + line;
	}
	
	
	public int getTotalColumn() {
		return MAX_COLONNES.charAt(0) - (int) 'A' + 1;
		//return convertStringToInt(MAX_COLONNES);
	}
	
	public int getTotalLine() {
		return MAX_LIGNES;
	}
	
	private boolean validateInterval(String column, int line) {
		return line >= 1 && line <= MAX_LIGNES && convertStringToInt(column)>=convertStringToInt("A") && convertStringToInt(column)<=convertStringToInt(MAX_COLONNES);
	}
	
	private int convertStringToInt(String str){
		int ascii=0;
		for(int i = 0; i < str.length(); i++){   // while counting characters if less than the length add one        
			char character = str.charAt(i); // start on the first character
			ascii = ascii+(int) character;
		        
		}
		return ascii;
	}
	
}