Commit 5731029f5105ddcc2b3a00debad1bf4a725e27e1

Authored by Remi
1 parent 0c16a45a

merge

.gitignore
... ... @@ -3,3 +3,5 @@
3 3 /out
4 4 /bin
5 5 /.metadata
  6 +.project
  7 +.classpath
... ...
.project deleted
... ... @@ -1,17 +0,0 @@
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<projectDescription>
3   - <name>projetPPO_taniel_andjembe</name>
4   - <comment></comment>
5   - <projects>
6   - </projects>
7   - <buildSpec>
8   - <buildCommand>
9   - <name>org.eclipse.jdt.core.javabuilder</name>
10   - <arguments>
11   - </arguments>
12   - </buildCommand>
13   - </buildSpec>
14   - <natures>
15   - <nature>org.eclipse.jdt.core.javanature</nature>
16   - </natures>
17   -</projectDescription>
src/app/Application.java
... ... @@ -3,6 +3,7 @@ package app;
3 3 import kernel.Cell;
4 4 import kernel.Grid;
5 5 import kernel.exception.CellNotFoundException;
  6 +import kernel.exception.CreateCycleException;
6 7 import kernel.function.Average;
7 8 import kernel.function.Sum;
8 9  
... ... @@ -34,6 +35,8 @@ public class Application {
34 35 grid.createCell("B", 2, new Average(averageList));
35 36 } catch (CellNotFoundException exception) {
36 37 System.out.println(exception.getMessage());
  38 + } catch (CreateCycleException exception) {
  39 + System.out.println(exception.toString());
37 40 }
38 41  
39 42 // Affichage
... ... @@ -50,5 +53,16 @@ public class Application {
50 53 System.out.println("Affichage des formules développées :");
51 54 for (Cell cell : cells)
52 55 System.out.println(cell.getId() + ": " + cell.getDevelopedFormula());
  56 +
  57 + // Propagation
  58 + try {
  59 + grid.setValue("A", 1, 20.);
  60 + } catch (CellNotFoundException exception) {
  61 + System.out.println("exception");
  62 + }
  63 +
  64 + System.out.println("Affichage des valeurs après modification :");
  65 + for (Cell cell : cells)
  66 + System.out.println(cell.getId() + ": " + cell.getValue());
53 67 }
54 68 }
... ...
src/kernel/Cell.java
1 1 package kernel;
2 2  
  3 +import kernel.exception.CreateCycleException;
  4 +
3 5 import java.util.ArrayList;
4 6 import java.util.List;
5 7  
... ... @@ -14,10 +16,10 @@ public class Cell {
14 16 public Cell(String column, Integer line, Double value) {
15 17 this.column = column;
16 18 this.line = line;
17   - this.value = value;
  19 + this.setValue(value);
18 20 }
19 21  
20   - public Cell(String column, Integer line, Formula formula) {
  22 + public Cell(String column, Integer line, Formula formula) throws CreateCycleException {
21 23 this.column = column;
22 24 this.line = line;
23 25 this.setFormula(formula);
... ... @@ -48,27 +50,36 @@ public class Cell {
48 50 }
49 51  
50 52 public void updateValue() {
51   - this.value = this.formula.eval();
  53 + if (this.containFormula())
  54 + this.value = this.formula.eval();
52 55 }
53 56  
54 57 public Boolean containFormula() {
55 58 return this.formula != null;
56 59 }
57 60  
58   - public void setFormula(Formula formula) {
59   -
60   - this.formula = formula;
61   - this.updateValue();
62   - this.spread();
  61 + public void setFormula(Formula formula) throws CreateCycleException {
  62 + if (formula.createCycle(this))
  63 + throw new CreateCycleException();
  64 + else {
  65 + this.formula = formula;
  66 + for (Cell cell : this.formula.getUtilisedCells())
  67 + cell.usedIn.add(this);
  68 + this.updateValue();
  69 + this.spreadValue();
  70 + }
63 71 }
64 72  
65 73 public void setValue(Double value) {
66 74 this.value = value;
67   - this.spread();
  75 + this.formula = null;
  76 + this.spreadValue();
68 77 }
69 78  
70   - private void spread() {
71   - for (Cell cell : this.usedIn)
  79 + private void spreadValue() {
  80 + for (Cell cell : this.usedIn) {
72 81 cell.updateValue();
  82 + cell.spreadValue();
  83 + }
73 84 }
74 85 }
... ...
src/kernel/Formula.java
1 1 package kernel;
2 2  
3   -abstract public class Formula {
  3 +import java.util.List;
4 4  
5   - abstract public String getDevelopedFormula();
  5 +public interface Formula {
6 6  
7   - abstract public String toString();
  7 + String getDevelopedFormula();
8 8  
9   - abstract public Double eval();
  9 + String toString();
10 10  
11   - abstract public Boolean createCycle(Cell cell);
  11 + Double eval();
  12 +
  13 + Boolean createCycle(Cell cell);
  14 +
  15 + List<Cell> getUtilisedCells();
12 16 }
... ...
src/kernel/Grid.java
1 1 package kernel;
2 2  
3 3 import kernel.exception.CellNotFoundException;
  4 +import kernel.exception.CreateCycleException;
4 5  
5 6 import java.util.ArrayList;
6 7 import java.util.HashMap;
... ... @@ -21,7 +22,7 @@ public class Grid {
21 22 return id;
22 23 }
23 24  
24   - public String createCell(String column, Integer line, Formula formula) {
  25 + public String createCell(String column, Integer line, Formula formula) throws CreateCycleException {
25 26 String id = this.getCellId(column, line);
26 27 Cell cell = new Cell(column, line, formula);
27 28  
... ... @@ -34,7 +35,8 @@ public class Grid {
34 35 this.getCell(column, line).setValue(value);
35 36 }
36 37  
37   - public void setFormula(String column, Integer line, Formula formula) throws CellNotFoundException {
  38 + public void setFormula(String column, Integer line, Formula formula) throws CellNotFoundException,
  39 + CreateCycleException {
38 40 this.getCell(column, line).setFormula(formula);
39 41 }
40 42  
... ...
src/kernel/exception/CreateCycleException.java 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +package kernel.exception;
  2 +
  3 +public class CreateCycleException extends Exception {
  4 +}
... ...
src/kernel/exception/DivisionByZeroException.java deleted
... ... @@ -1,5 +0,0 @@
1   -package kernel.exception;
2   -
3   -public class DivisionByZeroException extends Exception{
4   -
5   -}
src/kernel/function/Function.java
... ... @@ -6,16 +6,15 @@ import kernel.Grid;
6 6 import kernel.LanguageEnum;
7 7  
8 8 import java.util.HashMap;
  9 +import java.util.Iterator;
9 10 import java.util.List;
10 11 import java.util.Map;
11 12 import java.util.stream.Collectors;
12   -import java.util.ArrayList;
13   -import java.util.Iterator;
14 13  
15   -abstract public class Function extends Formula {
  14 +abstract public class Function implements Formula {
16 15  
17   - protected Map<LanguageEnum, String> names = new HashMap<>();
18   - protected List<Cell> listCells;
  16 + public Map<LanguageEnum, String> names = new HashMap<>();
  17 + public List<Cell> listCells;
19 18  
20 19 public Function(List<Cell> listCells) {
21 20 this.listCells = listCells;
... ... @@ -38,21 +37,21 @@ abstract public class Function extends Formula {
38 37 }
39 38  
40 39 public Boolean createCycle(Cell cell) {
41   -
42   - boolean cycle=false;
43   - if (!this.listCells.contains(cell)){
44   - Iterator<Cell> it=listCells.iterator();
45   - while (it.hasNext() &&!cycle){
46   - if (it.next().containFormula()){
47   - cycle=it.next().getFormula().createCycle(cell);
48   - }
49   - }
50   - return cycle;
51   -
52   - }
53   - else
54   - return true;
55   -
56   -
  40 + boolean cycle = false;
  41 + if (!this.listCells.contains(cell)) {
  42 + Iterator<Cell> it = listCells.iterator();
  43 + while (it.hasNext() && !cycle) {
  44 + Cell currentCell = it.next();
  45 + if (currentCell.containFormula()) {
  46 + cycle = currentCell.getFormula().createCycle(cell);
  47 + }
  48 + }
  49 + return cycle;
  50 + } else
  51 + return true;
  52 + }
  53 +
  54 + public List<Cell> getUtilisedCells() {
  55 + return this.listCells;
57 56 }
58 57 }
... ...
src/kernel/operation/Addition.java
1 1 package kernel.operation;
2 2  
3   -import kernel.BinaryOperation;
4 3 import kernel.Cell;
5 4  
6 5 public class Addition extends BinaryOperation {
... ...
src/kernel/BinaryOperation.java renamed to src/kernel/operation/BinaryOperation.java
1   -package kernel;
  1 +package kernel.operation;
2 2  
3   -abstract public class BinaryOperation extends Formula {
  3 +import kernel.Cell;
  4 +import kernel.Formula;
  5 +
  6 +import java.util.ArrayList;
  7 +import java.util.List;
  8 +
  9 +abstract public class BinaryOperation implements Formula {
4 10  
5 11 protected Cell leftCell;
6 12 protected Cell rightCell;
... ... @@ -11,16 +17,16 @@ abstract public class BinaryOperation extends Formula {
11 17 this.rightCell = rightCell;
12 18 }
13 19  
  20 + abstract public Double eval();
  21 +
14 22 public String getDevelopedFormula() {
15   - return this.leftCell.getDevelopedFormula() + " " + this.operator + " " + this.rightCell.getDevelopedFormula();
  23 + return this.leftCell.getDevelopedFormula() + this.operator + this.rightCell.getDevelopedFormula();
16 24 }
17 25  
18 26 public String toString() {
19   - return this.leftCell.toString() + " " + this.operator + " " + this.rightCell.toString();
  27 + return this.leftCell.getId() + this.operator + this.rightCell.getId();
20 28 }
21 29  
22   - abstract public Double eval();
23   -
24 30 public Boolean createCycle(Cell cell) {
25 31 if (this.leftCell.containFormula() && !this.rightCell.containFormula())
26 32 return this.leftCell.getFormula().createCycle(cell);
... ... @@ -37,4 +43,12 @@ abstract public class BinaryOperation extends Formula {
37 43  
38 44 }
39 45 }
  46 +
  47 + public List<Cell> getUtilisedCells() {
  48 + List<Cell> cells = new ArrayList<>();
  49 + cells.add(this.leftCell);
  50 + cells.add(this.rightCell);
  51 +
  52 + return cells;
  53 + }
40 54 }
... ...
src/kernel/operation/Division.java
1 1 package kernel.operation;
2 2  
3   -import kernel.BinaryOperation;
4 3 import kernel.Cell;
5 4  
6 5 public class Division extends BinaryOperation {
... ...
src/kernel/operation/Multiplication.java
1 1 package kernel.operation;
2 2  
3   -import kernel.BinaryOperation;
4 3 import kernel.Cell;
5 4  
6 5 public class Multiplication extends BinaryOperation {
... ...
src/kernel/operation/Subtraction.java
1 1 package kernel.operation;
2 2  
3   -import kernel.BinaryOperation;
4 3 import kernel.Cell;
5 4  
6 5 public class Subtraction extends BinaryOperation {
... ...