diff --git a/layers/src/main/java/com/iluwatar/layers/App.java b/layers/src/main/java/com/iluwatar/layers/App.java index dc1595b3d..67aeb45ac 100644 --- a/layers/src/main/java/com/iluwatar/layers/App.java +++ b/layers/src/main/java/com/iluwatar/layers/App.java @@ -1,17 +1,16 @@ package com.iluwatar.layers; -import org.springframework.context.support.ClassPathXmlApplicationContext; - public class App { public static void main(String[] args) { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "applicationContext.xml"); - - CakeLayerDao cakeLayerDao = context.getBean(CakeLayerDao.class); - cakeLayerDao.save(new CakeLayer("strawberry", 1200)); - System.out.println("Count CakeLayer records: " + cakeLayerDao.count()); - context.close(); + CakeBakingService service = new CakeBakingServiceImpl(); + service.saveNewLayer(new CakeLayerInfo("foo", 1)); + service.saveNewLayer(new CakeLayerInfo("bar", 2)); + service.getAllLayers().stream().forEach((layer) -> System.out.println(layer)); + + service.saveNewTopping(new CakeToppingInfo("hoi", 11)); + service.getAllToppings().stream().forEach((topping) -> System.out.println(topping)); + } } diff --git a/layers/src/main/java/com/iluwatar/layers/Cake.java b/layers/src/main/java/com/iluwatar/layers/Cake.java index e876a6e46..8d78d203f 100644 --- a/layers/src/main/java/com/iluwatar/layers/Cake.java +++ b/layers/src/main/java/com/iluwatar/layers/Cake.java @@ -15,14 +15,38 @@ public class Cake { @Id @GeneratedValue private Long id; - - @OneToMany - private List layers; @OneToOne private CakeTopping topping; + @OneToMany + private List layers; + public Cake() { - layers = new ArrayList<>(); + setLayers(new ArrayList<>()); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public CakeTopping getTopping() { + return topping; + } + + public void setTopping(CakeTopping topping) { + this.topping = topping; + } + + public List getLayers() { + return layers; + } + + public void setLayers(List layers) { + this.layers = layers; } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingException.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingException.java new file mode 100644 index 000000000..2b131da19 --- /dev/null +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingException.java @@ -0,0 +1,11 @@ +package com.iluwatar.layers; + +public class CakeBakingException extends Exception { + + public CakeBakingException() { + } + + public CakeBakingException(String message) { + super(message); + } +} diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java index 4315e3519..731650d7e 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java @@ -1,10 +1,16 @@ package com.iluwatar.layers; +import java.util.List; + public interface CakeBakingService { - void bakeNewCake(CakeInfo cakeInfo); + void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException; void saveNewTopping(CakeToppingInfo toppingInfo); + + List getAllToppings(); void saveNewLayer(CakeLayerInfo layerInfo); + + List getAllLayers(); } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java index fa141b5dc..6bf41c290 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java @@ -1,16 +1,79 @@ package com.iluwatar.layers; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + public class CakeBakingServiceImpl implements CakeBakingService { + private AbstractApplicationContext context; + + public CakeBakingServiceImpl() { + this.context = new ClassPathXmlApplicationContext("applicationContext.xml"); + } + @Override - public void bakeNewCake(CakeInfo cakeInfo) { + public void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException { + List allToppings = getAllToppings(); + List matchingToppings = allToppings.stream() + .filter((t) -> t.name.equals(cakeInfo.cakeToppingInfo.name)).collect(Collectors.toList()); + if (!matchingToppings.isEmpty()) { +// CakeToppingDao toppingBean = context.getBean(CakeToppingDao.class); +// toppingBean.delete(matchingToppings.iterator().next().id.get()); + } else { + throw new CakeBakingException(String.format("Topping %s is not available", cakeInfo.cakeToppingInfo.name)); + } + List allLayers = getAllLayers(); + for (CakeLayerInfo info: cakeInfo.cakeLayerInfos) { + Optional found = allLayers.stream().filter((layer) -> layer.name.equals(info.name)).findFirst(); + if (found.isPresent()) { +// CakeLayerDao layerBean = context.getBean(CakeLayerDao.class); +// layerBean.delete(found.get().id.get()); + } else { + throw new CakeBakingException(String.format("Layer %s is not available", info.name)); + } + } + CakeDao cakeBean = context.getBean(CakeDao.class); } @Override public void saveNewTopping(CakeToppingInfo toppingInfo) { + CakeToppingDao bean = context.getBean(CakeToppingDao.class); + bean.save(new CakeTopping(toppingInfo.name, toppingInfo.calories)); } @Override public void saveNewLayer(CakeLayerInfo layerInfo) { + CakeLayerDao bean = context.getBean(CakeLayerDao.class); + bean.save(new CakeLayer(layerInfo.name, layerInfo.calories)); + } + + @Override + public List getAllToppings() { + CakeToppingDao bean = context.getBean(CakeToppingDao.class); + List result = new ArrayList<>(); + Iterator iterator = bean.findAll().iterator(); + while (iterator.hasNext()) { + CakeTopping next = iterator.next(); + result.add(new CakeToppingInfo(next.getId(), next.getName(), next.getCalories())); + } + return result; + } + + @Override + public List getAllLayers() { + CakeLayerDao bean = context.getBean(CakeLayerDao.class); + List result = new ArrayList<>(); + Iterator iterator = bean.findAll().iterator(); + while (iterator.hasNext()) { + CakeLayer next = iterator.next(); + result.add(new CakeLayerInfo(next.getId(), next.getName(), next.getCalories())); + } + return result; } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeInfo.java b/layers/src/main/java/com/iluwatar/layers/CakeInfo.java index 185192f50..f5be954a7 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeInfo.java @@ -1,13 +1,22 @@ package com.iluwatar.layers; import java.util.List; +import java.util.Optional; public class CakeInfo { + public final Optional id; public final CakeToppingInfo cakeToppingInfo; public final List cakeLayerInfos; + + public CakeInfo(Long id, CakeToppingInfo cakeToppingInfo, List cakeLayerInfos) { + this.id = Optional.of(id); + this.cakeToppingInfo = cakeToppingInfo; + this.cakeLayerInfos = cakeLayerInfos; + } public CakeInfo(CakeToppingInfo cakeToppingInfo, List cakeLayerInfos) { + this.id = Optional.empty(); this.cakeToppingInfo = cakeToppingInfo; this.cakeLayerInfos = cakeLayerInfos; } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeLayer.java b/layers/src/main/java/com/iluwatar/layers/CakeLayer.java index 0e6309540..c547995b3 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeLayer.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeLayer.java @@ -19,7 +19,36 @@ public class CakeLayer { } public CakeLayer(String name, int calories) { + this.setName(name); + this.setCalories(calories); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { this.name = name; + } + + public int getCalories() { + return calories; + } + + public void setCalories(int calories) { this.calories = calories; } + + @Override + public String toString() { + return String.format("name: %s calories: %d", name, calories); + } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java b/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java index f2e349fe6..6b2b5b9b4 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java @@ -1,12 +1,27 @@ package com.iluwatar.layers; +import java.util.Optional; + public class CakeLayerInfo { + public final Optional id; public final String name; public final int calories; - public CakeLayerInfo(String name, int calories) { + public CakeLayerInfo(Long id, String name, int calories) { + this.id = Optional.of(id); this.name = name; this.calories = calories; } + + public CakeLayerInfo(String name, int calories) { + this.id = Optional.empty(); + this.name = name; + this.calories = calories; + } + + @Override + public String toString() { + return String.format("name: %s calories: %d", name, calories); + } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeTopping.java b/layers/src/main/java/com/iluwatar/layers/CakeTopping.java index 9fc6c86bd..38f61efca 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeTopping.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeTopping.java @@ -19,7 +19,36 @@ public class CakeTopping { } public CakeTopping(String name, int calories) { + this.setName(name); + this.setCalories(calories); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { this.name = name; + } + + public int getCalories() { + return calories; + } + + public void setCalories(int calories) { this.calories = calories; } + + @Override + public String toString() { + return String.format("name: %s calories: %d", name, calories); + } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java b/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java index 04ba15d98..7e22f6eb1 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java @@ -1,12 +1,27 @@ package com.iluwatar.layers; +import java.util.Optional; + public class CakeToppingInfo { - + + public final Optional id; public final String name; public final int calories; - public CakeToppingInfo(String name, int calories) { + public CakeToppingInfo(Long id, String name, int calories) { + this.id = Optional.of(id); this.name = name; this.calories = calories; } + + public CakeToppingInfo(String name, int calories) { + this.id = Optional.empty(); + this.name = name; + this.calories = calories; + } + + @Override + public String toString() { + return String.format("name: %s calories: %d", name, calories); + } }