From 9aa831d688822185b42bccf1f9188ad31e4abf85 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Sat, 15 Aug 2015 18:35:16 +0300 Subject: [PATCH] #84 Example improvements. Instead of all toppings and all layers the service returns available toppings and layers. --- .../main/java/com/iluwatar/layers/App.java | 18 ++++++++--- .../iluwatar/layers/CakeBakingService.java | 4 +-- .../layers/CakeBakingServiceImpl.java | 30 ++++++++++++------- .../java/com/iluwatar/layers/CakeInfo.java | 9 +++++- .../src/main/resources/applicationContext.xml | 2 +- 5 files changed, 45 insertions(+), 18 deletions(-) diff --git a/layers/src/main/java/com/iluwatar/layers/App.java b/layers/src/main/java/com/iluwatar/layers/App.java index 266977c89..5a5bde483 100644 --- a/layers/src/main/java/com/iluwatar/layers/App.java +++ b/layers/src/main/java/com/iluwatar/layers/App.java @@ -20,16 +20,26 @@ public class App { cakeBakingService.saveNewLayer(new CakeLayerInfo("chocolate", 1200)); cakeBakingService.saveNewLayer(new CakeLayerInfo("banana", 900)); cakeBakingService.saveNewLayer(new CakeLayerInfo("strawberry", 950)); - cakeBakingService.getAllLayers().stream().forEach((layer) -> System.out.println(layer)); + cakeBakingService.saveNewLayer(new CakeLayerInfo("lemon", 950)); + cakeBakingService.saveNewLayer(new CakeLayerInfo("vanilla", 950)); + cakeBakingService.saveNewLayer(new CakeLayerInfo("strawberry", 950)); cakeBakingService.saveNewTopping(new CakeToppingInfo("candies", 350)); - cakeBakingService.getAllToppings().stream().forEach((topping) -> System.out.println(topping)); + cakeBakingService.saveNewTopping(new CakeToppingInfo("cherry", 350)); - CakeInfo cakeInfo = new CakeInfo(new CakeToppingInfo("candies", 0), + CakeInfo cake1 = new CakeInfo(new CakeToppingInfo("candies", 0), Arrays.asList(new CakeLayerInfo("chocolate", 0), new CakeLayerInfo("banana", 0), new CakeLayerInfo("strawberry", 0))); try { - cakeBakingService.bakeNewCake(cakeInfo); + cakeBakingService.bakeNewCake(cake1); + } catch (CakeBakingException e) { + e.printStackTrace(); + } + CakeInfo cake2 = new CakeInfo(new CakeToppingInfo("cherry", 0), + Arrays.asList(new CakeLayerInfo("vanilla", 0), new CakeLayerInfo("lemon", 0), + new CakeLayerInfo("strawberry", 0))); + try { + cakeBakingService.bakeNewCake(cake2); } catch (CakeBakingException e) { e.printStackTrace(); } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java index 33a8c3a8b..c90b0de91 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java @@ -10,9 +10,9 @@ public interface CakeBakingService { void saveNewTopping(CakeToppingInfo toppingInfo); - List getAllToppings(); + List getAvailableToppings(); void saveNewLayer(CakeLayerInfo layerInfo); - List getAllLayers(); + List getAvailableLayers(); } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java index 0f80614dd..ff2ad6598 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java @@ -25,13 +25,13 @@ public class CakeBakingServiceImpl implements CakeBakingService { @Override public void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException { - List allToppings = getAllToppings(); + List allToppings = getAvailableToppings(); List matchingToppings = allToppings.stream() .filter((t) -> t.name.equals(cakeInfo.cakeToppingInfo.name)).collect(Collectors.toList()); if (matchingToppings.isEmpty()) { throw new CakeBakingException(String.format("Topping %s is not available", cakeInfo.cakeToppingInfo.name)); } - List allLayers = getAllLayerEntities(); + List allLayers = getAvailableLayerEntities(); Set foundLayers = new HashSet<>(); for (CakeLayerInfo info: cakeInfo.cakeLayerInfos) { Optional found = allLayers.stream().filter((layer) -> layer.getName().equals(info.name)).findFirst(); @@ -69,46 +69,56 @@ public class CakeBakingServiceImpl implements CakeBakingService { bean.save(new CakeLayer(layerInfo.name, layerInfo.calories)); } - private List getAllToppingEntities() { + private List getAvailableToppingEntities() { CakeToppingDao bean = context.getBean(CakeToppingDao.class); List result = new ArrayList<>(); Iterator iterator = bean.findAll().iterator(); while (iterator.hasNext()) { - result.add(iterator.next()); + CakeTopping topping = iterator.next(); + if (topping.getCake() == null) { + result.add(topping); + } } return result; } @Override - public List getAllToppings() { + public List getAvailableToppings() { 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())); + if (next.getCake() == null) { + result.add(new CakeToppingInfo(next.getId(), next.getName(), next.getCalories())); + } } return result; } - private List getAllLayerEntities() { + private List getAvailableLayerEntities() { CakeLayerDao bean = context.getBean(CakeLayerDao.class); List result = new ArrayList<>(); Iterator iterator = bean.findAll().iterator(); while (iterator.hasNext()) { - result.add(iterator.next()); + CakeLayer next = iterator.next(); + if (next.getCake() == null) { + result.add(next); + } } return result; } @Override - public List getAllLayers() { + public List getAvailableLayers() { 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())); + if (next.getCake() == null) { + 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 1cd637119..9487b0064 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeInfo.java @@ -21,8 +21,15 @@ public class CakeInfo { this.cakeLayerInfos = cakeLayerInfos; } + public int calculateTotalCalories() { + int total = cakeToppingInfo != null ? cakeToppingInfo.calories : 0; + total += cakeLayerInfos.stream().mapToInt(c -> c.calories).sum(); + return total; + } + @Override public String toString() { - return String.format("CakeInfo id=%d topping=%s layers=%s", id.get(), cakeToppingInfo, cakeLayerInfos); + return String.format("CakeInfo id=%d topping=%s layers=%s totalCalories=%d", id.get(), cakeToppingInfo, + cakeLayerInfos, calculateTotalCalories()); } } diff --git a/layers/src/main/resources/applicationContext.xml b/layers/src/main/resources/applicationContext.xml index 70cd34a37..0c908ad2e 100644 --- a/layers/src/main/resources/applicationContext.xml +++ b/layers/src/main/resources/applicationContext.xml @@ -35,7 +35,7 @@ - +