Skip to content

Commit 5286d6e

Browse files
committed
♻ Refactorisation RepertoireCommune
1 parent d425032 commit 5286d6e

File tree

4 files changed

+93
-28
lines changed

4 files changed

+93
-28
lines changed

src/main/java/fr/france/RepertoireCommune.java

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
package fr.france;
22

33
import java.io.FileNotFoundException;
4-
import java.io.InputStream;
5-
import java.io.InputStreamReader;
64
import java.io.Reader;
75
import java.util.ArrayList;
86
import java.util.Collections;
97
import java.util.HashMap;
108
import java.util.List;
119
import java.util.Map;
1210

13-
import com.opencsv.bean.CsvToBeanBuilder;
14-
1511
import org.apache.commons.logging.Log;
1612
import org.apache.commons.logging.LogFactory;
1713

14+
import fr.france.outils.OutilsRepertoireCommune;
1815
import fr.france.outils.OutilsString;
1916

2017
/**
@@ -47,13 +44,10 @@ private RepertoireCommune() {
4744
private static List<Commune> initCommunes() {
4845
List<Commune> result = null;
4946
try {
50-
InputStream resource = RepertoireCommune.class.getClassLoader().getResourceAsStream("communes.csv");
51-
if (resource == null)
52-
throw new FileNotFoundException();
53-
Reader reader = new InputStreamReader(resource);
54-
result = new CsvToBeanBuilder<Commune>(reader).withType(Commune.class).build().parse();
47+
Reader reader = OutilsRepertoireCommune.getRessource("communes.csv");
48+
result = OutilsRepertoireCommune.convertirCsvEnCommune(reader);
5549
} catch (IllegalStateException | FileNotFoundException e) {
56-
log.error("Le fichier contenant les communes n'a pas été trouvé", e);
50+
log.error(e.getMessage(), e);
5751
}
5852
return result;
5953
}
@@ -63,21 +57,13 @@ private static List<Commune> initCommunes() {
6357
private static final Map<String, Commune> REPERTOIRE_NOM_ET_CODE_POSTAL;
6458

6559
static {
66-
Map<Integer, List<Commune>> codePostaux = new HashMap<>();
67-
Map<String, List<Commune>> noms = new HashMap<>();
68-
Map<String, Commune> nomEtCodePostal = new HashMap<>();
69-
for (Commune Commune : COMMUNES) {
70-
nomEtCodePostal.put(OutilsString.formater(Commune.getNom()) + Commune.getCodePostal(), Commune);
71-
List<Commune> villesNom = noms.computeIfAbsent(OutilsString.formater(Commune.getNom()),
72-
k -> new ArrayList<>());
73-
List<Commune> villesCodePostal = codePostaux.computeIfAbsent(Commune.getCodePostal(),
74-
k -> new ArrayList<>());
75-
villesNom.add(Commune);
76-
villesCodePostal.add(Commune);
77-
}
78-
REPERTOIRE_CODE_POSTAL = Collections.unmodifiableMap(codePostaux);
79-
REPERTOIRE_NOM = Collections.unmodifiableMap(noms);
80-
REPERTOIRE_NOM_ET_CODE_POSTAL = Collections.unmodifiableMap(nomEtCodePostal);
60+
Map<Integer, List<Commune>> repCodePostaux = new HashMap<>();
61+
Map<String, List<Commune>> repNoms = new HashMap<>();
62+
Map<String, Commune> repNomEtCodePostal = new HashMap<>();
63+
OutilsRepertoireCommune.initialiserRepertoires(repCodePostaux, repNoms, repNomEtCodePostal, COMMUNES);
64+
REPERTOIRE_CODE_POSTAL = Collections.unmodifiableMap(repCodePostaux);
65+
REPERTOIRE_NOM = Collections.unmodifiableMap(repNoms);
66+
REPERTOIRE_NOM_ET_CODE_POSTAL = Collections.unmodifiableMap(repNomEtCodePostal);
8167
}
8268

8369
/**
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package fr.france.outils;
2+
3+
import java.io.FileNotFoundException;
4+
import java.io.InputStream;
5+
import java.io.InputStreamReader;
6+
import java.io.Reader;
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
import com.opencsv.bean.CsvToBeanBuilder;
12+
13+
import fr.france.Commune;
14+
import fr.france.RepertoireCommune;
15+
16+
/**
17+
* <b>OutilsRepertoireCommune est la classe utilitaire de la class
18+
* RepertoireCommune.</b>
19+
* <p>
20+
* Elle permet d'alléger la class {@link fr.france.RepertoireCommune}
21+
* </p>
22+
*
23+
* @see RepertoireCommune
24+
*
25+
* @author MathieuSoysal
26+
* @version 1.0.0
27+
*/
28+
public class OutilsRepertoireCommune {
29+
30+
private OutilsRepertoireCommune() {
31+
throw new IllegalStateException("Class utilitaire");
32+
}
33+
34+
public static List<Commune> convertirCsvEnCommune(Reader reader) {
35+
return new CsvToBeanBuilder<Commune>(reader).withType(Commune.class).build().parse();
36+
}
37+
38+
public static Reader getRessource(String fileName) throws FileNotFoundException {
39+
InputStream resource = RepertoireCommune.class.getClassLoader().getResourceAsStream(fileName);
40+
if (resource == null)
41+
throw new FileNotFoundException("Le fichier contenant les communes n'a pas été trouvé");
42+
return new InputStreamReader(resource);
43+
}
44+
45+
public static void initialiserRepertoires(Map<Integer, List<Commune>> codePostaux, Map<String, List<Commune>> noms,
46+
Map<String, Commune> nomEtCodePostal, final List<Commune> communes) {
47+
for (Commune Commune : communes) {
48+
nomEtCodePostal.put(OutilsString.formater(Commune.getNom()) + Commune.getCodePostal(), Commune);
49+
List<Commune> villesNom = noms.computeIfAbsent(OutilsString.formater(Commune.getNom()),
50+
k -> new ArrayList<>());
51+
List<Commune> villesCodePostal = codePostaux.computeIfAbsent(Commune.getCodePostal(),
52+
k -> new ArrayList<>());
53+
villesNom.add(Commune);
54+
villesCodePostal.add(Commune);
55+
}
56+
}
57+
58+
}

src/test/java/fr/france/RepertoireCommuneTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package fr.france;
22

3-
import java.lang.reflect.InvocationTargetException;
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
5+
import static org.junit.jupiter.api.Assertions.assertNotNull;
6+
import static org.junit.jupiter.api.Assertions.assertThrows;
7+
48
import java.lang.reflect.Constructor;
9+
import java.lang.reflect.InvocationTargetException;
510
import java.util.Collections;
611
import java.util.List;
712

813
import org.junit.jupiter.api.Test;
914

10-
import static org.junit.jupiter.api.Assertions.*;
11-
1215
class RepertoireCommuneTest {
1316

1417
@Test
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package fr.france.outils;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertThrows;
5+
6+
import java.io.FileNotFoundException;
7+
8+
import org.junit.jupiter.api.Test;
9+
10+
class OutilsRepertoireCommuneTest {
11+
12+
@Test
13+
void test_getRessources() {
14+
Throwable e = assertThrows(FileNotFoundException.class, () -> OutilsRepertoireCommune.getRessource("noFile"));
15+
assertEquals("Le fichier contenant les communes n'a pas été trouvé", e.getMessage());
16+
}
17+
18+
}

0 commit comments

Comments
 (0)