1
1
package application .tools ;
2
2
3
+ import org .json .JSONObject ;
4
+
3
5
import java .io .File ;
4
6
import java .io .IOException ;
5
7
import java .nio .file .Files ;
9
11
import java .util .Map ;
10
12
11
13
public class DataReader {
14
+ /**
15
+ * Récupère les températures des fichiers donnés.
16
+ * @param datasToFetch Liste des fichiers contenant les données.
17
+ * @return Une liste de valeurs float représentant les températures.
18
+ */
12
19
public static List <Float > getTemps (List <File > datasToFetch ){
13
20
List <Float > tempsToReturn = new ArrayList <>();
14
21
for (File readData : datasToFetch ) {
@@ -17,13 +24,24 @@ public static List<Float> getTemps(List<File> datasToFetch){
17
24
return tempsToReturn ;
18
25
}
19
26
27
+ /**
28
+ * Récupère la température d'un fichier donné.
29
+ * Retourne -275 si la température n'est pas trouvée.
30
+ * @param datasToFetch Le fichier contenant les données.
31
+ * @return La valeur float de la température, ou -275 en cas d'erreur.
32
+ */
20
33
public static float getTemps (File datasToFetch ){
21
34
//-275 étant inférieur au 0 absolu, c'est une valeur absurde qui sera détectable de manière automatique
22
35
float tempToReturn = -275 ;
23
36
tempToReturn = getDict (datasToFetch ).get ("temperature" );
24
37
return tempToReturn ;
25
38
}
26
39
40
+ /**
41
+ * Récupère les valeurs d'humidité des fichiers donnés.
42
+ * @param datasToFetch Liste des fichiers contenant les données.
43
+ * @return Une liste de valeurs float représentant les humidités.
44
+ */
27
45
public static List <Float > getHumidities (List <File > datasToFetch ){
28
46
29
47
List <Float > humiditiesToReturn = new ArrayList <>();
@@ -33,12 +51,23 @@ public static List<Float> getHumidities(List<File> datasToFetch){
33
51
return humiditiesToReturn ;
34
52
}
35
53
54
+ /**
55
+ * Récupère la valeur d'humidité d'un fichier donné.
56
+ * Retourne -1 si l'humidité n'est pas trouvée.
57
+ * @param datasToFetch Le fichier contenant les données.
58
+ * @return La valeur float de l'humidité, ou -1 en cas d'erreur.
59
+ */
36
60
public static float getHumidities (File datasToFetch ){
37
61
float humidityToReturn = -1 ;
38
62
humidityToReturn = getDict (datasToFetch ).get ("humidity" );
39
63
return humidityToReturn ;
40
64
}
41
65
66
+ /**
67
+ * Récupère les niveaux de CO2 des fichiers donnés.
68
+ * @param datasToFetch Liste des fichiers contenant les données.
69
+ * @return Une liste de valeurs float représentant les niveaux de CO2.
70
+ */
42
71
public static List <Float > getCo2 (List <File > datasToFetch ){
43
72
List <Float > co2ToReturn = new ArrayList <>();
44
73
for (File currentFile : datasToFetch ){
@@ -47,20 +76,63 @@ public static List<Float> getCo2(List<File> datasToFetch){
47
76
return co2ToReturn ;
48
77
}
49
78
79
+ /**
80
+ * Récupère le niveau de CO2 d'un fichier donné.
81
+ * Retourne -1 si le niveau de CO2 n'est pas trouvé.
82
+ * @param datasToFetch Le fichier contenant les données.
83
+ * @return La valeur float du CO2, ou -1 en cas d'erreur.
84
+ */
50
85
public static float getCo2 (File datasToFetch ){
51
86
float co2ToReturn = -1 ;
52
87
co2ToReturn = getDict (datasToFetch ).get ("co2" );
53
88
return co2ToReturn ;
54
89
}
55
90
56
- private static Map <String , Float > getDict (File datasToFetch ){
91
+ /**
92
+ * Transforme le contenu d'un fichier en une carte (Map) de clés et de valeurs.
93
+ * Les clés sont des chaînes de caractères, et les valeurs sont des nombres float.
94
+ * Si une valeur ne peut pas être convertie, elle est ignorée.
95
+ * @param datasToFetch Le fichier contenant les données à lire.
96
+ * @return Une Map avec les données extraites du fichier.
97
+ * @throws RuntimeException en cas d'erreur de lecture du fichier.
98
+ */
99
+ public static Map <String , Float > getDict (File datasToFetch ){
57
100
Map <String , Float > dictToReturn = new HashMap <>();
58
101
try {
59
102
String data = Files .readString (datasToFetch .toPath ());
60
103
data = data .replace ("{" ,"" ).replace ("}" ,"" ).replace ("'" ,"" );
61
104
String [] splittedValues = data .split (", |: " );
62
- for (int i = 0 ; i <splittedValues .length ;i +=2 ){
63
- dictToReturn .put (splittedValues [i ], Float .parseFloat (splittedValues [i +1 ]));
105
+ for (int i = 0 ; i <splittedValues .length -1 ;i +=2 ){
106
+ try {
107
+ dictToReturn .put (splittedValues [i ], Float .parseFloat (splittedValues [i + 1 ]));
108
+ } catch (NumberFormatException ignored ) {}
109
+ }
110
+ } catch (IOException e ) {
111
+ throw new RuntimeException (e );
112
+ }
113
+ return dictToReturn ;
114
+ }
115
+
116
+ /**
117
+ * Transforme le contenu d'un fichier JSON contenant des données SolarEdge
118
+ * en une carte (Map) de clés et de valeurs imbriquées.
119
+ * Les clés sont composées du chemin complet (e.g., "parent.enfant").
120
+ * @param datasToFetch Le fichier JSON contenant les données SolarEdge.
121
+ * @return Une Map avec les données extraites et transformées.
122
+ * @throws RuntimeException en cas d'erreur de lecture du fichier.
123
+ */
124
+ public static Map <String , Float > getSolarDict (File datasToFetch ){
125
+ Map <String , Float > dictToReturn = new HashMap <>();
126
+ try {
127
+ JSONObject datas = new JSONObject (Files .readString (datasToFetch .toPath ()));
128
+ for (String firstKey : datas .keySet ()) {
129
+ Object firstValue = datas .get (firstKey );
130
+ if (firstValue instanceof JSONObject currentData ){
131
+ for (String secondKey : currentData .keySet ()){
132
+ Object secondValue = currentData .get (secondKey );
133
+ dictToReturn .put (firstKey +"." +secondKey , Float .parseFloat (secondValue .toString ()));
134
+ }
135
+ }
64
136
}
65
137
} catch (IOException e ) {
66
138
throw new RuntimeException (e );
0 commit comments