1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package fr.inrae.agroclim.indicators.model.indicator;
18
19 import java.util.List;
20 import java.util.Map;
21 import java.util.Set;
22
23 import fr.inrae.agroclim.indicators.exception.IndicatorsException;
24 import fr.inrae.agroclim.indicators.model.Knowledge;
25 import fr.inrae.agroclim.indicators.model.Parameter;
26 import fr.inrae.agroclim.indicators.model.data.DailyData;
27 import fr.inrae.agroclim.indicators.model.data.Resource;
28 import fr.inrae.agroclim.indicators.model.data.Variable;
29 import fr.inrae.agroclim.indicators.util.Doublet;
30 import jakarta.xml.bind.annotation.XmlRootElement;
31 import lombok.Getter;
32 import lombok.Setter;
33
34
35
36
37
38
39 @XmlRootElement
40 public final class Frequency extends SimpleIndicator implements Detailable {
41
42
43
44
45 private static final long serialVersionUID = 6030595237342422006L;
46
47
48
49
50 @Getter
51 @Setter
52 private NumberOfDays numberOfDays;
53
54
55
56
57 public Frequency() {
58 super();
59 numberOfDays = new NumberOfDays();
60 }
61
62 @Override
63 public Frequency clone() throws CloneNotSupportedException {
64 final Frequency clone = (Frequency) super.clone();
65 if (numberOfDays != null) {
66 clone.numberOfDays = numberOfDays.clone();
67 }
68 return clone;
69 }
70
71 @Override
72 public double computeSingleValue(final Resource<? extends DailyData> data) throws IndicatorsException {
73 final double cent = 100.;
74 final int days = data.getData().size();
75 return numberOfDays.compute(data) * cent / days;
76 }
77
78 @Override
79 public List<Doublet<Parameter, Number>> getParameterDefaults() {
80 return numberOfDays.getParameterDefaults();
81 }
82
83 @Override
84 public List<Parameter> getParameters() {
85 return numberOfDays.getParameters();
86 }
87
88 @Override
89 public Map<String, Double> getParametersValues() {
90 return numberOfDays.getParametersValues();
91 }
92
93 @Override
94 public Set<Variable> getVariables() {
95 return numberOfDays.getVariables();
96 }
97
98 @Override
99 public boolean isComputable(final Resource<? extends DailyData> res) {
100 return numberOfDays.isComputable(res);
101 }
102
103 @Override
104 public void setParametersFromKnowledge(final Knowledge knowledge) {
105 numberOfDays.setParametersFromKnowledge(knowledge);
106 }
107
108 @Override
109 public void setParametersValues(final Map<String, Double> values) {
110 numberOfDays.setParametersValues(values);
111 }
112
113 @Override
114 public String toStringTree(final String indent) {
115 final StringBuilder sb = new StringBuilder();
116 sb.append(toStringTreeBase(indent));
117
118 if (numberOfDays != null) {
119 sb.append(indent).append(" numberOfDays:\n");
120 sb.append(numberOfDays.toStringTree(indent + " "))
121 .append("\n");
122 }
123 return sb.toString();
124 }
125
126 @Override
127 public void removeParameter(final Parameter param) {
128
129 this.numberOfDays.removeParameter(param);
130 }
131
132 }