View Javadoc
1   /**
2    * This file is part of Indicators.
3    *
4    * Indicators is free software: you can redistribute it and/or modify
5    * it under the terms of the GNU General Public License as published by
6    * the Free Software Foundation, either version 3 of the License, or
7    * (at your option) any later version.
8    *
9    * Indicators is distributed in the hope that it will be useful,
10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   * GNU General Public License for more details.
13   *
14   * You should have received a copy of the GNU General Public License
15   * along with Indicators. If not, see <https://www.gnu.org/licenses/>.
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   * % of number of days/period.
36   *
37   * @author jucufi
38   */
39  @XmlRootElement
40  public final class Frequency extends SimpleIndicator implements Detailable {
41  
42      /**
43       * UUID for Serializable.
44       */
45      private static final long serialVersionUID = 6030595237342422006L;
46  
47      /**
48       * Number of days/period.
49       */
50      @Getter
51      @Setter
52      private NumberOfDays numberOfDays;
53  
54      /**
55       * Constructor.
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         // Suppression du paramètre présent dans l'attribut (noeud XML) numberOfDays
129         this.numberOfDays.removeParameter(param);
130     }
131 
132 }