Resolves checkstyle errors for trampoline twin typeobjectpattern unit-of-work value-object (#1074)

* Reduces checkstyle errors in trampoline

* Reduces checkstyle errors in twin

* Reduces checkstyle errors in typeobjectpattern

* Reduces checkstyle errors in unit-of-work

* Reduces checkstyle errors in value-object
This commit is contained in:
Anurag Agarwal 2019-11-10 23:17:32 +05:30 committed by Ilkka Seppälä
parent b92eb5229d
commit f0f0143d48
17 changed files with 146 additions and 133 deletions

View File

@ -26,12 +26,14 @@ package com.iluwatar.trampoline;
import java.util.stream.Stream; import java.util.stream.Stream;
/** /**
* <p>Trampoline pattern allows to define recursive algorithms by iterative loop </p> * Trampoline pattern allows to define recursive algorithms by iterative loop.
*
* <p>When get is called on the returned Trampoline, internally it will iterate calling jump * <p>When get is called on the returned Trampoline, internally it will iterate calling jump
* on the returned Trampoline as long as the concrete instance returned is {@link #more(Trampoline)}, * on the returned Trampoline as long as the concrete instance returned is {@link
* stopping once the returned instance is {@link #done(Object)}.</p> * #more(Trampoline)}, stopping once the returned instance is {@link #done(Object)}.
*
* <p>Essential we convert looping via recursion into iteration, * <p>Essential we convert looping via recursion into iteration,
* the key enabling mechanism is the fact that {@link #more(Trampoline)} is a lazy operation.</p> * the key enabling mechanism is the fact that {@link #more(Trampoline)} is a lazy operation.
* *
* @param <T> is type for returning result. * @param <T> is type for returning result.
*/ */
@ -40,6 +42,8 @@ public interface Trampoline<T> {
/** /**
* Jump to next stage.
*
* @return next stage * @return next stage
*/ */
default Trampoline<T> jump() { default Trampoline<T> jump() {
@ -52,6 +56,8 @@ public interface Trampoline<T> {
} }
/** /**
* Checks if complete.
*
* @return true if complete * @return true if complete
*/ */
default boolean complete() { default boolean complete() {
@ -59,7 +65,7 @@ public interface Trampoline<T> {
} }
/** /**
* Created a completed Trampoline * Created a completed Trampoline.
* *
* @param result Completed result * @param result Completed result
* @return Completed Trampoline * @return Completed Trampoline
@ -70,7 +76,7 @@ public interface Trampoline<T> {
/** /**
* Create a Trampoline that has more work to do * Create a Trampoline that has more work to do.
* *
* @param trampoline Next stage in Trampoline * @param trampoline Next stage in Trampoline
* @return Trampoline with more work * @return Trampoline with more work

View File

@ -23,20 +23,21 @@
package com.iluwatar.trampoline; package com.iluwatar.trampoline;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
* <p>Trampoline pattern allows to define recursive algorithms by iterative loop </p> * Trampoline pattern allows to define recursive algorithms by iterative loop.
* <p>it is possible to implement algorithms recursively in Java without blowing the stack *
* and to interleave the execution of functions without hard coding them together or even using threads.</p> * <p>It is possible to implement algorithms recursively in Java without blowing the stack
* and to interleave the execution of functions without hard coding them together or even using
* threads.
*/ */
@Slf4j @Slf4j
public class TrampolineApp { public class TrampolineApp {
/** /**
* Main program for showing pattern. It does loop with factorial function. * Main program for showing pattern. It does loop with factorial function.
* */ */
public static void main(String[] args) { public static void main(String[] args) {
log.info("start pattern"); log.info("start pattern");
Integer result = loop(10, 1).result(); Integer result = loop(10, 1).result();

View File

@ -26,17 +26,17 @@ package com.iluwatar.twin;
/** /**
* Twin pattern is a design pattern which provides a standard solution to simulate multiple * Twin pattern is a design pattern which provides a standard solution to simulate multiple
* inheritance in java. * inheritance in java.
* <p> *
* In this example, the essence of the Twin pattern is the {@link BallItem} class and * <p>In this example, the essence of the Twin pattern is the {@link BallItem} class and {@link
* {@link BallThread} class represent the twin objects to coordinate with each other(via the twin * BallThread} class represent the twin objects to coordinate with each other(via the twin
* reference) like a single class inheriting from {@link GameItem} and {@link Thread}. * reference) like a single class inheriting from {@link GameItem} and {@link Thread}.
*/ */
public class App { public class App {
/** /**
* Program entry point * Program entry point.
* *
* @param args command line args * @param args command line args
*/ */
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {

View File

@ -29,7 +29,6 @@ import org.slf4j.LoggerFactory;
/** /**
* This class is a UI thread for drawing the {@link BallItem}, and provide the method for suspend * This class is a UI thread for drawing the {@link BallItem}, and provide the method for suspend
* and resume. It hold the reference of {@link BallItem} to delegate the draw task. * and resume. It hold the reference of {@link BallItem} to delegate the draw task.
*
*/ */
public class BallThread extends Thread { public class BallThread extends Thread {
@ -47,7 +46,7 @@ public class BallThread extends Thread {
} }
/** /**
* Run the thread * Run the thread.
*/ */
public void run() { public void run() {

View File

@ -34,7 +34,7 @@ public abstract class GameItem {
private static final Logger LOGGER = LoggerFactory.getLogger(GameItem.class); private static final Logger LOGGER = LoggerFactory.getLogger(GameItem.class);
/** /**
* Template method, do some common logic before draw * Template method, do some common logic before draw.
*/ */
public void draw() { public void draw() {
LOGGER.info("draw"); LOGGER.info("draw");

View File

@ -29,8 +29,9 @@ import org.json.simple.parser.ParseException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
/**<p>Type object pattern is the pattern we use when the OOP concept of creating a base class and /**
* inheriting from it just doesn't work for the case in hand. This happens when we either don't know * <p>Type object pattern is the pattern we use when the OOP concept of creating a base class and
* inheriting from it just doesn't work for the case in hand. This happens when we either don't know
* what types we will need upfront, or want to be able to modify or add new types conveniently w/o * what types we will need upfront, or want to be able to modify or add new types conveniently w/o
* recompiling repeatedly. The pattern provides a solution by allowing flexible creation of required * recompiling repeatedly. The pattern provides a solution by allowing flexible creation of required
* objects by creating one class, which has a field which represents the 'type' of the object.</p> * objects by creating one class, which has a field which represents the 'type' of the object.</p>
@ -40,17 +41,19 @@ import org.slf4j.LoggerFactory;
* Type. We have a json file {@link candy} which contains the details about the candies, and this is * Type. We have a json file {@link candy} which contains the details about the candies, and this is
* parsed to get all the different candies in {@link JsonParser}. The {@link Cell} class is what the * parsed to get all the different candies in {@link JsonParser}. The {@link Cell} class is what the
* game matrix is made of, which has the candies that are to be crushed, and contains information on * game matrix is made of, which has the candies that are to be crushed, and contains information on
* how crushing can be done, how the matrix is to be reconfigured and how points are to be gained. * how crushing can be done, how the matrix is to be reconfigured and how points are to be gained.
* The {@link CellPool} class is a pool which reuses the candy cells that have been crushed instead * The {@link CellPool} class is a pool which reuses the candy cells that have been crushed instead
* of making new ones repeatedly. The {@link CandyGame} class has the rules for the continuation of * of making new ones repeatedly. The {@link CandyGame} class has the rules for the continuation of
* the game and the {@link App} class has the game itself.</p> * the game and the {@link App} class has the game itself.</p>
*/ */
public class App { public class App {
private static final Logger LOGGER = LoggerFactory.getLogger(App.class); private static final Logger LOGGER = LoggerFactory.getLogger(App.class);
/** /**
* Program entry point. * Program entry point.
*
* @param args command line args * @param args command line args
*/ */
public static void main(String[] args) throws FileNotFoundException, IOException, ParseException { public static void main(String[] args) throws FileNotFoundException, IOException, ParseException {
@ -61,7 +64,7 @@ public class App {
var start = System.currentTimeMillis(); var start = System.currentTimeMillis();
var end = System.currentTimeMillis(); var end = System.currentTimeMillis();
var round = 0; var round = 0;
while (pointsWon < toWin && end - start < givenTime) { while (pointsWon < toWin && end - start < givenTime) {
round++; round++;
var pool = new CellPool(numOfRows * numOfRows + 5); var pool = new CellPool(numOfRows * numOfRows + 5);
var cg = new CandyGame(numOfRows, pool); var cg = new CandyGame(numOfRows, pool);
@ -72,7 +75,7 @@ public class App {
} }
cg.printGameStatus(); cg.printGameStatus();
end = System.currentTimeMillis(); end = System.currentTimeMillis();
cg.round((int)(end - start), givenTime); cg.round((int) (end - start), givenTime);
pointsWon += cg.totalPoints; pointsWon += cg.totalPoints;
end = System.currentTimeMillis(); end = System.currentTimeMillis();
} }

View File

@ -24,20 +24,22 @@
package com.iluwatar.typeobject; package com.iluwatar.typeobject;
/** /**
* The Candy class has a field type, which represents the 'type' of candy. The objects * The Candy class has a field type, which represents the 'type' of candy. The objects are created
* are created by parsing the candy.json file. * by parsing the candy.json file.
*/ */
public class Candy { public class Candy {
enum Type { crushableCandy, rewardFruit }; enum Type {
crushableCandy,
rewardFruit
}
String name; String name;
Candy parent; Candy parent;
String parentName; String parentName;
private int points; private int points;
private Type type; private Type type;
Candy(String name, String parentName, Type type, int points) { Candy(String name, String parentName, Type type, int points) {
this.name = name; this.name = name;
this.parent = null; this.parent = null;
@ -45,15 +47,15 @@ public class Candy {
this.points = points; this.points = points;
this.parentName = parentName; this.parentName = parentName;
} }
int getPoints() { int getPoints() {
return this.points; return this.points;
} }
void setPoints(int a) { void setPoints(int a) {
this.points = a; this.points = a;
} }
Type getType() { Type getType() {
return this.type; return this.type;
} }

View File

@ -23,24 +23,24 @@
package com.iluwatar.typeobject; package com.iluwatar.typeobject;
import java.util.ArrayList;
import com.iluwatar.typeobject.Candy.Type; import com.iluwatar.typeobject.Candy.Type;
import java.util.ArrayList;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
/** /**
* The CandyGame class contains the rules for the continuation of the game and has * The CandyGame class contains the rules for the continuation of the game and has the game matrix
* the game matrix (field 'cells') and totalPoints gained during the game. * (field 'cells') and totalPoints gained during the game.
*/ */
public class CandyGame { public class CandyGame {
private static final Logger LOGGER = LoggerFactory.getLogger(CandyGame.class); private static final Logger LOGGER = LoggerFactory.getLogger(CandyGame.class);
Cell[][] cells; Cell[][] cells;
CellPool pool; CellPool pool;
int totalPoints; int totalPoints;
CandyGame(int num, CellPool pool) { CandyGame(int num, CellPool pool) {
this.cells = new Cell[num][num]; this.cells = new Cell[num][num];
this.pool = pool; this.pool = pool;
@ -48,12 +48,12 @@ public class CandyGame {
for (var i = 0; i < num; i++) { for (var i = 0; i < num; i++) {
for (var j = 0; j < num; j++) { for (var j = 0; j < num; j++) {
this.cells[i][j] = this.pool.getNewCell(); this.cells[i][j] = this.pool.getNewCell();
this.cells[i][j].xIndex = j; this.cells[i][j].positionX = j;
this.cells[i][j].yIndex = i; this.cells[i][j].positionY = i;
} }
} }
} }
static String numOfSpaces(int num) { static String numOfSpaces(int num) {
String result = ""; String result = "";
for (var i = 0; i < num; i++) { for (var i = 0; i < num; i++) {
@ -61,7 +61,7 @@ public class CandyGame {
} }
return result; return result;
} }
void printGameStatus() { void printGameStatus() {
LOGGER.info(""); LOGGER.info("");
for (var i = 0; i < cells.length; i++) { for (var i = 0; i < cells.length; i++) {
@ -79,32 +79,32 @@ public class CandyGame {
} }
LOGGER.info(""); LOGGER.info("");
} }
ArrayList<Cell> adjacentCells(int yIndex, int xIndex) { ArrayList<Cell> adjacentCells(int y, int x) {
ArrayList<Cell> adjacent = new ArrayList<Cell>(); ArrayList<Cell> adjacent = new ArrayList<Cell>();
if (yIndex == 0) { if (y == 0) {
adjacent.add(this.cells[1][xIndex]); adjacent.add(this.cells[1][x]);
} }
if (xIndex == 0) { if (x == 0) {
adjacent.add(this.cells[yIndex][1]); adjacent.add(this.cells[y][1]);
} }
if (yIndex == cells.length - 1) { if (y == cells.length - 1) {
adjacent.add(this.cells[cells.length - 2][xIndex]); adjacent.add(this.cells[cells.length - 2][x]);
} }
if (xIndex == cells.length - 1) { if (x == cells.length - 1) {
adjacent.add(this.cells[yIndex][cells.length - 2]); adjacent.add(this.cells[y][cells.length - 2]);
} }
if (yIndex > 0 && yIndex < cells.length - 1) { if (y > 0 && y < cells.length - 1) {
adjacent.add(this.cells[yIndex - 1][xIndex]); adjacent.add(this.cells[y - 1][x]);
adjacent.add(this.cells[yIndex + 1][xIndex]); adjacent.add(this.cells[y + 1][x]);
} }
if (xIndex > 0 && xIndex < cells.length - 1) { if (x > 0 && x < cells.length - 1) {
adjacent.add(this.cells[yIndex][xIndex - 1]); adjacent.add(this.cells[y][x - 1]);
adjacent.add(this.cells[yIndex][xIndex + 1]); adjacent.add(this.cells[y][x + 1]);
} }
return adjacent; return adjacent;
} }
boolean continueRound() { boolean continueRound() {
for (var i = 0; i < this.cells.length; i++) { for (var i = 0; i < this.cells.length; i++) {
if (this.cells[cells.length - 1][i].candy.getType().equals(Type.rewardFruit)) { if (this.cells[cells.length - 1][i].candy.getType().equals(Type.rewardFruit)) {
@ -114,7 +114,7 @@ public class CandyGame {
for (var i = 0; i < this.cells.length; i++) { for (var i = 0; i < this.cells.length; i++) {
for (var j = 0; j < this.cells.length; j++) { for (var j = 0; j < this.cells.length; j++) {
if (!this.cells[i][j].candy.getType().equals(Type.rewardFruit)) { if (!this.cells[i][j].candy.getType().equals(Type.rewardFruit)) {
var adj = adjacentCells(i,j); var adj = adjacentCells(i, j);
for (var a = 0; a < adj.size(); a++) { for (var a = 0; a < adj.size(); a++) {
if (this.cells[i][j].candy.name.equals(adj.get(a).candy.name)) { if (this.cells[i][j].candy.name.equals(adj.get(a).candy.name)) {
return true; return true;
@ -125,13 +125,13 @@ public class CandyGame {
} }
return false; return false;
} }
void handleChange(int points) { void handleChange(int points) {
LOGGER.info("+" + points + " points!"); LOGGER.info("+" + points + " points!");
this.totalPoints += points; this.totalPoints += points;
printGameStatus(); printGameStatus();
} }
void round(int timeSoFar, int totalTime) { void round(int timeSoFar, int totalTime) {
var start = System.currentTimeMillis(); var start = System.currentTimeMillis();
var end = System.currentTimeMillis(); var end = System.currentTimeMillis();
@ -148,9 +148,9 @@ public class CandyGame {
for (var i = 0; i < this.cells.length; i++) { for (var i = 0; i < this.cells.length; i++) {
var j = cells.length - 1; var j = cells.length - 1;
var points = 0; var points = 0;
while (j > 0) { while (j > 0) {
points = this.cells[j][i].interact(this.cells[j - 1][i], this.pool, this.cells); points = this.cells[j][i].interact(this.cells[j - 1][i], this.pool, this.cells);
if (points != 0) { if (points != 0) {
handleChange(points); handleChange(points);
} else { } else {
j = j - 1; j = j - 1;
@ -160,7 +160,7 @@ public class CandyGame {
for (var i = 0; i < this.cells.length; i++) { for (var i = 0; i < this.cells.length; i++) {
var j = 0; var j = 0;
var points = 0; var points = 0;
while (j < cells.length - 1) { while (j < cells.length - 1) {
points = this.cells[i][j].interact(this.cells[i][j + 1], this.pool, this.cells); points = this.cells[i][j].interact(this.cells[i][j + 1], this.pool, this.cells);
if (points != 0) { if (points != 0) {
handleChange(points); handleChange(points);
@ -172,5 +172,5 @@ public class CandyGame {
end = System.currentTimeMillis(); end = System.currentTimeMillis();
} }
} }
} }

View File

@ -26,61 +26,61 @@ package com.iluwatar.typeobject;
import com.iluwatar.typeobject.Candy.Type; import com.iluwatar.typeobject.Candy.Type;
/** /**
* The Cell object is what the game matrix is made of and contains the candy which is * The Cell object is what the game matrix is made of and contains the candy which is to be crushed
* to be crushed or collected as reward. * or collected as reward.
*/ */
public class Cell { public class Cell {
Candy candy; Candy candy;
int xIndex; int positionX;
int yIndex; int positionY;
Cell(Candy candy, int xIndex, int yIndex) { Cell(Candy candy, int positionX, int positionY) {
this.candy = candy; this.candy = candy;
this.xIndex = xIndex; this.positionX = positionX;
this.yIndex = yIndex; this.positionY = positionY;
} }
Cell() { Cell() {
this.candy = null; this.candy = null;
this.xIndex = 0; this.positionX = 0;
this.yIndex = 0; this.positionY = 0;
} }
void crush(CellPool pool, Cell[][] cellMatrix) { void crush(CellPool pool, Cell[][] cellMatrix) {
//take out from this position and put back in pool //take out from this position and put back in pool
pool.addNewCell(this); pool.addNewCell(this);
this.fillThisSpace(pool, cellMatrix); this.fillThisSpace(pool, cellMatrix);
} }
void fillThisSpace(CellPool pool, Cell[][] cellMatrix) { void fillThisSpace(CellPool pool, Cell[][] cellMatrix) {
for (var y = this.yIndex; y > 0; y--) { for (var y = this.positionY; y > 0; y--) {
cellMatrix[y][this.xIndex] = cellMatrix[y - 1][this.xIndex]; cellMatrix[y][this.positionX] = cellMatrix[y - 1][this.positionX];
cellMatrix[y][this.xIndex].yIndex = y; cellMatrix[y][this.positionX].positionY = y;
} }
var newC = pool.getNewCell(); var newC = pool.getNewCell();
cellMatrix[0][this.xIndex] = newC; cellMatrix[0][this.positionX] = newC;
cellMatrix[0][this.xIndex].xIndex = this.xIndex; cellMatrix[0][this.positionX].positionX = this.positionX;
cellMatrix[0][this.xIndex].yIndex = 0; cellMatrix[0][this.positionX].positionY = 0;
} }
void handleCrush(Cell c, CellPool pool, Cell[][] cellMatrix) { void handleCrush(Cell c, CellPool pool, Cell[][] cellMatrix) {
if (this.yIndex >= c.yIndex) { if (this.positionY >= c.positionY) {
this.crush(pool, cellMatrix); this.crush(pool, cellMatrix);
c.crush(pool, cellMatrix); c.crush(pool, cellMatrix);
} else { } else {
c.crush(pool, cellMatrix); c.crush(pool, cellMatrix);
this.crush(pool, cellMatrix); this.crush(pool, cellMatrix);
} }
} }
int interact(Cell c, CellPool pool, Cell[][] cellMatrix) { int interact(Cell c, CellPool pool, Cell[][] cellMatrix) {
if (this.candy.getType().equals(Type.rewardFruit) || c.candy.getType().equals(Type.rewardFruit)) { if (this.candy.getType().equals(Type.rewardFruit) || c.candy.getType()
.equals(Type.rewardFruit)) {
return 0; return 0;
} else { } else {
if (this.candy.name.equals(c.candy.name)) { if (this.candy.name.equals(c.candy.name)) {
var pointsWon = this.candy.getPoints() + c.candy.getPoints(); var pointsWon = this.candy.getPoints() + c.candy.getPoints();
handleCrush(c,pool,cellMatrix); handleCrush(c, pool, cellMatrix);
return pointsWon; return pointsWon;
} else { } else {
return 0; return 0;

View File

@ -23,18 +23,17 @@
package com.iluwatar.typeobject; package com.iluwatar.typeobject;
import com.iluwatar.typeobject.Candy.Type;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Random; import java.util.Random;
import org.json.simple.parser.ParseException; import org.json.simple.parser.ParseException;
import com.iluwatar.typeobject.Candy.Type;
/** /**
* The CellPool class allows the reuse of crushed cells instead of creation of new * The CellPool class allows the reuse of crushed cells instead of creation of new cells each time.
* cells each time. The reused cell is given a new candy to hold using the randomCode * The reused cell is given a new candy to hold using the randomCode field which holds all the
* field which holds all the candies available. * candies available.
*/ */
public class CellPool { public class CellPool {
@ -42,9 +41,9 @@ public class CellPool {
ArrayList<Cell> pool; ArrayList<Cell> pool;
int pointer; int pointer;
Candy[] randomCode; Candy[] randomCode;
CellPool(int num) { CellPool(int num) {
this.pool = new ArrayList<Cell>(num); this.pool = new ArrayList<Cell>(num);
try { try {
this.randomCode = assignRandomCandytypes(); this.randomCode = assignRandomCandytypes();
} catch (Exception e) { } catch (Exception e) {
@ -64,25 +63,25 @@ public class CellPool {
} }
this.pointer = num - 1; this.pointer = num - 1;
} }
Cell getNewCell() { Cell getNewCell() {
var newCell = this.pool.remove(pointer); var newCell = this.pool.remove(pointer);
pointer--; pointer--;
return newCell; return newCell;
} }
void addNewCell(Cell c) { void addNewCell(Cell c) {
c.candy = randomCode[RANDOM.nextInt(randomCode.length)]; //changing candytype to new c.candy = randomCode[RANDOM.nextInt(randomCode.length)]; //changing candytype to new
this.pool.add(c); this.pool.add(c);
pointer++; pointer++;
} }
Candy[] assignRandomCandytypes() throws FileNotFoundException, IOException, ParseException { Candy[] assignRandomCandytypes() throws FileNotFoundException, IOException, ParseException {
var jp = new JsonParser(); var jp = new JsonParser();
jp.parse(); jp.parse();
var randomCode = new Candy[jp.candies.size() - 2]; //exclude generic types 'fruit' and 'candy' var randomCode = new Candy[jp.candies.size() - 2]; //exclude generic types 'fruit' and 'candy'
var i = 0; var i = 0;
for (var e = jp.candies.keys(); e.hasMoreElements();) { for (var e = jp.candies.keys(); e.hasMoreElements(); ) {
var s = e.nextElement(); var s = e.nextElement();
if (!s.equals("fruit") && !s.equals("candy")) { if (!s.equals("fruit") && !s.equals("candy")) {
//not generic //not generic

View File

@ -23,6 +23,7 @@
package com.iluwatar.typeobject; package com.iluwatar.typeobject;
import com.iluwatar.typeobject.Candy.Type;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileReader; import java.io.FileReader;
@ -33,16 +34,14 @@ import org.json.simple.JSONArray;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser; import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException; import org.json.simple.parser.ParseException;
import com.iluwatar.typeobject.Candy.Type;
/** /**
* The JsonParser class helps parse the json file candy.json to get all the * The JsonParser class helps parse the json file candy.json to get all the different candies.
* different candies.
*/ */
public class JsonParser { public class JsonParser {
Hashtable<String, Candy> candies; Hashtable<String, Candy> candies;
JsonParser() { JsonParser() {
this.candies = new Hashtable<String, Candy>(); this.candies = new Hashtable<String, Candy>();
} }
@ -69,9 +68,9 @@ public class JsonParser {
} }
setParentAndPoints(); setParentAndPoints();
} }
void setParentAndPoints() { void setParentAndPoints() {
for (Enumeration<String> e = this.candies.keys(); e.hasMoreElements();) { for (Enumeration<String> e = this.candies.keys(); e.hasMoreElements(); ) {
var c = this.candies.get(e.nextElement()); var c = this.candies.get(e.nextElement());
if (c.parentName == null) { if (c.parentName == null) {
c.parent = null; c.parent = null;

View File

@ -31,6 +31,7 @@ import java.util.List;
*/ */
public class App { public class App {
/** /**
* Program entry point.
* *
* @param args no argument sent * @param args no argument sent
*/ */

View File

@ -24,6 +24,8 @@
package com.iluwatar.unitofwork; package com.iluwatar.unitofwork;
/** /**
* UnitOfWork interface.
*
* @param <T> Any generic entity * @param <T> Any generic entity
*/ */
public interface IUnitOfWork<T> { public interface IUnitOfWork<T> {
@ -46,7 +48,7 @@ public interface IUnitOfWork<T> {
*/ */
void registerDeleted(T entity); void registerDeleted(T entity);
/*** /**
* All UnitOfWork operations batched together executed in commit only. * All UnitOfWork operations batched together executed in commit only.
*/ */
void commit(); void commit();

View File

@ -32,6 +32,8 @@ public class Student {
private final String address; private final String address;
/** /**
* Constructor.
*
* @param id student unique id * @param id student unique id
* @param name name of student * @param name name of student
* @param address address of student * @param address address of student

View File

@ -23,16 +23,14 @@
package com.iluwatar.unitofwork; package com.iluwatar.unitofwork;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* {@link StudentRepository} Student database repository. * {@link StudentRepository} Student database repository. supports unit of work for student data.
* supports unit of work for student data.
*/ */
public class StudentRepository implements IUnitOfWork<Student> { public class StudentRepository implements IUnitOfWork<Student> {
private static final Logger LOGGER = LoggerFactory.getLogger(StudentRepository.class); private static final Logger LOGGER = LoggerFactory.getLogger(StudentRepository.class);
@ -41,6 +39,8 @@ public class StudentRepository implements IUnitOfWork<Student> {
private StudentDatabase studentDatabase; private StudentDatabase studentDatabase;
/** /**
* Constructor.
*
* @param context set of operations to be perform during commit. * @param context set of operations to be perform during commit.
* @param studentDatabase Database for student records. * @param studentDatabase Database for student records.
*/ */

View File

@ -30,21 +30,20 @@ import org.slf4j.LoggerFactory;
* A Value Object are objects which follow value semantics rather than reference semantics. This * A Value Object are objects which follow value semantics rather than reference semantics. This
* means value objects' equality are not based on identity. Two value objects are equal when they * means value objects' equality are not based on identity. Two value objects are equal when they
* have the same value, not necessarily being the same object.. * have the same value, not necessarily being the same object..
* *
* Value Objects must override equals(), hashCode() to check the equality with values. * <p>Value Objects must override equals(), hashCode() to check the equality with values. Value
* Value Objects should be immutable so declare members final. * Objects should be immutable so declare members final. Obtain instances by static factory methods.
* Obtain instances by static factory methods. * The elements of the state must be other values, including primitive types. Provide methods,
* The elements of the state must be other values, including primitive types. * typically simple getters, to get the elements of the state. A Value Object must check equality
* Provide methods, typically simple getters, to get the elements of the state. * with equals() not ==
* A Value Object must check equality with equals() not == *
* * <p>For more specific and strict rules to implement value objects check the rules from Stephen
* For more specific and strict rules to implement value objects check the rules from Stephen * Colebourne's term VALJO : http://blog.joda.org/2014/03/valjos-value-java-objects.html
* Colebourne's term VALJO : http://blog.joda.org/2014/03/valjos-value-java-objects.html
*/ */
public class App { public class App {
private static final Logger LOGGER = LoggerFactory.getLogger(App.class); private static final Logger LOGGER = LoggerFactory.getLogger(App.class);
/** /**
* This practice creates three HeroStats(Value object) and checks equality between those. * This practice creates three HeroStats(Value object) and checks equality between those.
*/ */

View File

@ -24,11 +24,11 @@
package com.iluwatar.value.object; package com.iluwatar.value.object;
/** /**
* HeroStat is a value object * HeroStat is a value object.
* *
* @see <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html"> * @see <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html">
* http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html * http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html
* </a> * </a>
*/ */
public class HeroStat { public class HeroStat {