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 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 getCells() { return new ArrayList<>(this.cells.values()); } public List 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; } }