diff --git a/layers/src/main/java/com/iluwatar/layers/App.java b/layers/src/main/java/com/iluwatar/layers/App.java index 239674d02..c02d910cb 100644 --- a/layers/src/main/java/com/iluwatar/layers/App.java +++ b/layers/src/main/java/com/iluwatar/layers/App.java @@ -16,12 +16,13 @@ public class App { service.getAllToppings().stream().forEach((topping) -> System.out.println(topping)); CakeInfo cakeInfo = new CakeInfo(new CakeToppingInfo("candies", 0), - Arrays.asList(new CakeLayerInfo("chocolate", 0), new CakeLayerInfo("chocolate", 0), - new CakeLayerInfo("chocolate", 0))); + Arrays.asList(new CakeLayerInfo("chocolate", 0), new CakeLayerInfo("banana", 0), + new CakeLayerInfo("strawberry", 0))); try { service.bakeNewCake(cakeInfo); } catch (CakeBakingException e) { e.printStackTrace(); } + service.getAllCakes().stream().forEach((cake) -> System.out.println(cake)); } } diff --git a/layers/src/main/java/com/iluwatar/layers/Cake.java b/layers/src/main/java/com/iluwatar/layers/Cake.java index 5bdb4ae51..9b395557c 100644 --- a/layers/src/main/java/com/iluwatar/layers/Cake.java +++ b/layers/src/main/java/com/iluwatar/layers/Cake.java @@ -1,10 +1,11 @@ package com.iluwatar.layers; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; @@ -17,14 +18,14 @@ public class Cake { @GeneratedValue private Long id; - @OneToOne(cascade = CascadeType.ALL) + @OneToOne(cascade=CascadeType.REMOVE) private CakeTopping topping; - @OneToMany(cascade = CascadeType.ALL) - private List layers; + @OneToMany(cascade=CascadeType.REMOVE, fetch=FetchType.EAGER) + private Set layers; public Cake() { - setLayers(new ArrayList<>()); + setLayers(new HashSet<>()); } public Long getId() { @@ -43,15 +44,20 @@ public class Cake { this.topping = topping; } - public List getLayers() { + public Set getLayers() { return layers; } - public void setLayers(List layers) { + public void setLayers(Set layers) { this.layers = layers; } public void addLayer(CakeLayer layer) { this.layers.add(layer); } + + @Override + public String toString() { + return String.format("id=%s topping=%s layers=%s", id, topping, layers.toString()); + } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java index 731650d7e..33a8c3a8b 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java @@ -5,6 +5,8 @@ import java.util.List; public interface CakeBakingService { void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException; + + List getAllCakes(); void saveNewTopping(CakeToppingInfo toppingInfo); diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java index 419a31d4f..0f80614dd 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java @@ -1,9 +1,11 @@ package com.iluwatar.layers; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import org.springframework.context.support.AbstractApplicationContext; @@ -30,7 +32,7 @@ public class CakeBakingServiceImpl implements CakeBakingService { throw new CakeBakingException(String.format("Topping %s is not available", cakeInfo.cakeToppingInfo.name)); } List allLayers = getAllLayerEntities(); - List foundLayers = new ArrayList<>(); + Set foundLayers = new HashSet<>(); for (CakeLayerInfo info: cakeInfo.cakeLayerInfos) { Optional found = allLayers.stream().filter((layer) -> layer.getName().equals(info.name)).findFirst(); if (!found.isPresent()) { @@ -43,14 +45,16 @@ public class CakeBakingServiceImpl implements CakeBakingService { CakeTopping topping = toppingBean.findOne(matchingToppings.iterator().next().id.get()); CakeDao cakeBean = context.getBean(CakeDao.class); Cake cake = new Cake(); - cake = cakeBean.save(cake); cake.setTopping(topping); - topping.setCake(cake); cake.setLayers(foundLayers); + cakeBean.save(cake); + topping.setCake(cake); + toppingBean.save(topping); + CakeLayerDao layerBean = context.getBean(CakeLayerDao.class); for (CakeLayer layer: foundLayers) { layer.setCake(cake); + layerBean.save(layer); } - cakeBean.save(cake); } @Override @@ -108,4 +112,23 @@ public class CakeBakingServiceImpl implements CakeBakingService { } return result; } + + @Override + public List getAllCakes() { + CakeDao cakeBean = context.getBean(CakeDao.class); + List result = new ArrayList<>(); + Iterator iterator = cakeBean.findAll().iterator(); + while (iterator.hasNext()) { + Cake cake = iterator.next(); + CakeToppingInfo cakeToppingInfo = new CakeToppingInfo(cake.getTopping().getId(), + cake.getTopping().getName(), cake.getTopping().getCalories()); + ArrayList cakeLayerInfos = new ArrayList(); + for (CakeLayer layer: cake.getLayers()) { + cakeLayerInfos.add(new CakeLayerInfo(layer.getId(), layer.getName(), layer.getCalories())); + } + CakeInfo cakeInfo = new CakeInfo(cake.getId(), cakeToppingInfo, cakeLayerInfos); + result.add(cakeInfo); + } + 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 f5be954a7..1cd637119 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeInfo.java @@ -20,4 +20,9 @@ public class CakeInfo { this.cakeToppingInfo = cakeToppingInfo; this.cakeLayerInfos = cakeLayerInfos; } + + @Override + public String toString() { + return String.format("CakeInfo id=%d topping=%s layers=%s", id.get(), cakeToppingInfo, cakeLayerInfos); + } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeLayer.java b/layers/src/main/java/com/iluwatar/layers/CakeLayer.java index 00101a379..255569322 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeLayer.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeLayer.java @@ -54,7 +54,7 @@ public class CakeLayer { @Override public String toString() { - return String.format("name: %s calories: %d", name, calories); + return String.format("id=%s name=%s calories=%d", id, name, calories); } public Cake getCake() { diff --git a/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java b/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java index 6b59ebb06..c7715b61c 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java @@ -22,6 +22,6 @@ public class CakeLayerInfo { @Override public String toString() { - return String.format("CakeLayerInfo name: %s calories: %d", name, calories); + return String.format("CakeLayerInfo id=%d name=%s calories=%d", id.get(), 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 5aa861979..0e9d19192 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeTopping.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeTopping.java @@ -54,7 +54,7 @@ public class CakeTopping { @Override public String toString() { - return String.format("name: %s calories: %d", name, calories); + return String.format("id=%s name=%s calories=%d", name, calories); } public Cake getCake() { diff --git a/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java b/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java index 829862b3d..316f8ec04 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java @@ -22,6 +22,6 @@ public class CakeToppingInfo { @Override public String toString() { - return String.format("CakeToppingInfo name: %s calories: %d", name, calories); + return String.format("CakeToppingInfo id=%d name=%s calories=%d", id.get(), name, calories); } }