Skip to content

Commit 913b4fa

Browse files
committed
#84 Work on cake baking
1 parent 8f5b1b0 commit 913b4fa

File tree

9 files changed

+96
-19
lines changed

9 files changed

+96
-19
lines changed

layers/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<dependency>
1515
<groupId>org.springframework.data</groupId>
1616
<artifactId>spring-data-jpa</artifactId>
17-
</dependency>
17+
</dependency>
1818
<dependency>
1919
<groupId>org.hibernate</groupId>
2020
<artifactId>hibernate-entitymanager</artifactId>
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
package com.iluwatar.layers;
22

3+
import java.util.Arrays;
4+
35
public class App {
46

57
public static void main(String[] args) {
68

79
CakeBakingService service = new CakeBakingServiceImpl();
8-
service.saveNewLayer(new CakeLayerInfo("foo", 1));
9-
service.saveNewLayer(new CakeLayerInfo("bar", 2));
10+
service.saveNewLayer(new CakeLayerInfo("chocolate", 1200));
11+
service.saveNewLayer(new CakeLayerInfo("banana", 900));
12+
service.saveNewLayer(new CakeLayerInfo("strawberry", 950));
1013
service.getAllLayers().stream().forEach((layer) -> System.out.println(layer));
1114

12-
service.saveNewTopping(new CakeToppingInfo("hoi", 11));
15+
service.saveNewTopping(new CakeToppingInfo("candies", 350));
1316
service.getAllToppings().stream().forEach((topping) -> System.out.println(topping));
1417

18+
CakeInfo cakeInfo = new CakeInfo(new CakeToppingInfo("candies", 0),
19+
Arrays.asList(new CakeLayerInfo("chocolate", 0), new CakeLayerInfo("chocolate", 0),
20+
new CakeLayerInfo("chocolate", 0)));
21+
try {
22+
service.bakeNewCake(cakeInfo);
23+
} catch (CakeBakingException e) {
24+
e.printStackTrace();
25+
}
1526
}
1627
}

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

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.ArrayList;
44
import java.util.List;
55

6+
import javax.persistence.CascadeType;
67
import javax.persistence.Entity;
78
import javax.persistence.GeneratedValue;
89
import javax.persistence.Id;
@@ -16,10 +17,10 @@ public class Cake {
1617
@GeneratedValue
1718
private Long id;
1819

19-
@OneToOne
20+
@OneToOne(cascade = CascadeType.ALL)
2021
private CakeTopping topping;
2122

22-
@OneToMany
23+
@OneToMany(cascade = CascadeType.ALL)
2324
private List<CakeLayer> layers;
2425

2526
public Cake() {
@@ -49,4 +50,8 @@ public List<CakeLayer> getLayers() {
4950
public void setLayers(List<CakeLayer> layers) {
5051
this.layers = layers;
5152
}
53+
54+
public void addLayer(CakeLayer layer) {
55+
this.layers.add(layer);
56+
}
5257
}

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

+42-10
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88

99
import org.springframework.context.support.AbstractApplicationContext;
1010
import org.springframework.context.support.ClassPathXmlApplicationContext;
11+
import org.springframework.stereotype.Service;
12+
import org.springframework.transaction.annotation.Transactional;
1113

14+
@Service
15+
@Transactional
1216
public class CakeBakingServiceImpl implements CakeBakingService {
1317

1418
private AbstractApplicationContext context;
@@ -22,23 +26,31 @@ public void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException {
2226
List<CakeToppingInfo> allToppings = getAllToppings();
2327
List<CakeToppingInfo> matchingToppings = allToppings.stream()
2428
.filter((t) -> t.name.equals(cakeInfo.cakeToppingInfo.name)).collect(Collectors.toList());
25-
if (!matchingToppings.isEmpty()) {
26-
// CakeToppingDao toppingBean = context.getBean(CakeToppingDao.class);
27-
// toppingBean.delete(matchingToppings.iterator().next().id.get());
28-
} else {
29+
if (matchingToppings.isEmpty()) {
2930
throw new CakeBakingException(String.format("Topping %s is not available", cakeInfo.cakeToppingInfo.name));
3031
}
31-
List<CakeLayerInfo> allLayers = getAllLayers();
32+
List<CakeLayer> allLayers = getAllLayerEntities();
33+
List<CakeLayer> foundLayers = new ArrayList<>();
3234
for (CakeLayerInfo info: cakeInfo.cakeLayerInfos) {
33-
Optional<CakeLayerInfo> found = allLayers.stream().filter((layer) -> layer.name.equals(info.name)).findFirst();
34-
if (found.isPresent()) {
35-
// CakeLayerDao layerBean = context.getBean(CakeLayerDao.class);
36-
// layerBean.delete(found.get().id.get());
37-
} else {
35+
Optional<CakeLayer> found = allLayers.stream().filter((layer) -> layer.getName().equals(info.name)).findFirst();
36+
if (!found.isPresent()) {
3837
throw new CakeBakingException(String.format("Layer %s is not available", info.name));
38+
} else {
39+
foundLayers.add(found.get());
3940
}
4041
}
42+
CakeToppingDao toppingBean = context.getBean(CakeToppingDao.class);
43+
CakeTopping topping = toppingBean.findOne(matchingToppings.iterator().next().id.get());
4144
CakeDao cakeBean = context.getBean(CakeDao.class);
45+
Cake cake = new Cake();
46+
cake = cakeBean.save(cake);
47+
cake.setTopping(topping);
48+
topping.setCake(cake);
49+
cake.setLayers(foundLayers);
50+
for (CakeLayer layer: foundLayers) {
51+
layer.setCake(cake);
52+
}
53+
cakeBean.save(cake);
4254
}
4355

4456
@Override
@@ -53,6 +65,16 @@ public void saveNewLayer(CakeLayerInfo layerInfo) {
5365
bean.save(new CakeLayer(layerInfo.name, layerInfo.calories));
5466
}
5567

68+
private List<CakeTopping> getAllToppingEntities() {
69+
CakeToppingDao bean = context.getBean(CakeToppingDao.class);
70+
List<CakeTopping> result = new ArrayList<>();
71+
Iterator<CakeTopping> iterator = bean.findAll().iterator();
72+
while (iterator.hasNext()) {
73+
result.add(iterator.next());
74+
}
75+
return result;
76+
}
77+
5678
@Override
5779
public List<CakeToppingInfo> getAllToppings() {
5880
CakeToppingDao bean = context.getBean(CakeToppingDao.class);
@@ -65,6 +87,16 @@ public List<CakeToppingInfo> getAllToppings() {
6587
return result;
6688
}
6789

90+
private List<CakeLayer> getAllLayerEntities() {
91+
CakeLayerDao bean = context.getBean(CakeLayerDao.class);
92+
List<CakeLayer> result = new ArrayList<>();
93+
Iterator<CakeLayer> iterator = bean.findAll().iterator();
94+
while (iterator.hasNext()) {
95+
result.add(iterator.next());
96+
}
97+
return result;
98+
}
99+
68100
@Override
69101
public List<CakeLayerInfo> getAllLayers() {
70102
CakeLayerDao bean = context.getBean(CakeLayerDao.class);

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

+13
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.iluwatar.layers;
22

3+
import javax.persistence.CascadeType;
34
import javax.persistence.Entity;
45
import javax.persistence.GeneratedValue;
56
import javax.persistence.Id;
7+
import javax.persistence.ManyToOne;
68

79
@Entity
810
public class CakeLayer {
@@ -14,6 +16,9 @@ public class CakeLayer {
1416
private String name;
1517

1618
private int calories;
19+
20+
@ManyToOne(cascade = CascadeType.ALL)
21+
private Cake cake;
1722

1823
public CakeLayer() {
1924
}
@@ -51,4 +56,12 @@ public void setCalories(int calories) {
5156
public String toString() {
5257
return String.format("name: %s calories: %d", name, calories);
5358
}
59+
60+
public Cake getCake() {
61+
return cake;
62+
}
63+
64+
public void setCake(Cake cake) {
65+
this.cake = cake;
66+
}
5467
}

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

+1-1
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("name: %s calories: %d", name, calories);
25+
return String.format("CakeLayerInfo name: %s calories: %d", name, calories);
2626
}
2727
}

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

+13
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.iluwatar.layers;
22

3+
import javax.persistence.CascadeType;
34
import javax.persistence.Entity;
45
import javax.persistence.GeneratedValue;
56
import javax.persistence.Id;
7+
import javax.persistence.OneToOne;
68

79
@Entity
810
public class CakeTopping {
@@ -15,6 +17,9 @@ public class CakeTopping {
1517

1618
private int calories;
1719

20+
@OneToOne(cascade = CascadeType.ALL)
21+
private Cake cake;
22+
1823
public CakeTopping() {
1924
}
2025

@@ -51,4 +56,12 @@ public void setCalories(int calories) {
5156
public String toString() {
5257
return String.format("name: %s calories: %d", name, calories);
5358
}
59+
60+
public Cake getCake() {
61+
return cake;
62+
}
63+
64+
public void setCake(Cake cake) {
65+
this.cake = cake;
66+
}
5467
}

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

+1-1
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("name: %s calories: %d", name, calories);
25+
return String.format("CakeToppingInfo name: %s calories: %d", name, calories);
2626
}
2727
}

layers/src/main/resources/applicationContext.xml

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
77
xsi:schemaLocation="
88
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
9-
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd">
9+
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
1010

1111
<jpa:repositories base-package="com.iluwatar" />
1212

13+
<tx:annotation-driven transaction-manager="transactionManager" />
14+
1315
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
1416
<property name="entityManagerFactory" ref="entityManagerFactory" />
1517
</bean>
@@ -33,6 +35,7 @@
3335
<map>
3436
<entry key="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
3537
<entry key="hibernate.hbm2ddl.auto" value="create-drop" />
38+
<entry key="hibernate.show_sql" value="true" />
3639
</map>
3740
</property>
3841
</bean>

0 commit comments

Comments
 (0)