Skip to content

Commit

Permalink
Java 11 support for #984 #987 (l) (#1190)
Browse files Browse the repository at this point in the history
* Java 11 support: lazy-loading pattern

* Java 11 support: layers pattern

* Java 11 support: leader-election/lazy-loading patterns
  • Loading branch information
npczwh committed Mar 22, 2020
1 parent 0ad67c8 commit 67edeb8
Show file tree
Hide file tree
Showing 23 changed files with 238 additions and 243 deletions.
15 changes: 7 additions & 8 deletions layers/src/main/java/com/iluwatar/layers/app/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public class App {

/**
* Application entry point.
*
*
* @param args Command line parameters
*/
public static void main(String[] args) {
Expand All @@ -93,7 +93,7 @@ public static void main(String[] args) {
initializeData(cakeBakingService);

// create view and render it
CakeViewImpl cakeView = new CakeViewImpl(cakeBakingService);
var cakeView = new CakeViewImpl(cakeBakingService);
cakeView.render();
}

Expand All @@ -111,17 +111,16 @@ private static void initializeData(CakeBakingService cakeBakingService) {
cakeBakingService.saveNewTopping(new CakeToppingInfo("candies", 350));
cakeBakingService.saveNewTopping(new CakeToppingInfo("cherry", 350));

CakeInfo cake1 =
new CakeInfo(new CakeToppingInfo("candies", 0), List.of(
new CakeLayerInfo("chocolate", 0),
new CakeLayerInfo("banana", 0),
new CakeLayerInfo("strawberry", 0)));
var cake1 = new CakeInfo(new CakeToppingInfo("candies", 0), List.of(
new CakeLayerInfo("chocolate", 0),
new CakeLayerInfo("banana", 0),
new CakeLayerInfo("strawberry", 0)));
try {
cakeBakingService.bakeNewCake(cake1);
} catch (CakeBakingException e) {
e.printStackTrace();
}
CakeInfo cake2 = new CakeInfo(new CakeToppingInfo("cherry", 0), List.of(
var cake2 = new CakeInfo(new CakeToppingInfo("cherry", 0), List.of(
new CakeLayerInfo("vanilla", 0),
new CakeLayerInfo("lemon", 0),
new CakeLayerInfo("strawberry", 0)));
Expand Down
2 changes: 1 addition & 1 deletion layers/src/main/java/com/iluwatar/layers/dto/CakeInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public CakeInfo(CakeToppingInfo cakeToppingInfo, List<CakeLayerInfo> cakeLayerIn
* Calculate calories.
*/
public int calculateTotalCalories() {
int total = cakeToppingInfo != null ? cakeToppingInfo.calories : 0;
var total = cakeToppingInfo != null ? cakeToppingInfo.calories : 0;
total += cakeLayerInfos.stream().mapToInt(c -> c.calories).sum();
return total;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,65 +60,63 @@ public CakeBakingServiceImpl() {

@Override
public void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException {
List<CakeTopping> allToppings = getAvailableToppingEntities();
List<CakeTopping> matchingToppings =
var allToppings = getAvailableToppingEntities();
var matchingToppings =
allToppings.stream().filter(t -> t.getName().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 = getAvailableLayerEntities();
var 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();
for (var info : cakeInfo.cakeLayerInfos) {
var found = allLayers.stream().filter(layer -> layer.getName().equals(info.name)).findFirst();
if (!found.isPresent()) {
throw new CakeBakingException(String.format("Layer %s is not available", info.name));
} else {
foundLayers.add(found.get());
}
}
CakeToppingDao toppingBean = context.getBean(CakeToppingDao.class);
Optional<CakeTopping> topping = toppingBean.findById(
matchingToppings.iterator().next().getId());
CakeDao cakeBean = context.getBean(CakeDao.class);
var toppingBean = context.getBean(CakeToppingDao.class);
var topping = toppingBean.findById(matchingToppings.iterator().next().getId());
var cakeBean = context.getBean(CakeDao.class);
if (topping.isPresent()) {
Cake cake = new Cake();
var cake = new Cake();
cake.setTopping(topping.get());
cake.setLayers(foundLayers);
cakeBean.save(cake);
topping.get().setCake(cake);
toppingBean.save(topping.get());
CakeLayerDao layerBean = context.getBean(CakeLayerDao.class);
for (CakeLayer layer : foundLayers) {
var layerBean = context.getBean(CakeLayerDao.class);
for (var layer : foundLayers) {
layer.setCake(cake);
layerBean.save(layer);
}
} else {
throw new CakeBakingException(String.format("Topping %s is not available",
cakeInfo.cakeToppingInfo.name));
cakeInfo.cakeToppingInfo.name));
}
}

@Override
public void saveNewTopping(CakeToppingInfo toppingInfo) {
CakeToppingDao bean = context.getBean(CakeToppingDao.class);
var bean = context.getBean(CakeToppingDao.class);
bean.save(new CakeTopping(toppingInfo.name, toppingInfo.calories));
}

@Override
public void saveNewLayer(CakeLayerInfo layerInfo) {
CakeLayerDao bean = context.getBean(CakeLayerDao.class);
var bean = context.getBean(CakeLayerDao.class);
bean.save(new CakeLayer(layerInfo.name, layerInfo.calories));
}

private List<CakeTopping> getAvailableToppingEntities() {
CakeToppingDao bean = context.getBean(CakeToppingDao.class);
var bean = context.getBean(CakeToppingDao.class);
List<CakeTopping> result = new ArrayList<>();
Iterator<CakeTopping> iterator = bean.findAll().iterator();
var iterator = bean.findAll().iterator();
while (iterator.hasNext()) {
CakeTopping topping = iterator.next();
var topping = iterator.next();
if (topping.getCake() == null) {
result.add(topping);
}
Expand All @@ -128,11 +126,11 @@ private List<CakeTopping> getAvailableToppingEntities() {

@Override
public List<CakeToppingInfo> getAvailableToppings() {
CakeToppingDao bean = context.getBean(CakeToppingDao.class);
var bean = context.getBean(CakeToppingDao.class);
List<CakeToppingInfo> result = new ArrayList<>();
Iterator<CakeTopping> iterator = bean.findAll().iterator();
var iterator = bean.findAll().iterator();
while (iterator.hasNext()) {
CakeTopping next = iterator.next();
var next = iterator.next();
if (next.getCake() == null) {
result.add(new CakeToppingInfo(next.getId(), next.getName(), next.getCalories()));
}
Expand All @@ -141,11 +139,11 @@ public List<CakeToppingInfo> getAvailableToppings() {
}

private List<CakeLayer> getAvailableLayerEntities() {
CakeLayerDao bean = context.getBean(CakeLayerDao.class);
var bean = context.getBean(CakeLayerDao.class);
List<CakeLayer> result = new ArrayList<>();
Iterator<CakeLayer> iterator = bean.findAll().iterator();
var iterator = bean.findAll().iterator();
while (iterator.hasNext()) {
CakeLayer next = iterator.next();
var next = iterator.next();
if (next.getCake() == null) {
result.add(next);
}
Expand All @@ -155,11 +153,11 @@ private List<CakeLayer> getAvailableLayerEntities() {

@Override
public List<CakeLayerInfo> getAvailableLayers() {
CakeLayerDao bean = context.getBean(CakeLayerDao.class);
var bean = context.getBean(CakeLayerDao.class);
List<CakeLayerInfo> result = new ArrayList<>();
Iterator<CakeLayer> iterator = bean.findAll().iterator();
var iterator = bean.findAll().iterator();
while (iterator.hasNext()) {
CakeLayer next = iterator.next();
var next = iterator.next();
if (next.getCake() == null) {
result.add(new CakeLayerInfo(next.getId(), next.getName(), next.getCalories()));
}
Expand All @@ -169,19 +167,19 @@ public List<CakeLayerInfo> getAvailableLayers() {

@Override
public List<CakeInfo> getAllCakes() {
CakeDao cakeBean = context.getBean(CakeDao.class);
var cakeBean = context.getBean(CakeDao.class);
List<CakeInfo> result = new ArrayList<>();
Iterator<Cake> iterator = cakeBean.findAll().iterator();
var iterator = cakeBean.findAll().iterator();
while (iterator.hasNext()) {
Cake cake = iterator.next();
CakeToppingInfo cakeToppingInfo =
var cake = iterator.next();
var cakeToppingInfo =
new CakeToppingInfo(cake.getTopping().getId(), cake.getTopping().getName(), cake
.getTopping().getCalories());
List<CakeLayerInfo> cakeLayerInfos = new ArrayList<>();
for (CakeLayer layer : cake.getLayers()) {
for (var layer : cake.getLayers()) {
cakeLayerInfos.add(new CakeLayerInfo(layer.getId(), layer.getName(), layer.getCalories()));
}
CakeInfo cakeInfo = new CakeInfo(cake.getId(), cakeToppingInfo, cakeLayerInfos);
var cakeInfo = new CakeInfo(cake.getId(), cakeToppingInfo, cakeLayerInfos);
result.add(cakeInfo);
}
return result;
Expand Down
24 changes: 12 additions & 12 deletions layers/src/test/java/com/iluwatar/layers/entity/CakeTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,31 +45,31 @@ public class CakeTest {

@Test
public void testSetId() {
final Cake cake = new Cake();
final var cake = new Cake();
assertNull(cake.getId());

final Long expectedId = 1234L;
final var expectedId = 1234L;
cake.setId(expectedId);
assertEquals(expectedId, cake.getId());
}

@Test
public void testSetTopping() {
final Cake cake = new Cake();
final var cake = new Cake();
assertNull(cake.getTopping());

final CakeTopping expectedTopping = new CakeTopping("DummyTopping", 1000);
final var expectedTopping = new CakeTopping("DummyTopping", 1000);
cake.setTopping(expectedTopping);
assertEquals(expectedTopping, cake.getTopping());
}

@Test
public void testSetLayers() {
final Cake cake = new Cake();
final var cake = new Cake();
assertNotNull(cake.getLayers());
assertTrue(cake.getLayers().isEmpty());

final Set<CakeLayer> expectedLayers = Set.of(
final var expectedLayers = Set.of(
new CakeLayer("layer1", 1000),
new CakeLayer("layer2", 2000),
new CakeLayer("layer3", 3000));
Expand All @@ -79,7 +79,7 @@ public void testSetLayers() {

@Test
public void testAddLayer() {
final Cake cake = new Cake();
final var cake = new Cake();
assertNotNull(cake.getLayers());
assertTrue(cake.getLayers().isEmpty());

Expand All @@ -90,7 +90,7 @@ public void testAddLayer() {
cake.setLayers(initialLayers);
assertEquals(initialLayers, cake.getLayers());

final CakeLayer newLayer = new CakeLayer("layer3", 3000);
final var newLayer = new CakeLayer("layer3", 3000);
cake.addLayer(newLayer);

final Set<CakeLayer> expectedLayers = new HashSet<>();
Expand All @@ -102,18 +102,18 @@ public void testAddLayer() {

@Test
public void testToString() {
final CakeTopping topping = new CakeTopping("topping", 20);
final var topping = new CakeTopping("topping", 20);
topping.setId(2345L);

final CakeLayer layer = new CakeLayer("layer", 100);
final var layer = new CakeLayer("layer", 100);
layer.setId(3456L);

final Cake cake = new Cake();
final var cake = new Cake();
cake.setId(1234L);
cake.setTopping(topping);
cake.addLayer(layer);

final String expected = "id=1234 topping=id=2345 name=topping calories=20 "
final var expected = "id=1234 topping=id=2345 name=topping calories=20 "
+ "layers=[id=3456 name=layer calories=100]";
assertEquals(expected, cake.toString());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ public class CakeBakingExceptionTest {

@Test
public void testConstructor() {
final CakeBakingException exception = new CakeBakingException();
final var exception = new CakeBakingException();
assertNull(exception.getMessage());
assertNull(exception.getCause());
}

@Test
public void testConstructorWithMessage() {
final String expectedMessage = "message";
final CakeBakingException exception = new CakeBakingException(expectedMessage);
final var expectedMessage = "message";
final var exception = new CakeBakingException(expectedMessage);
assertEquals(expectedMessage, exception.getMessage());
assertNull(exception.getCause());
}
Expand Down

0 comments on commit 67edeb8

Please sign in to comment.