diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..ca349d52
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+.idea
+*.iml
+.classpath
+.project
+.settings
+/target
+/bin
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100644
index 65514ae9..00000000
--- a/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Workshop Java 8
-
-Thèmes abordées :
-
-* Méthode par défaut (01-default-method)
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 00000000..b20359bb
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,42 @@
+
+
+ 4.0.0
+
+ devinstitut
+ java-java17
+ 1.0-SNAPSHOT
+
+
+ utf-8
+
+
+
+
+
+
+ maven-compiler-plugin
+
+ 1.17
+ 1.17
+
+
+
+
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
+ org.hamcrest
+ hamcrest-library
+ 1.3
+
+
+
+
\ No newline at end of file
diff --git a/src/test/java/java17/data/Account.java b/src/test/java/java17/data/Account.java
new file mode 100644
index 00000000..6b770795
--- /dev/null
+++ b/src/test/java/java17/data/Account.java
@@ -0,0 +1,23 @@
+package java17.data;
+
+public class Account {
+
+ private Person owner;
+ private Integer balance;
+
+ public Person getOwner() {
+ return owner;
+ }
+
+ public void setOwner(Person owner) {
+ this.owner = owner;
+ }
+
+ public Integer getBalance() {
+ return balance;
+ }
+
+ public void setBalance(Integer balance) {
+ this.balance = balance;
+ }
+}
diff --git a/src/test/java/java17/data/Data.java b/src/test/java/java17/data/Data.java
new file mode 100644
index 00000000..64c25a2c
--- /dev/null
+++ b/src/test/java/java17/data/Data.java
@@ -0,0 +1,15 @@
+package java17.data;
+
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+public class Data {
+
+ public static List buildPersonList(int nb) {
+ return IntStream.rangeClosed(1,nb)
+ .mapToObj(i -> new Person("first_" + i, "last_" + i, i, i % 9 == 0 ? "test": "password"+i))
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/test/java/java17/data/Person.java b/src/test/java/java17/data/Person.java
new file mode 100644
index 00000000..2ddc7d8b
--- /dev/null
+++ b/src/test/java/java17/data/Person.java
@@ -0,0 +1,51 @@
+package java17.data;
+
+public class Person {
+
+ private String firstname;
+ private String lastname;
+ private Integer age;
+ private String password;
+
+ public Person() {
+ }
+
+ public Person(String firstname, String lastname, Integer age, String password) {
+ this.firstname = firstname;
+ this.lastname = lastname;
+ this.age = age;
+ this.password = password;
+ }
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ public Integer getAge() {
+ return age;
+ }
+
+ public void setAge(Integer age) {
+ this.age = age;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
diff --git a/src/test/java/java17/ex01/Method_01_Test.java b/src/test/java/java17/ex01/Method_01_Test.java
new file mode 100644
index 00000000..0825e047
--- /dev/null
+++ b/src/test/java/java17/ex01/Method_01_Test.java
@@ -0,0 +1,87 @@
+package java17.ex01;
+
+import java.util.List;
+
+import org.junit.Test;
+
+import java17.data.Data;
+import java17.data.Person;
+
+
+/**
+ * Exercice 01 - Méthode par défaut
+ */
+public class Method_01_Test {
+
+ // tag::IDao[]
+ interface IDao {
+ List findAll();
+
+ // TODO créer une méthode int sumAge()
+ int sumAge();
+ // TODO Cette méthode retourne le résultat de l'addition des ages des personnes
+ }
+ // end::IDao[]
+
+ class DaoA implements IDao {
+
+ List people = Data.buildPersonList(20);
+
+ @Override
+ public List findAll() {
+ return people;
+ }
+
+ @Override
+ public int sumAge() {
+ int sum = 0;
+ for (Person p : people) {
+ sum += p.getAge();
+ }
+ return sum;
+ }
+ }
+
+ class DaoB implements IDao {
+
+ List people = Data.buildPersonList(100);
+
+ @Override
+ public List findAll() {
+ return people;
+ }
+
+ @Override
+ public int sumAge() {
+ int sum = 0;
+ for (Person p : people) {
+ sum += p.getAge();
+ }
+ return sum;
+ }
+ }
+
+ @Test
+ public void test_daoA_sumAge() throws Exception {
+
+ DaoA daoA = new DaoA();
+
+ // TODO invoquer la méthode sumAge pour que le test soit passant
+ int result = daoA.sumAge();
+
+ assert result == 210;
+ }
+
+ @Test
+ public void test_daoB_sumAge() throws Exception {
+
+ DaoB daoB = new DaoB();
+
+ // TODO invoquer la méthode sumAge pour que le test soit passant
+ int result = daoB.sumAge();
+
+
+ assert result == 5050;
+
+ }
+}
diff --git a/src/test/java/java17/ex02/Method_02_Test.java b/src/test/java/java17/ex02/Method_02_Test.java
new file mode 100644
index 00000000..c4375d92
--- /dev/null
+++ b/src/test/java/java17/ex02/Method_02_Test.java
@@ -0,0 +1,53 @@
+package java17.ex02;
+
+import java.util.List;
+
+import org.junit.Test;
+
+import java17.data.Data;
+import java17.data.Person;
+
+/**
+ * Exercice 02 - Redéfinition
+ */
+public class Method_02_Test {
+
+ // tag::IDao[]
+ interface IDao {
+ List findAll();
+
+ // TODO créer une méthode String format()
+ // TODO la méthode retourne une chaîne de la forme [ persons]
+ // TODO exemple de résultat : "[14 persons]", "[30 persons]"
+ }
+ // end::IDao[]
+
+ // tag::DaoA[]
+ class DaoA implements IDao {
+
+ List people = Data.buildPersonList(20);
+
+ @Override
+ public List findAll() {
+ return people;
+ }
+
+ // TODO redéfinir la méthode String format()
+ // TODO la méthode retourne une chaîne de la forme DaoA[ persons]
+ // TODO exemple de résultat : "DaoA[14 persons]", "DaoA[30 persons]"
+ // TODO l'implémentation réutilise la méthode format() de l'interface
+
+ }
+ // end::DaoA[]
+
+ @Test
+ public void test_daoA_format() throws Exception {
+
+ DaoA daoA = new DaoA();
+
+ // TODO invoquer la méthode format() pour que le test soit passant
+ String result = null;
+
+ assert "DaoA[20 persons]".equals(result);
+ }
+}