11package com .iluwatar .layers ;
22
33import java .util .ArrayList ;
4+ import java .util .HashSet ;
45import java .util .Iterator ;
56import java .util .List ;
67import java .util .Optional ;
8+ import java .util .Set ;
79import java .util .stream .Collectors ;
810
911import 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}
0 commit comments