Skip to content
Snippets Groups Projects
Commit 0a8bd72c authored by Amaury Vanoorenberghe's avatar Amaury Vanoorenberghe :scroll:
Browse files

Initial commit

parent eefbb0b7
No related branches found
No related tags found
No related merge requests found
Showing
with 2 additions and 461 deletions
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<projectDescription> <projectDescription>
<name>TP6</name> <name>TP8</name>
<comment></comment> <comment></comment>
<projects> <projects>
</projects> </projects>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>fr.univlille.iutinfo.m3501</groupId> <groupId>fr.univlille.iutinfo.m3501</groupId>
<artifactId>TP6</artifactId> <artifactId>TP8</artifactId>
<version>1.0</version> <version>1.0</version>
<build> <build>
......
package fr.univlille.iutinfo.m3105.patisserie;
import java.util.*;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
import fr.univlille.iutinfo.m3105.patisserie.dessert.EmptyDessert;
public class Assortment implements Iterable<Dessert> {
private final List<Dessert> DESSERTS;
public Assortment(Dessert... desserts) {
DESSERTS = new ArrayList<Dessert>();
DESSERTS.addAll(Arrays.asList(desserts));
}
public boolean add(Dessert dessert) {
return DESSERTS.add(dessert);
}
public boolean add(String commande) {
final Dessert dessert = Patisserie.creerDessert(commande);
if (dessert == null || dessert.getClass() == EmptyDessert.class) {
return false;
}
return add(dessert);
}
@Override
public Iterator<Dessert> iterator() {
return DESSERTS.iterator();
}
}
package fr.univlille.iutinfo.m3105.patisserie;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Desserts;
import fr.univlille.iutinfo.m3105.patisserie.dessert.EmptyDessert;
public class Patisserie {
public static final Dessert creerDessert(String commande) {
Dessert dessert = new EmptyDessert();
//try {
String[] commands = commande.split("\s");
for (String command : commands) {
Desserts dessertMaker = Desserts.fromName(command);
dessert = dessertMaker.make(dessert);
}
//} catch (Exception e) {
dessert = new EmptyDessert();
//}
return dessert;
}
public static void main(String[] args) {
System.out.println(creerDessert("crepe potassium"));
}
}
package fr.univlille.iutinfo.m3105.patisserie.dessert;
import java.util.Locale;
/**
* Dessert
*/
public abstract class Dessert {
public abstract double price();
public abstract String name();
public abstract String[] identifier();
@Override
public String toString() {
final String fullPrice = String.format(Locale.ROOT, "%.2f€", price());
final String fullName = name();
return fullName + " : " + fullPrice;
}
}
\ No newline at end of file
package fr.univlille.iutinfo.m3105.patisserie.dessert;
import java.util.Arrays;
import java.util.function.Function;
import java.util.function.Supplier;
import fr.univlille.iutinfo.m3105.patisserie.dessert.bases.Crepe;
import fr.univlille.iutinfo.m3105.patisserie.dessert.bases.Waffle;
import fr.univlille.iutinfo.m3105.patisserie.dessert.toppings.*;
public enum Desserts {
NONE (EmptyDessert::new),
WAFFLE (Waffle::new),
CREPE (Crepe::new),
CHOCOLATE (Chocolate::new),
STRAWBERRIES (Strawberries::new),
BANANA (Banana::new),
CARAMEL (Caramel::new),
WHIPPED_CREAM (WhippedCream::new);
private static final Dessert NOTHING = new EmptyDessert();
private final Function<Dessert, Dessert> CONSTRUCTOR;
private Desserts(Function<Dessert, Dessert> ctor) {
CONSTRUCTOR = ctor;
}
private Desserts(Supplier<Dessert> ctor) {
CONSTRUCTOR = (d) -> ctor.get();
}
public static final Desserts fromName(String name) {
return Arrays.stream(values())
.filter(item -> Arrays.stream(item.identifier())
.anyMatch(name.toLowerCase()::equals))
.findFirst().orElse(NONE);
}
public Dessert make(Dessert base) {
try {
return CONSTRUCTOR.apply(base);
} catch (Exception e) {
return new EmptyDessert();
}
}
public String[] identifier() {
return make(NOTHING).identifier();
}
}
\ No newline at end of file
package fr.univlille.iutinfo.m3105.patisserie.dessert;
public class EmptyDessert extends Dessert {
@Override
public double price() {
return Double.NaN;
}
@Override
public String name() {
return "Le dessert ne doit pas commencer par une garniture";
}
@Override
public String[] identifier() {
return new String[0];
}
}
package fr.univlille.iutinfo.m3105.patisserie.dessert;
/**
* Garniture
*/
public abstract class Topping extends Dessert {
private final Dessert DESSERT;
public Topping(Dessert base) {
DESSERT = base;
}
public abstract double extraPrice();
public abstract String nameFormat();
@Override
public double price() {
return extraPrice() + DESSERT.price();
}
@Override
public String name() {
return String.format(nameFormat(), DESSERT.name());
}
}
package fr.univlille.iutinfo.m3105.patisserie.dessert.bases;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
/**
* Crêpe
*/
public class Crepe extends Dessert {
@Override
public double price() {
return 0.80;
}
@Override
public String name() {
return "Crêpe";
}
@Override
public String[] identifier() {
return new String[] {"crepe"};
}
}
\ No newline at end of file
package fr.univlille.iutinfo.m3105.patisserie.dessert.bases;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
/**
* Gauffre
*/
public class Waffle extends Dessert {
@Override
public double price() {
return 0.80;
}
@Override
public String name() {
return "Gauffre";
}
@Override
public String[] identifier() {
return new String[] {"gauffre", "waffle"};
}
}
\ No newline at end of file
package fr.univlille.iutinfo.m3105.patisserie.dessert.toppings;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Topping;
/**
* P O T A S S I U M
*/
public class Banana extends Topping {
public Banana(Dessert base) {
super(base);
}
@Override
public double extraPrice() {
return 1.1;
}
@Override
public String nameFormat() {
return "%s avec des morceaux de banane";
}
@Override
public String[] identifier() {
return new String[] {"potassium", "babane", "banana"};
}
}
package fr.univlille.iutinfo.m3105.patisserie.dessert.toppings;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Topping;
/**
* Caramel
*/
public class Caramel extends Topping {
public Caramel(Dessert base) {
super(base);
}
@Override
public double extraPrice() {
return 0.6;
}
@Override
public String nameFormat() {
return "%s au caramel";
}
@Override
public String[] identifier() {
return new String[] {"caramel"};
}
}
package fr.univlille.iutinfo.m3105.patisserie.dessert.toppings;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Topping;
/**
* Chocolat
*/
public class Chocolate extends Topping {
public Chocolate(Dessert base) {
super(base);
}
@Override
public double extraPrice() {
return 1.50;
}
@Override
public String nameFormat() {
return "%s au chocolat";
}
@Override
public String[] identifier() {
return new String[] {"chocolat", "chocolate", "choco"};
}
}
\ No newline at end of file
package fr.univlille.iutinfo.m3105.patisserie.dessert.toppings;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Topping;
/**
* Fraises
*/
public class Strawberries extends Topping {
public Strawberries(Dessert base) {
super(base);
}
@Override
public double extraPrice() {
return 1.25;
}
@Override
public String nameFormat() {
return "%s aux fraises";
}
@Override
public String[] identifier() {
return new String[] {"fraises", "strawberries"};
}
}
package fr.univlille.iutinfo.m3105.patisserie.dessert.toppings;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Topping;
/**
* Chantilly
*/
public class WhippedCream extends Topping {
public WhippedCream(Dessert base) {
super(base);
}
@Override
public double extraPrice() {
return 0.95;
}
@Override
public String nameFormat() {
return "%s avec de la chantilly";
}
@Override
public String[] identifier() {
return new String[] {"chantilly", "whipped-cream"};
}
}
package fr.univlille.iutinfo.m3105.patisserie.printers;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
public abstract class DessertPrinter {
public abstract String print(Dessert dessert);
}
package fr.univlille.iutinfo.m3105.patisserie.printers;
import java.util.Locale;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
public class DessertPrinterMultiLine extends DessertPrinter {
@Override
public String print(Dessert dessert) {
final String fullName = dessert.name();
final String fullPrice = String.format(Locale.ROOT, "%.2f€", dessert.price());
StringBuilder sb = new StringBuilder();
sb.append(fullName);
sb.append("\n -> ");
sb.append(fullPrice);
return sb.toString();
}
}
package fr.univlille.iutinfo.m3105.patisserie.printers;
import java.util.Locale;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
public class DessertPrinterSingleLine extends DessertPrinter {
@Override
public String print(Dessert dessert) {
final String fullName = dessert.name();
final String fullPrice = String.format(Locale.ROOT, "%.2f€", dessert.price());
StringBuilder sb = new StringBuilder();
sb.append(fullName);
sb.append("=");
sb.append(fullPrice);
return sb.toString();
}
}
package fr.univlille.iutinfo.m3105.patisserie;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import fr.univlille.iutinfo.m3105.patisserie.dessert.Dessert;
import fr.univlille.iutinfo.m3105.patisserie.dessert.bases.Crepe;
import fr.univlille.iutinfo.m3105.patisserie.dessert.bases.Waffle;
import fr.univlille.iutinfo.m3105.patisserie.dessert.toppings.Chocolate;
import fr.univlille.iutinfo.m3105.patisserie.dessert.toppings.Strawberries;
import fr.univlille.iutinfo.m3105.patisserie.dessert.toppings.WhippedCream;
/**
* Tuto cuisine
*/
public class DessertTest {
private Dessert
crepe,
waffle,
creamCrepe,
chocoWaffle,
doubleChocoCrepe,
strawberryChocoWaffle;
@BeforeEach
protected void setup() {
crepe = new Crepe();
waffle = new Waffle();
chocoWaffle = new Chocolate(waffle);
creamCrepe = new WhippedCream(crepe);
doubleChocoCrepe = new Chocolate(new Chocolate(crepe));
strawberryChocoWaffle = new Strawberries(chocoWaffle);
}
@Test
protected void get_dessert_tostring() {
assertEquals("Crêpe : 0.80€", crepe.toString());
assertEquals("Gauffre : 0.80€", waffle.toString());
assertEquals("Gauffre au chocolat : 2.30€", chocoWaffle.toString());
assertEquals("Crêpe avec de la chantilly : 1.75€", creamCrepe.toString());
assertEquals("Crêpe au chocolat au chocolat : 3.80€", doubleChocoCrepe.toString());
assertEquals("Gauffre au chocolat aux fraises : 3.55€", strawberryChocoWaffle.toString());
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment