Blame view

src/kernel/Cell.java 2.02 KB
2e8fbd04   Remi   global refactor
1
  package kernel;
d8507aee   [mandjemb]   Fichiers
2
  
5731029f   Remi   merge
3
  import kernel.exception.CreateCycleException;
4186cd92   Remi   fix tests
4
  import kernel.exception.InvalidIntervalException;
5731029f   Remi   merge
5
  
eb07e5e3   [mandjemb]   avec serialisation
6
  import java.io.Serializable;
8112a2dd   Remi   merge
7
8
  import java.util.ArrayList;
  import java.util.List;
d8507aee   [mandjemb]   Fichiers
9
  
218ff5c4   [mandjemb]   SERIALIZATION 2.0
10
  public class Cell implements Serializable {
4186cd92   Remi   fix tests
11
12
  	
  	private static final long serialVersionUID = 1L;
23982881   [mandjemb]   update ihm
13
  	
4186cd92   Remi   fix tests
14
15
16
17
18
19
20
  	
  	private String column;
  	private int line;
  	private double value;
  	private Formula formula;
  	private List<Cell> usedIn = new ArrayList<>();
  	
23982881   [mandjemb]   update ihm
21
22
23
  	public Cell(String column, int line, double value) {
  		
  		
4186cd92   Remi   fix tests
24
25
26
27
28
29
30
  		
  		this.column = column;
  		this.line = line;
  		this.setValue(value);
  	}
  	
  	public Cell(String column, int line, Formula formula)
23982881   [mandjemb]   update ihm
31
32
  			throws CreateCycleException {
  
4186cd92   Remi   fix tests
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
  		
  		this.column = column;
  		this.line = line;
  		this.setFormula(formula);
  	}
  	
  	public double getValue() {
  		return this.value;
  	}
  	
  	public Formula getFormula() {
  		return this.formula;
  	}
  	
  	public String getDevelopedFormula() {
  		return this.containFormula() ? this.formula.getDevelopedFormula() : this.getId();
  	}
  	
  	public String getId() {
  		return this.column + this.line;
  	}
  	
  	public List<Cell> getUsedIn() {
  		return this.usedIn;
  	}
  	
  	public String toString() {
  		return this.containFormula() ? this.formula.toString() : this.getId();
  	}
  	
  	public void updateValue() {
  		if (this.containFormula())
  			this.value = this.formula.eval();
  	}
  	
02c44758   Remi   finish ihm
68
69
70
71
72
73
74
  	public void updateUsedIn() {
  		if (this.containFormula()) {
  			for (Cell cell : this.formula.getUtilisedCells())
  				cell.getUsedIn().remove(this);
  		}
  	}
  	
4186cd92   Remi   fix tests
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
  	public boolean containFormula() {
  		return this.formula != null;
  	}
  	
  	public void setFormula(Formula formula) throws CreateCycleException {
  		if (formula.createCycle(this))
  			throw new CreateCycleException();
  		
  		this.formula = formula;
  		for (Cell cell : this.formula.getUtilisedCells())
  			cell.usedIn.add(this);
  		this.updateValue();
  		this.spreadValue();
  	}
  	
  	public void setValue(double value) {
  		this.value = value;
  		this.formula = null;
  		this.spreadValue();
  	}
  	
  	private void spreadValue() {
  		for (Cell cell : this.usedIn) {
  			cell.updateValue();
  			cell.spreadValue();
  		}
  	}
  	
23982881   [mandjemb]   update ihm
103
  
d8507aee   [mandjemb]   Fichiers
104
  }