#84 Example improvements. Instead of all toppings and all layers the
service returns available toppings and layers.
This commit is contained in:
		| @@ -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(); | ||||
| 		} | ||||
|   | ||||
| @@ -10,9 +10,9 @@ public interface CakeBakingService { | ||||
|  | ||||
| 	void saveNewTopping(CakeToppingInfo toppingInfo); | ||||
|  | ||||
| 	List<CakeToppingInfo> getAllToppings(); | ||||
| 	List<CakeToppingInfo> getAvailableToppings(); | ||||
| 	 | ||||
| 	void saveNewLayer(CakeLayerInfo layerInfo); | ||||
| 	 | ||||
| 	List<CakeLayerInfo> getAllLayers(); | ||||
| 	List<CakeLayerInfo> getAvailableLayers(); | ||||
| } | ||||
|   | ||||
| @@ -25,13 +25,13 @@ public class CakeBakingServiceImpl implements CakeBakingService { | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException { | ||||
| 		List<CakeToppingInfo> allToppings = getAllToppings(); | ||||
| 		List<CakeToppingInfo> allToppings = getAvailableToppings(); | ||||
| 		List<CakeToppingInfo> 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<CakeLayer> allLayers = getAllLayerEntities(); | ||||
| 		List<CakeLayer> allLayers = getAvailableLayerEntities(); | ||||
| 		Set<CakeLayer> foundLayers = new HashSet<>(); | ||||
| 		for (CakeLayerInfo info: cakeInfo.cakeLayerInfos) { | ||||
| 			Optional<CakeLayer> 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<CakeTopping> getAllToppingEntities() { | ||||
| 	private List<CakeTopping> getAvailableToppingEntities() { | ||||
| 		CakeToppingDao bean = context.getBean(CakeToppingDao.class); | ||||
| 		List<CakeTopping> result = new ArrayList<>(); | ||||
| 		Iterator<CakeTopping> 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<CakeToppingInfo> getAllToppings() { | ||||
| 	public List<CakeToppingInfo> getAvailableToppings() { | ||||
| 		CakeToppingDao bean = context.getBean(CakeToppingDao.class); | ||||
| 		List<CakeToppingInfo> result = new ArrayList<>(); | ||||
| 		Iterator<CakeTopping> 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<CakeLayer> getAllLayerEntities() { | ||||
| 	private List<CakeLayer> getAvailableLayerEntities() { | ||||
| 		CakeLayerDao bean = context.getBean(CakeLayerDao.class); | ||||
| 		List<CakeLayer> result = new ArrayList<>(); | ||||
| 		Iterator<CakeLayer> 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<CakeLayerInfo> getAllLayers() { | ||||
| 	public List<CakeLayerInfo> getAvailableLayers() { | ||||
| 		CakeLayerDao bean = context.getBean(CakeLayerDao.class); | ||||
| 		List<CakeLayerInfo> result = new ArrayList<>(); | ||||
| 		Iterator<CakeLayer> 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; | ||||
| 	} | ||||
|   | ||||
| @@ -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()); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -35,7 +35,7 @@ | ||||
| 			<map> | ||||
| 				<entry key="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" /> | ||||
| 				<entry key="hibernate.hbm2ddl.auto" value="create-drop" /> | ||||
| 				<entry key="hibernate.show_sql" value="true" /> | ||||
| 				<entry key="hibernate.show_sql" value="false" /> | ||||
| 			</map> | ||||
| 		</property> | ||||
| 	</bean> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user