Skip to content

Commit aa04e7c

Browse files
committed
iluwatar#84 More work on cake baking
1 parent 913b4fa commit aa04e7c

File tree

9 files changed

+55
-18
lines changed

9 files changed

+55
-18
lines changed

layers/src/main/java/com/iluwatar/layers/App.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ public static void main(String[] args) {
1616
service.getAllToppings().stream().forEach((topping) -> System.out.println(topping));
1717

1818
CakeInfo cakeInfo = new CakeInfo(new CakeToppingInfo("candies", 0),
19-
Arrays.asList(new CakeLayerInfo("chocolate", 0), new CakeLayerInfo("chocolate", 0),
20-
new CakeLayerInfo("chocolate", 0)));
19+
Arrays.asList(new CakeLayerInfo("chocolate", 0), new CakeLayerInfo("banana", 0),
20+
new CakeLayerInfo("strawberry", 0)));
2121
try {
2222
service.bakeNewCake(cakeInfo);
2323
} catch (CakeBakingException e) {
2424
e.printStackTrace();
2525
}
26+
service.getAllCakes().stream().forEach((cake) -> System.out.println(cake));
2627
}
2728
}

layers/src/main/java/com/iluwatar/layers/Cake.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.iluwatar.layers;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
3+
import java.util.HashSet;
4+
import java.util.Set;
55

66
import javax.persistence.CascadeType;
77
import javax.persistence.Entity;
8+
import javax.persistence.FetchType;
89
import javax.persistence.GeneratedValue;
910
import javax.persistence.Id;
1011
import javax.persistence.OneToMany;
@@ -17,14 +18,14 @@ public class Cake {
1718
@GeneratedValue
1819
private Long id;
1920

20-
@OneToOne(cascade = CascadeType.ALL)
21+
@OneToOne(cascade=CascadeType.REMOVE)
2122
private CakeTopping topping;
2223

23-
@OneToMany(cascade = CascadeType.ALL)
24-
private List<CakeLayer> layers;
24+
@OneToMany(cascade=CascadeType.REMOVE, fetch=FetchType.EAGER)
25+
private Set<CakeLayer> layers;
2526

2627
public Cake() {
27-
setLayers(new ArrayList<>());
28+
setLayers(new HashSet<>());
2829
}
2930

3031
public Long getId() {
@@ -43,15 +44,20 @@ public void setTopping(CakeTopping topping) {
4344
this.topping = topping;
4445
}
4546

46-
public List<CakeLayer> getLayers() {
47+
public Set<CakeLayer> getLayers() {
4748
return layers;
4849
}
4950

50-
public void setLayers(List<CakeLayer> layers) {
51+
public void setLayers(Set<CakeLayer> layers) {
5152
this.layers = layers;
5253
}
5354

5455
public void addLayer(CakeLayer layer) {
5556
this.layers.add(layer);
5657
}
58+
59+
@Override
60+
public String toString() {
61+
return String.format("id=%s topping=%s layers=%s", id, topping, layers.toString());
62+
}
5763
}

layers/src/main/java/com/iluwatar/layers/CakeBakingService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
public interface CakeBakingService {
66

77
void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException;
8+
9+
List<CakeInfo> getAllCakes();
810

911
void saveNewTopping(CakeToppingInfo toppingInfo);
1012

layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.iluwatar.layers;
22

33
import java.util.ArrayList;
4+
import java.util.HashSet;
45
import java.util.Iterator;
56
import java.util.List;
67
import java.util.Optional;
8+
import java.util.Set;
79
import java.util.stream.Collectors;
810

911
import org.springframework.context.support.AbstractApplicationContext;
@@ -30,7 +32,7 @@ public void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException {
3032
throw new CakeBakingException(String.format("Topping %s is not available", cakeInfo.cakeToppingInfo.name));
3133
}
3234
List<CakeLayer> allLayers = getAllLayerEntities();
33-
List<CakeLayer> foundLayers = new ArrayList<>();
35+
Set<CakeLayer> foundLayers = new HashSet<>();
3436
for (CakeLayerInfo info: cakeInfo.cakeLayerInfos) {
3537
Optional<CakeLayer> found = allLayers.stream().filter((layer) -> layer.getName().equals(info.name)).findFirst();
3638
if (!found.isPresent()) {
@@ -43,14 +45,16 @@ public void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException {
4345
CakeTopping topping = toppingBean.findOne(matchingToppings.iterator().next().id.get());
4446
CakeDao cakeBean = context.getBean(CakeDao.class);
4547
Cake cake = new Cake();
46-
cake = cakeBean.save(cake);
4748
cake.setTopping(topping);
48-
topping.setCake(cake);
4949
cake.setLayers(foundLayers);
50+
cakeBean.save(cake);
51+
topping.setCake(cake);
52+
toppingBean.save(topping);
53+
CakeLayerDao layerBean = context.getBean(CakeLayerDao.class);
5054
for (CakeLayer layer: foundLayers) {
5155
layer.setCake(cake);
56+
layerBean.save(layer);
5257
}
53-
cakeBean.save(cake);
5458
}
5559

5660
@Override
@@ -108,4 +112,23 @@ public List<CakeLayerInfo> getAllLayers() {
108112
}
109113
return result;
110114
}
115+
116+
@Override
117+
public List<CakeInfo> getAllCakes() {
118+
CakeDao cakeBean = context.getBean(CakeDao.class);
119+
List<CakeInfo> result = new ArrayList<>();
120+
Iterator<Cake> iterator = cakeBean.findAll().iterator();
121+
while (iterator.hasNext()) {
122+
Cake cake = iterator.next();
123+
CakeToppingInfo cakeToppingInfo = new CakeToppingInfo(cake.getTopping().getId(),
124+
cake.getTopping().getName(), cake.getTopping().getCalories());
125+
ArrayList<CakeLayerInfo> cakeLayerInfos = new ArrayList<CakeLayerInfo>();
126+
for (CakeLayer layer: cake.getLayers()) {
127+
cakeLayerInfos.add(new CakeLayerInfo(layer.getId(), layer.getName(), layer.getCalories()));
128+
}
129+
CakeInfo cakeInfo = new CakeInfo(cake.getId(), cakeToppingInfo, cakeLayerInfos);
130+
result.add(cakeInfo);
131+
}
132+
return result;
133+
}
111134
}

layers/src/main/java/com/iluwatar/layers/CakeInfo.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,9 @@ public CakeInfo(CakeToppingInfo cakeToppingInfo, List<CakeLayerInfo> cakeLayerIn
2020
this.cakeToppingInfo = cakeToppingInfo;
2121
this.cakeLayerInfos = cakeLayerInfos;
2222
}
23+
24+
@Override
25+
public String toString() {
26+
return String.format("CakeInfo id=%d topping=%s layers=%s", id.get(), cakeToppingInfo, cakeLayerInfos);
27+
}
2328
}

layers/src/main/java/com/iluwatar/layers/CakeLayer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void setCalories(int calories) {
5454

5555
@Override
5656
public String toString() {
57-
return String.format("name: %s calories: %d", name, calories);
57+
return String.format("id=%s name=%s calories=%d", id, name, calories);
5858
}
5959

6060
public Cake getCake() {

layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ public CakeLayerInfo(String name, int calories) {
2222

2323
@Override
2424
public String toString() {
25-
return String.format("CakeLayerInfo name: %s calories: %d", name, calories);
25+
return String.format("CakeLayerInfo id=%d name=%s calories=%d", id.get(), name, calories);
2626
}
2727
}

layers/src/main/java/com/iluwatar/layers/CakeTopping.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void setCalories(int calories) {
5454

5555
@Override
5656
public String toString() {
57-
return String.format("name: %s calories: %d", name, calories);
57+
return String.format("id=%s name=%s calories=%d", name, calories);
5858
}
5959

6060
public Cake getCake() {

layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ public CakeToppingInfo(String name, int calories) {
2222

2323
@Override
2424
public String toString() {
25-
return String.format("CakeToppingInfo name: %s calories: %d", name, calories);
25+
return String.format("CakeToppingInfo id=%d name=%s calories=%d", id.get(), name, calories);
2626
}
2727
}

0 commit comments

Comments
 (0)