#84 More work on cake baking
This commit is contained in:
@ -16,12 +16,13 @@ public class App {
|
|||||||
service.getAllToppings().stream().forEach((topping) -> System.out.println(topping));
|
service.getAllToppings().stream().forEach((topping) -> System.out.println(topping));
|
||||||
|
|
||||||
CakeInfo cakeInfo = new CakeInfo(new CakeToppingInfo("candies", 0),
|
CakeInfo cakeInfo = new CakeInfo(new CakeToppingInfo("candies", 0),
|
||||||
Arrays.asList(new CakeLayerInfo("chocolate", 0), new CakeLayerInfo("chocolate", 0),
|
Arrays.asList(new CakeLayerInfo("chocolate", 0), new CakeLayerInfo("banana", 0),
|
||||||
new CakeLayerInfo("chocolate", 0)));
|
new CakeLayerInfo("strawberry", 0)));
|
||||||
try {
|
try {
|
||||||
service.bakeNewCake(cakeInfo);
|
service.bakeNewCake(cakeInfo);
|
||||||
} catch (CakeBakingException e) {
|
} catch (CakeBakingException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
service.getAllCakes().stream().forEach((cake) -> System.out.println(cake));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package com.iluwatar.layers;
|
package com.iluwatar.layers;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.persistence.CascadeType;
|
import javax.persistence.CascadeType;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.FetchType;
|
||||||
import javax.persistence.GeneratedValue;
|
import javax.persistence.GeneratedValue;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
import javax.persistence.OneToMany;
|
import javax.persistence.OneToMany;
|
||||||
@ -17,14 +18,14 @@ public class Cake {
|
|||||||
@GeneratedValue
|
@GeneratedValue
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@OneToOne(cascade = CascadeType.ALL)
|
@OneToOne(cascade=CascadeType.REMOVE)
|
||||||
private CakeTopping topping;
|
private CakeTopping topping;
|
||||||
|
|
||||||
@OneToMany(cascade = CascadeType.ALL)
|
@OneToMany(cascade=CascadeType.REMOVE, fetch=FetchType.EAGER)
|
||||||
private List<CakeLayer> layers;
|
private Set<CakeLayer> layers;
|
||||||
|
|
||||||
public Cake() {
|
public Cake() {
|
||||||
setLayers(new ArrayList<>());
|
setLayers(new HashSet<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getId() {
|
public Long getId() {
|
||||||
@ -43,15 +44,20 @@ public class Cake {
|
|||||||
this.topping = topping;
|
this.topping = topping;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<CakeLayer> getLayers() {
|
public Set<CakeLayer> getLayers() {
|
||||||
return layers;
|
return layers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLayers(List<CakeLayer> layers) {
|
public void setLayers(Set<CakeLayer> layers) {
|
||||||
this.layers = layers;
|
this.layers = layers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addLayer(CakeLayer layer) {
|
public void addLayer(CakeLayer layer) {
|
||||||
this.layers.add(layer);
|
this.layers.add(layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("id=%s topping=%s layers=%s", id, topping, layers.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import java.util.List;
|
|||||||
public interface CakeBakingService {
|
public interface CakeBakingService {
|
||||||
|
|
||||||
void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException;
|
void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException;
|
||||||
|
|
||||||
|
List<CakeInfo> getAllCakes();
|
||||||
|
|
||||||
void saveNewTopping(CakeToppingInfo toppingInfo);
|
void saveNewTopping(CakeToppingInfo toppingInfo);
|
||||||
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package com.iluwatar.layers;
|
package com.iluwatar.layers;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.springframework.context.support.AbstractApplicationContext;
|
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));
|
throw new CakeBakingException(String.format("Topping %s is not available", cakeInfo.cakeToppingInfo.name));
|
||||||
}
|
}
|
||||||
List<CakeLayer> allLayers = getAllLayerEntities();
|
List<CakeLayer> allLayers = getAllLayerEntities();
|
||||||
List<CakeLayer> foundLayers = new ArrayList<>();
|
Set<CakeLayer> foundLayers = new HashSet<>();
|
||||||
for (CakeLayerInfo info: cakeInfo.cakeLayerInfos) {
|
for (CakeLayerInfo info: cakeInfo.cakeLayerInfos) {
|
||||||
Optional<CakeLayer> found = allLayers.stream().filter((layer) -> layer.getName().equals(info.name)).findFirst();
|
Optional<CakeLayer> found = allLayers.stream().filter((layer) -> layer.getName().equals(info.name)).findFirst();
|
||||||
if (!found.isPresent()) {
|
if (!found.isPresent()) {
|
||||||
@ -43,14 +45,16 @@ public class CakeBakingServiceImpl implements CakeBakingService {
|
|||||||
CakeTopping topping = toppingBean.findOne(matchingToppings.iterator().next().id.get());
|
CakeTopping topping = toppingBean.findOne(matchingToppings.iterator().next().id.get());
|
||||||
CakeDao cakeBean = context.getBean(CakeDao.class);
|
CakeDao cakeBean = context.getBean(CakeDao.class);
|
||||||
Cake cake = new Cake();
|
Cake cake = new Cake();
|
||||||
cake = cakeBean.save(cake);
|
|
||||||
cake.setTopping(topping);
|
cake.setTopping(topping);
|
||||||
topping.setCake(cake);
|
|
||||||
cake.setLayers(foundLayers);
|
cake.setLayers(foundLayers);
|
||||||
|
cakeBean.save(cake);
|
||||||
|
topping.setCake(cake);
|
||||||
|
toppingBean.save(topping);
|
||||||
|
CakeLayerDao layerBean = context.getBean(CakeLayerDao.class);
|
||||||
for (CakeLayer layer: foundLayers) {
|
for (CakeLayer layer: foundLayers) {
|
||||||
layer.setCake(cake);
|
layer.setCake(cake);
|
||||||
|
layerBean.save(layer);
|
||||||
}
|
}
|
||||||
cakeBean.save(cake);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -108,4 +112,23 @@ public class CakeBakingServiceImpl implements CakeBakingService {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CakeInfo> getAllCakes() {
|
||||||
|
CakeDao cakeBean = context.getBean(CakeDao.class);
|
||||||
|
List<CakeInfo> result = new ArrayList<>();
|
||||||
|
Iterator<Cake> 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<CakeLayerInfo> cakeLayerInfos = new ArrayList<CakeLayerInfo>();
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,4 +20,9 @@ public class CakeInfo {
|
|||||||
this.cakeToppingInfo = cakeToppingInfo;
|
this.cakeToppingInfo = cakeToppingInfo;
|
||||||
this.cakeLayerInfos = cakeLayerInfos;
|
this.cakeLayerInfos = cakeLayerInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("CakeInfo id=%d topping=%s layers=%s", id.get(), cakeToppingInfo, cakeLayerInfos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ public class CakeLayer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
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() {
|
public Cake getCake() {
|
||||||
|
@ -22,6 +22,6 @@ public class CakeLayerInfo {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ public class CakeTopping {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
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() {
|
public Cake getCake() {
|
||||||
|
@ -22,6 +22,6 @@ public class CakeToppingInfo {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user