");
+
+ Greeting contract = Greeting.deploy(
+ web3j, credentials,
+ ManagedTransaction.GAS_PRICE, Contract.GAS_LIMIT,
+ "Hello blockchain world!").send();
+
+ String contractAddress = contract.getContractAddress();
+ l.debug("Smart contract deployed to address "+ contractAddress);
+
+ l.debug("Value stored in remote smart contract: "+ contract.greet().send());
+
+ TransactionReceipt transactionReceipt = contract.setGreeting("Well hello again").send();
+
+ l.debug("New value stored in remote smart contract: "+ contract.greet().send());
+ }
+}
diff --git a/ethereumj/src/main/java/com/baeldung/web3j/contracts/Greeting.java b/ethereumj/src/main/java/com/baeldung/web3j/contracts/Greeting.java
new file mode 100644
index 0000000000..f4f4f90760
--- /dev/null
+++ b/ethereumj/src/main/java/com/baeldung/web3j/contracts/Greeting.java
@@ -0,0 +1,71 @@
+package com.baeldung.web3j.contracts;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Collections;
+import org.web3j.abi.FunctionEncoder;
+import org.web3j.abi.TypeReference;
+import org.web3j.abi.datatypes.Function;
+import org.web3j.abi.datatypes.Type;
+import org.web3j.abi.datatypes.Utf8String;
+import org.web3j.crypto.Credentials;
+import org.web3j.protocol.Web3j;
+import org.web3j.protocol.core.RemoteCall;
+import org.web3j.protocol.core.methods.response.TransactionReceipt;
+import org.web3j.tx.Contract;
+import org.web3j.tx.TransactionManager;
+
+/**
+ * Auto generated code.
+ *
Do not modify!
+ *
Please use the web3j command line tools,
+ * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the
+ * codegen module to update.
+ *
+ *
Generated with web3j version 3.3.1.
+ */
+public class Greeting extends Contract {
+ private static final String BINARY = "6060604052341561000f57600080fd5b6040516103cc3803806103cc833981016040528080519091019050600181805161003d92916020019061005f565b505060008054600160a060020a03191633600160a060020a03161790556100fa565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a057805160ff19168380011785556100cd565b828001600101855582156100cd579182015b828111156100cd5782518255916020019190600101906100b2565b506100d99291506100dd565b5090565b6100f791905b808211156100d957600081556001016100e3565b90565b6102c3806101096000396000f30060606040526004361061004b5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663a41368628114610050578063cfae3217146100a3575b600080fd5b341561005b57600080fd5b6100a160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061012d95505050505050565b005b34156100ae57600080fd5b6100b6610144565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156100f25780820151838201526020016100da565b50505050905090810190601f16801561011f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60018180516101409291602001906101ed565b5050565b61014c61026b565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b505050505090505b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061022e57805160ff191683800117855561025b565b8280016001018555821561025b579182015b8281111561025b578251825591602001919060010190610240565b5061026792915061027d565b5090565b60206040519081016040526000815290565b6101ea91905b8082111561026757600081556001016102835600a165627a7a723058206cfb726ed213c2fe842a4c886c8089e918b6de9c6cdfb372fa459eca4840c5740029";
+
+ protected Greeting(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
+ super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);
+ }
+
+ protected Greeting(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
+ super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);
+ }
+
+ public RemoteCall setGreeting(String _message) {
+ final Function function = new Function(
+ "setGreeting",
+ Arrays.asList(new org.web3j.abi.datatypes.Utf8String(_message)),
+ Collections.>emptyList());
+ return executeRemoteCallTransaction(function);
+ }
+
+ public RemoteCall greet() {
+ final Function function = new Function("greet",
+ Arrays.asList(),
+ Arrays.>asList(new TypeReference() {}));
+ return executeRemoteCallSingleValueReturn(function, String.class);
+ }
+
+ public static RemoteCall deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, String _message) {
+ String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.asList(new org.web3j.abi.datatypes.Utf8String(_message)));
+ return deployRemoteCall(Greeting.class, web3j, credentials, gasPrice, gasLimit, BINARY, encodedConstructor);
+ }
+
+ public static RemoteCall deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, String _message) {
+ String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.asList(new org.web3j.abi.datatypes.Utf8String(_message)));
+ return deployRemoteCall(Greeting.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, encodedConstructor);
+ }
+
+ public static Greeting load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
+ return new Greeting(contractAddress, web3j, credentials, gasPrice, gasLimit);
+ }
+
+ public static Greeting load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
+ return new Greeting(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
+ }
+}
+
diff --git a/ethereumj/src/main/resources/solidity/Greeting.sol b/ethereumj/src/main/resources/solidity/Greeting.sol
new file mode 100644
index 0000000000..6a2861274a
--- /dev/null
+++ b/ethereumj/src/main/resources/solidity/Greeting.sol
@@ -0,0 +1,19 @@
+pragma solidity ^0.4.0;
+
+contract Greeting {
+ address creator;
+ string message;
+
+ function Greeting(string _message) {
+ message = _message;
+ creator = msg.sender;
+ }
+
+ function greet() constant returns (string) {
+ return message;
+ }
+
+ function setGreeting(string _message) {
+ message = _message;
+ }
+}
diff --git a/ethereumj/src/main/resources/solidity/build/Greeting.abi b/ethereumj/src/main/resources/solidity/build/Greeting.abi
new file mode 100644
index 0000000000..9cb196c665
--- /dev/null
+++ b/ethereumj/src/main/resources/solidity/build/Greeting.abi
@@ -0,0 +1 @@
+[{"constant":false,"inputs":[{"name":"_message","type":"string"}],"name":"setGreeting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_message","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
\ No newline at end of file
diff --git a/ethereumj/src/main/resources/solidity/build/Greeting.bin b/ethereumj/src/main/resources/solidity/build/Greeting.bin
new file mode 100644
index 0000000000..05c12a02ac
--- /dev/null
+++ b/ethereumj/src/main/resources/solidity/build/Greeting.bin
@@ -0,0 +1 @@
+6060604052341561000f57600080fd5b6040516103cc3803806103cc833981016040528080519091019050600181805161003d92916020019061005f565b505060008054600160a060020a03191633600160a060020a03161790556100fa565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a057805160ff19168380011785556100cd565b828001600101855582156100cd579182015b828111156100cd5782518255916020019190600101906100b2565b506100d99291506100dd565b5090565b6100f791905b808211156100d957600081556001016100e3565b90565b6102c3806101096000396000f30060606040526004361061004b5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663a41368628114610050578063cfae3217146100a3575b600080fd5b341561005b57600080fd5b6100a160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061012d95505050505050565b005b34156100ae57600080fd5b6100b6610144565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156100f25780820151838201526020016100da565b50505050905090810190601f16801561011f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60018180516101409291602001906101ed565b5050565b61014c61026b565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b505050505090505b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061022e57805160ff191683800117855561025b565b8280016001018555821561025b579182015b8281111561025b578251825591602001919060010190610240565b5061026792915061027d565b5090565b60206040519081016040526000815290565b6101ea91905b8082111561026757600081556001016102835600a165627a7a723058206cfb726ed213c2fe842a4c886c8089e918b6de9c6cdfb372fa459eca4840c5740029
\ No newline at end of file
diff --git a/flips/pom.xml b/flips/pom.xml
index ecc2af4a47..77d1df1a8b 100644
--- a/flips/pom.xml
+++ b/flips/pom.xml
@@ -8,7 +8,12 @@
jar
flips
-
+
+ parent-boot-5
+ com.baeldung
+ 0.0.1-SNAPSHOT
+ ../parent-boot-5
+
UTF-8
1.8
diff --git a/geotools/pom.xml b/geotools/pom.xml
index d0eb787be8..01bd6448bb 100644
--- a/geotools/pom.xml
+++ b/geotools/pom.xml
@@ -9,7 +9,11 @@
geotools
http://maven.apache.org
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
junit
diff --git a/google-cloud/README.md b/google-cloud/README.md
index 6022796a0e..87ca17eac4 100644
--- a/google-cloud/README.md
+++ b/google-cloud/README.md
@@ -1,7 +1,7 @@
## Google Cloud Tutorial Project
### Relevant Article:
-- [Intro to Google Cloud Storage With Java](http://www.baeldung.com/intro-to-google-cloud-storage-with-java/)
+- [Intro to Google Cloud Storage With Java](http://www.baeldung.com/java-google-cloud-storage)
### Overview
This Maven project contains the Java code for the article linked above.
diff --git a/gradle/README.md b/gradle/README.md
index 5fc7b40e3f..229466dfec 100644
--- a/gradle/README.md
+++ b/gradle/README.md
@@ -2,3 +2,5 @@
- [Introduction to Gradle](http://www.baeldung.com/gradle)
- [Writing Custom Gradle Plugins](http://www.baeldung.com/gradle-create-plugin)
- [Creating a Fat Jar in Gradle](http://www.baeldung.com/gradle-fat-jar)
+- [A Custom Task in Gradle](http://www.baeldung.com/gradle-custom-task)
+- [Kotlin Dependency Injection with Kodein](http://www.baeldung.com/kotlin-kodein-dependency-injection)
diff --git a/grpc/pom.xml b/grpc/pom.xml
index 074075b5cc..99d41172c7 100644
--- a/grpc/pom.xml
+++ b/grpc/pom.xml
@@ -9,7 +9,11 @@
grpc-demo
http://maven.apache.org
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
UTF-8
1.5.0
diff --git a/guava/README.md b/guava/README.md
index af02bba809..08814fd8b5 100644
--- a/guava/README.md
+++ b/guava/README.md
@@ -31,3 +31,4 @@
- [Guide to Mathematical Utilities in Guava](http://www.baeldung.com/guava-math)
- [Bloom Filter in Java using Guava](http://www.baeldung.com/guava-bloom-filter)
- [Using Guava CountingOutputStream](http://www.baeldung.com/guava-counting-outputstream)
+- [Hamcrest Text Matchers](http://www.baeldung.com/hamcrest-text-matchers)
diff --git a/guest/core-java-9/pom.xml b/guest/core-java-9/pom.xml
index 0e227798af..e37f696e33 100644
--- a/guest/core-java-9/pom.xml
+++ b/guest/core-java-9/pom.xml
@@ -3,7 +3,12 @@
com.stackify
core-java-9
0.0.1-SNAPSHOT
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
junit
diff --git a/guest/core-java/pom.xml b/guest/core-java/pom.xml
index eda3846c1f..35756f784b 100644
--- a/guest/core-java/pom.xml
+++ b/guest/core-java/pom.xml
@@ -4,7 +4,12 @@
com.stackify
core-java
0.0.1-SNAPSHOT
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
junit
diff --git a/guest/deep-jsf/pom.xml b/guest/deep-jsf/pom.xml
index 68801ba010..4697bbf588 100644
--- a/guest/deep-jsf/pom.xml
+++ b/guest/deep-jsf/pom.xml
@@ -6,7 +6,12 @@
deep-jsf
0.0.1-SNAPSHOT
war
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
false
diff --git a/guest/junit5-example/pom.xml b/guest/junit5-example/pom.xml
index 37c71e77af..0e92060a71 100644
--- a/guest/junit5-example/pom.xml
+++ b/guest/junit5-example/pom.xml
@@ -4,7 +4,12 @@
junit5-example
junit5-example
0.0.1-SNAPSHOT
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
org.junit.jupiter
diff --git a/guest/log4j2-example/pom.xml b/guest/log4j2-example/pom.xml
index 43f1d106f0..594b759538 100644
--- a/guest/log4j2-example/pom.xml
+++ b/guest/log4j2-example/pom.xml
@@ -4,7 +4,12 @@
log4j2-example
log4j2-example
0.0.1-SNAPSHOT
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
diff --git a/guest/logback-example/pom.xml b/guest/logback-example/pom.xml
index 8ad406fc89..1f277787d3 100644
--- a/guest/logback-example/pom.xml
+++ b/guest/logback-example/pom.xml
@@ -4,7 +4,12 @@
com.stackify
logback-example
0.0.1-SNAPSHOT
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
ch.qos.logback
diff --git a/guest/memory-leaks/pom.xml b/guest/memory-leaks/pom.xml
index 82361779e2..e0f256b2d5 100644
--- a/guest/memory-leaks/pom.xml
+++ b/guest/memory-leaks/pom.xml
@@ -4,7 +4,12 @@
com.baeldung
memory-leaks
0.0.1-SNAPSHOT
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
junit
diff --git a/guest/thread-pools/pom.xml b/guest/thread-pools/pom.xml
index 4588f3da4c..32ae6384e2 100644
--- a/guest/thread-pools/pom.xml
+++ b/guest/thread-pools/pom.xml
@@ -4,7 +4,12 @@
com.stackify
thread-pools
0.0.1-SNAPSHOT
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
ch.qos.logback
diff --git a/guest/tomcat-app/pom.xml b/guest/tomcat-app/pom.xml
index 2a4bf8ef59..02f3abcc32 100644
--- a/guest/tomcat-app/pom.xml
+++ b/guest/tomcat-app/pom.xml
@@ -5,7 +5,12 @@
tomcat-app
0.0.1-SNAPSHOT
war
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
org.glassfish.jersey.containers
diff --git a/guest/webservices/rest-client/pom.xml b/guest/webservices/rest-client/pom.xml
index 016fa54af7..d74d713a29 100644
--- a/guest/webservices/rest-client/pom.xml
+++ b/guest/webservices/rest-client/pom.xml
@@ -4,6 +4,12 @@
rest-client
0.0.1-SNAPSHOT
war
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../../
+
diff --git a/guest/webservices/rest-server/pom.xml b/guest/webservices/rest-server/pom.xml
index 69d370965f..be43a85166 100644
--- a/guest/webservices/rest-server/pom.xml
+++ b/guest/webservices/rest-server/pom.xml
@@ -5,7 +5,12 @@
rest-server
0.0.1-SNAPSHOT
war
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../../
+
org.glassfish.jersey.containers
diff --git a/java-lite/README.md b/java-lite/README.md
index 13dcd5f8c3..a4e2edd49f 100644
--- a/java-lite/README.md
+++ b/java-lite/README.md
@@ -1,3 +1,4 @@
### Relevant Articles:
- [A Guide to JavaLite – Building a RESTful CRUD application](http://www.baeldung.com/javalite-rest)
+- [Introduction to ActiveWeb](http://www.baeldung.com/activeweb)
diff --git a/java-vavr-stream/pom.xml b/java-vavr-stream/pom.xml
index ca3807cd15..25f0254626 100644
--- a/java-vavr-stream/pom.xml
+++ b/java-vavr-stream/pom.xml
@@ -5,6 +5,11 @@
java-vavr-stream
1.0
jar
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
UTF-8
1.8
diff --git a/javafx/.gitignore b/javafx/.gitignore
new file mode 100644
index 0000000000..dfbd063287
--- /dev/null
+++ b/javafx/.gitignore
@@ -0,0 +1,6 @@
+# Created by .ignore support plugin (hsz.mobi)
+.idea
+classes
+target
+*.iml
+out
\ No newline at end of file
diff --git a/javafx/README.md b/javafx/README.md
new file mode 100644
index 0000000000..66c81f17ad
--- /dev/null
+++ b/javafx/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles:
+-[Introduction to JavaFX](http://www.baeldung.com/javafx)
+
diff --git a/javafx/pom.xml b/javafx/pom.xml
new file mode 100644
index 0000000000..bcad64aca5
--- /dev/null
+++ b/javafx/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ javafx
+
+
+
\ No newline at end of file
diff --git a/javafx/src/main/java/com/baeldung/Main.java b/javafx/src/main/java/com/baeldung/Main.java
new file mode 100644
index 0000000000..59e24209b5
--- /dev/null
+++ b/javafx/src/main/java/com/baeldung/Main.java
@@ -0,0 +1,29 @@
+package com.baeldung;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.layout.AnchorPane;
+import javafx.stage.Stage;
+
+public class Main extends Application {
+
+ public static void main(String[] args) {
+ launch(args);
+ }
+
+ @Override
+ public void start(Stage primaryStage) throws Exception {
+
+ FXMLLoader loader = new FXMLLoader(Main.class.getResource("/SearchController.fxml"));
+ AnchorPane page = (AnchorPane) loader.load();
+ Scene scene = new Scene(page);
+
+ scene.getStylesheets().add("/search.css");
+
+ primaryStage.setTitle("Title goes here");
+ primaryStage.setScene(scene);
+ primaryStage.show();
+
+ }
+}
diff --git a/javafx/src/main/java/com/baeldung/model/Person.java b/javafx/src/main/java/com/baeldung/model/Person.java
new file mode 100644
index 0000000000..0b915832ce
--- /dev/null
+++ b/javafx/src/main/java/com/baeldung/model/Person.java
@@ -0,0 +1,61 @@
+package com.baeldung.model;
+
+import javafx.beans.property.*;
+
+public class Person {
+
+ private SimpleIntegerProperty id;
+ private SimpleStringProperty name;
+ private SimpleBooleanProperty isEmployed;
+
+ public Person(Integer id, String name, boolean isEmployed) {
+ this.id = new SimpleIntegerProperty(id);
+ this.name = new SimpleStringProperty(name);
+ this.isEmployed = new SimpleBooleanProperty(isEmployed);
+ }
+
+ public int getId() {
+ return id.get();
+ }
+
+ public IntegerProperty idProperty() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id.set(id);
+ }
+
+ public String getName() {
+ return name.get();
+ }
+
+ public StringProperty nameProperty() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name.set(name);
+ }
+
+ public boolean getIsEmployed() {
+ return isEmployed.get();
+ }
+
+ public BooleanProperty isEmployedProperty() {
+ return isEmployed;
+ }
+
+ public void setIsEmployed(boolean isEmployed) {
+ this.isEmployed.set(isEmployed);
+ }
+
+ @Override
+ public String toString() {
+ return "Person{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", isEmployed=" + isEmployed +
+ '}';
+ }
+}
diff --git a/javafx/src/main/java/com/baeldung/view/SearchController.java b/javafx/src/main/java/com/baeldung/view/SearchController.java
new file mode 100644
index 0000000000..430580f8b5
--- /dev/null
+++ b/javafx/src/main/java/com/baeldung/view/SearchController.java
@@ -0,0 +1,99 @@
+package com.baeldung.view;
+
+
+import com.baeldung.model.Person;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.concurrent.Task;
+import javafx.fxml.FXML;
+import javafx.scene.Node;
+import javafx.scene.control.*;
+import javafx.scene.input.KeyCode;
+import javafx.scene.layout.VBox;
+
+import java.util.stream.Collectors;
+
+public class SearchController {
+
+ public static final int PAGE_ITEMS_COUNT = 10;
+
+ @FXML
+ private TextField searchField;
+ @FXML
+ private Button searchButton;
+ @FXML
+ private Pagination pagination;
+ @FXML
+ private Label searchLabel;
+
+ private ObservableList masterData = FXCollections.observableArrayList();
+
+ public SearchController() {
+ masterData.add(new Person(5, "John", true));
+ masterData.add(new Person(7, "Albert", true));
+ masterData.add(new Person(11, "Monica", false));
+ }
+
+ @FXML
+ private void initialize() {
+
+ // search panel
+ searchButton.setText("Search");
+ searchButton.setOnAction(event -> loadData());
+ searchButton.setStyle("-fx-background-color: #457ecd; -fx-text-fill: #ffffff;");
+
+ searchField.setOnKeyPressed(event -> {
+ if (event.getCode().equals(KeyCode.ENTER)) {
+ loadData();
+ }
+ });
+
+ searchField.textProperty().addListener((observable, oldValue, newValue) -> {
+ searchLabel.setText(newValue);
+ });
+
+ pagination.setPageFactory(SearchController.this::createPage);
+ }
+
+ private Node createPage(Integer pageIndex) {
+
+ VBox dataContainer = new VBox();
+
+ TableView tableView = new TableView<>(masterData);
+ TableColumn id = new TableColumn("ID");
+ TableColumn name = new TableColumn("NAME");
+ TableColumn employed = new TableColumn("EMPLOYED");
+
+ tableView.getColumns().addAll(id, name, employed);
+ dataContainer.getChildren().add(tableView);
+
+ return dataContainer;
+ }
+
+ private void loadData() {
+
+ String searchText = searchField.getText();
+
+ Task> task = new Task>() {
+ @Override
+ protected ObservableList call() throws Exception {
+ updateMessage("Loading data");
+ return FXCollections.observableArrayList(masterData
+ .stream()
+ .filter(value -> value.getName().toLowerCase().contains(searchText))
+ .collect(Collectors.toList()));
+ }
+ };
+
+ task.setOnSucceeded(event -> {
+ masterData = task.getValue();
+ pagination.setVisible(true);
+ pagination.setPageCount(masterData.size() / PAGE_ITEMS_COUNT);
+ });
+
+ Thread th = new Thread(task);
+ th.setDaemon(true);
+ th.start();
+ }
+
+}
diff --git a/javafx/src/main/resources/SearchController.fxml b/javafx/src/main/resources/SearchController.fxml
new file mode 100644
index 0000000000..5e83024d03
--- /dev/null
+++ b/javafx/src/main/resources/SearchController.fxml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/javafx/src/main/resources/search.css b/javafx/src/main/resources/search.css
new file mode 100644
index 0000000000..856466b3a1
--- /dev/null
+++ b/javafx/src/main/resources/search.css
@@ -0,0 +1,4 @@
+.button {
+ -fx-background-color: red;
+ -fx-text-fill: white;
+}
\ No newline at end of file
diff --git a/javax-servlets/README.md b/javax-servlets/README.md
index d6bc6db8b8..ff2256b3c0 100644
--- a/javax-servlets/README.md
+++ b/javax-servlets/README.md
@@ -1,2 +1,3 @@
### Relevant Articles:
- [Introduction to Java Servlets](http://www.baeldung.com/intro-to-servlets)
+- [An MVC Example with Servlets and JSP](http://www.baeldung.com/mvc-servlet-jsp)
diff --git a/javax-servlets/pom.xml b/javax-servlets/pom.xml
index 7407666309..a75af414cd 100644
--- a/javax-servlets/pom.xml
+++ b/javax-servlets/pom.xml
@@ -3,7 +3,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung
javax-servlets
1.0-SNAPSHOT
@@ -13,8 +12,6 @@
1.0.0-SNAPSHOT
-
-
@@ -35,6 +32,12 @@
+
+ org.springframework
+ spring-test
+ 5.0.5.RELEASE
+ test
+
diff --git a/javaxval/README.md b/javaxval/README.md
index c6a6eb7345..3153546c7d 100644
--- a/javaxval/README.md
+++ b/javaxval/README.md
@@ -8,3 +8,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
### Relevant Articles:
- [Java Bean Validation Basics](http://www.baeldung.com/javax-validation)
- [Validating Container Elements with Bean Validation 2.0](http://www.baeldung.com/bean-validation-container-elements)
+- [Method Constraints with Bean Validation 2.0](http://www.baeldung.com/javax-validation-method-constraints)
diff --git a/jgroups/README.md b/jgroups/README.md
index bb2813c3d6..0921fa98a1 100644
--- a/jgroups/README.md
+++ b/jgroups/README.md
@@ -1,7 +1,7 @@
## Reliable Messaging with JGroups Tutorial Project
### Relevant Article:
-- [Reliable Messaging with JGroups](http://www.baeldung.com/reliable-messaging-with-jgroups/)
+- [Reliable Messaging with JGroups](http://www.baeldung.com/jgroups)
### Overview
This Maven project contains the Java code for the article linked above.
diff --git a/jmh/pom.xml b/jmh/pom.xml
index ef5c3f1bbf..cc3869cca1 100644
--- a/jmh/pom.xml
+++ b/jmh/pom.xml
@@ -7,7 +7,11 @@
1.0-SNAPSHOT
jmh
http://maven.apache.org
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
UTF-8
UTF-8
diff --git a/jsonb/pom.xml b/jsonb/pom.xml
index 5058d89c31..03f4f227b1 100644
--- a/jsonb/pom.xml
+++ b/jsonb/pom.xml
@@ -10,6 +10,11 @@
json-b
json-b sample project
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
yasson
diff --git a/libraries-data/pom.xml b/libraries-data/pom.xml
index 4727ca2222..55bf02ae16 100644
--- a/libraries-data/pom.xml
+++ b/libraries-data/pom.xml
@@ -65,6 +65,26 @@
test
test
+
+ org.apache.ignite
+ ignite-core
+ ${ignite.version}
+
+
+ org.apache.ignite
+ ignite-spring
+ ${ignite.version}
+
+
+ org.apache.ignite
+ ignite-indexing
+ ${ignite.version}
+
+
+ com.google.code.gson
+ gson
+ ${gson.version}
+
@@ -181,5 +201,7 @@
3.7.0
5.0
1.0.0
+ 2.3.0
+ 2.8.2
\ No newline at end of file
diff --git a/libraries-data/src/main/java/com/baeldung/ignite/cache/CustomLifecycleBean.java b/libraries-data/src/main/java/com/baeldung/ignite/cache/CustomLifecycleBean.java
new file mode 100644
index 0000000000..0b603dcee0
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ignite/cache/CustomLifecycleBean.java
@@ -0,0 +1,14 @@
+package com.baeldung.ignite.cache;
+
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.lifecycle.LifecycleBean;
+import org.apache.ignite.lifecycle.LifecycleEventType;
+
+public class CustomLifecycleBean implements LifecycleBean {
+ @Override
+ public void onLifecycleEvent(LifecycleEventType lifecycleEventType) throws IgniteException {
+ if (lifecycleEventType == LifecycleEventType.AFTER_NODE_START) {
+ //do something right after the Ignite node starts
+ }
+ }
+}
diff --git a/libraries-data/src/main/java/com/baeldung/ignite/cache/IgniteCacheExample.java b/libraries-data/src/main/java/com/baeldung/ignite/cache/IgniteCacheExample.java
new file mode 100644
index 0000000000..8c40b8f312
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ignite/cache/IgniteCacheExample.java
@@ -0,0 +1,58 @@
+package com.baeldung.ignite.cache;
+
+import com.baeldung.ignite.model.Employee;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.cache.query.QueryCursor;
+import org.apache.ignite.cache.query.SqlFieldsQuery;
+import org.apache.ignite.configuration.IgniteConfiguration;
+
+import java.util.List;
+
+public class IgniteCacheExample {
+
+ public static void main(String[] args) {
+
+ Ignite ignite = Ignition.ignite();
+
+ IgniteCache cache = ignite.cache("baeldungCache");
+
+ cache.put(1, "baeldung cache value");
+
+ String message = cache.get(1);
+ }
+
+ private static void getObjectFromCache(Ignite ignite) {
+
+ IgniteCache cache = ignite.getOrCreateCache("baeldungCache");
+
+ cache.put(1, new Employee(1, "John", true));
+ cache.put(2, new Employee(2, "Anna", false));
+ cache.put(3, new Employee(3, "George", true));
+
+ Employee employee = cache.get(1);
+ }
+
+ private static void getFromCacheWithSQl(Ignite ignite) {
+
+ IgniteCache cache = ignite.cache("baeldungCache");
+
+ SqlFieldsQuery sql = new SqlFieldsQuery(
+ "select name from Employee where isEmployed = 'true'");
+
+ QueryCursor> cursor = cache.query(sql);
+
+ for (List> row : cursor) {
+ System.out.println(row.get(0));
+ }
+ }
+
+ private static void customInitialization() {
+
+ IgniteConfiguration configuration = new IgniteConfiguration();
+ configuration.setLifecycleBeans(new CustomLifecycleBean());
+ Ignite ignite = Ignition.start(configuration);
+ }
+
+}
diff --git a/libraries-data/src/main/java/com/baeldung/ignite/jdbc/IgniteJDBC.java b/libraries-data/src/main/java/com/baeldung/ignite/jdbc/IgniteJDBC.java
new file mode 100644
index 0000000000..de144711b3
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ignite/jdbc/IgniteJDBC.java
@@ -0,0 +1,58 @@
+package com.baeldung.ignite.jdbc;
+
+import java.sql.*;
+
+/**
+ * Created by Gebruiker on 3/14/2018.
+ */
+public class IgniteJDBC {
+
+ public static void main(String[] args) throws ClassNotFoundException, SQLException {
+
+ Class.forName("org.apache.ignite.IgniteJdbcThinDriver");
+
+ Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/");
+
+ createDatabaseTables(conn);
+
+ insertData(conn);
+
+ getData(conn);
+ }
+
+ private static void createDatabaseTables(Connection conn) throws SQLException {
+
+ Statement sql = conn.createStatement();
+ sql.executeUpdate("CREATE TABLE Employee (" +
+ " id INTEGER PRIMARY KEY, name VARCHAR, isEmployed timyint(1)) " +
+ " WITH \"template=replicated\"");
+
+ sql.executeUpdate("CREATE INDEX idx_employee_name ON Employee (name)");
+ }
+
+ private static void insertData(Connection conn) throws SQLException {
+
+ PreparedStatement sql =
+ conn.prepareStatement("INSERT INTO Employee (id, name, isEmployed) VALUES (?, ?, ?)");
+ sql.setLong(1, 1);
+ sql.setString(2, "James");
+ sql.setBoolean(3, true);
+ sql.executeUpdate();
+
+ sql.setLong(1, 2);
+ sql.setString(2, "Monica");
+ sql.setBoolean(3, false);
+ sql.executeUpdate();
+ }
+
+ private static void getData(Connection conn) throws SQLException {
+
+ Statement sql = conn.createStatement();
+ ResultSet rs = sql.executeQuery("SELECT e.name, e.isEmployed " +
+ " FROM Employee e " +
+ " WHERE e.isEmployed = TRUE ");
+
+ while (rs.next())
+ System.out.println(rs.getString(1) + ", " + rs.getString(2));
+ }
+}
diff --git a/libraries-data/src/main/java/com/baeldung/ignite/model/Employee.java b/libraries-data/src/main/java/com/baeldung/ignite/model/Employee.java
new file mode 100644
index 0000000000..21f5ef89d0
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ignite/model/Employee.java
@@ -0,0 +1,48 @@
+package com.baeldung.ignite.model;
+
+
+public class Employee {
+
+ private Integer id;
+ private String name;
+ private boolean isEmployed;
+
+ public Employee(Integer id, String name, boolean isEmployed) {
+ this.id = id;
+ this.name = name;
+ this.isEmployed = isEmployed;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isEmployed() {
+ return isEmployed;
+ }
+
+ public void setEmployed(boolean employed) {
+ isEmployed = employed;
+ }
+
+ @Override
+ public String toString() {
+ return "Employee{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", isEmployed=" + isEmployed +
+ '}';
+ }
+}
diff --git a/libraries-data/src/main/java/com/baeldung/ignite/stream/CacheConfig.java b/libraries-data/src/main/java/com/baeldung/ignite/stream/CacheConfig.java
new file mode 100644
index 0000000000..2b0f71e0b9
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ignite/stream/CacheConfig.java
@@ -0,0 +1,24 @@
+package com.baeldung.ignite.stream;
+
+import com.baeldung.ignite.model.Employee;
+import org.apache.ignite.configuration.CacheConfiguration;
+
+import javax.cache.configuration.FactoryBuilder;
+import javax.cache.expiry.CreatedExpiryPolicy;
+import javax.cache.expiry.Duration;
+import java.util.concurrent.TimeUnit;
+
+
+public class CacheConfig {
+
+ public static CacheConfiguration employeeCache() {
+
+ CacheConfiguration config = new CacheConfiguration<>("baeldungEmployees");
+
+ config.setIndexedTypes(Integer.class, Employee.class);
+ config.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
+ new CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS, 5))));
+
+ return config;
+ }
+}
\ No newline at end of file
diff --git a/libraries-data/src/main/java/com/baeldung/ignite/stream/IgniteStream.java b/libraries-data/src/main/java/com/baeldung/ignite/stream/IgniteStream.java
new file mode 100644
index 0000000000..839da36c22
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ignite/stream/IgniteStream.java
@@ -0,0 +1,44 @@
+package com.baeldung.ignite.stream;
+
+import com.baeldung.ignite.model.Employee;
+import com.google.gson.Gson;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.stream.StreamTransformer;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class IgniteStream {
+
+ public static void main(String[] args) throws Exception {
+
+ Ignition.setClientMode(true);
+ Ignite ignite = Ignition.start();
+
+ IgniteCache cache = ignite.getOrCreateCache(CacheConfig.employeeCache());
+ IgniteDataStreamer streamer = ignite.dataStreamer(cache.getName());
+ streamer.allowOverwrite(true);
+
+ streamer.receiver(StreamTransformer.from((e, arg) -> {
+
+ Employee employee = e.getValue();
+ employee.setEmployed(true);
+ e.setValue(employee);
+
+ return null;
+ }));
+
+ Path path = Paths.get(IgniteStream.class.getResource("employees.txt").toURI());
+
+ Files.lines(path)
+ .forEach(line -> {
+ Employee employee = new Gson().fromJson(line, Employee.class);
+ streamer.addData(employee.getId(), employee);
+ });
+
+ }
+}
diff --git a/libraries-data/src/main/resources/employee.txt b/libraries-data/src/main/resources/employee.txt
new file mode 100644
index 0000000000..6c476f39fa
--- /dev/null
+++ b/libraries-data/src/main/resources/employee.txt
@@ -0,0 +1,3 @@
+{id:"1", name="John", isEmployed: "true"}
+{id:"1", name="Anna", isEmployed: "false"}
+{id:"1", name="George", isEmployed: "true"}
\ No newline at end of file
diff --git a/libraries/README.md b/libraries/README.md
index fbb6da3a31..7c06aa88ca 100644
--- a/libraries/README.md
+++ b/libraries/README.md
@@ -63,7 +63,15 @@
- [A Docker Guide for Java](http://www.baeldung.com/docker-java-api)
- [Exceptions in Netty](http://www.baeldung.com/netty-exception-handling)
- [Creating and Configuring Jetty 9 Server in Java](http://www.baeldung.com/jetty-java-programmatic)
+- [Introduction To OpenCSV](http://www.baeldung.com/opencsv)
- [Introduction to Akka Actors in Java] (http://www.baeldung.com/akka-actors-java)
+- [Asynchronous HTTP with async-http-client in Java](https://github.com/eugenp/tutorials/tree/master/libraries)
+- [Introduction to Smooks](http://www.baeldung.com/smooks)
+- [WebSockets with AsyncHttpClient](http://www.baeldung.com/async-http-client-websockets)
+- [A Guide to Infinispan in Java](http://www.baeldung.com/infinispan)
+- [Introduction to OpenCSV](http://www.baeldung.com/opencsv)
+- [A Guide to Unirest](http://www.baeldung.com/unirest)
+- [Introduction to Akka Actors in Java](http://www.baeldung.com/akka-actors-java)
The libraries module contains examples related to small libraries that are relatively easy to use and does not require any separate module of its own.
diff --git a/libraries/helloWorld.docx b/libraries/helloWorld.docx
index 12eba0a6c8..e5b13448a9 100644
Binary files a/libraries/helloWorld.docx and b/libraries/helloWorld.docx differ
diff --git a/libraries/pom.xml b/libraries/pom.xml
index 8a3a27cec4..71a520e20e 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -43,6 +43,12 @@
cglib
${cglib.version}
+
+
+ com.opencsv
+ opencsv
+ ${opencsv.version}
+
commons-beanutils
commons-beanutils
@@ -270,6 +276,12 @@
net.openhft
chronicle
3.6.4
+
+
+ com.sun.java
+ tools
+
+
org.springframework
@@ -294,6 +306,19 @@
${serenity.version}
test
+
+
+
+ org.lucee
+ jets3t
+ ${jets3t-version}
+
+
+ org.lucee
+ commons-codec
+ ${commons-codec-version}
+
+
io.rest-assured
spring-mock-mvc
@@ -668,6 +693,7 @@
${jctools.version}
+
maven2-repository.dev.java.net
@@ -765,17 +791,6 @@
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 2.18.1
-
-
- **/*IntegrationTest.java
- **/*LiveTest.java
-
-
-
@@ -893,8 +908,10 @@
8.5.24
2.2.0
9.1.5.Final
+ 4.1
1.4.9
2.1.2
+ 1.10.L001
+ 0.9.4.0006L
-
-
+
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/jnats/NatsClient.java b/libraries/src/main/java/com/baeldung/jnats/NatsClient.java
index cdd1e764ef..c592727cd1 100644
--- a/libraries/src/main/java/com/baeldung/jnats/NatsClient.java
+++ b/libraries/src/main/java/com/baeldung/jnats/NatsClient.java
@@ -1,31 +1,35 @@
package com.baeldung.jnats;
-import io.nats.client.*;
-
-import java.io.IOException;
-import java.util.*;
-
+import io.nats.client.AsyncSubscription;
+import io.nats.client.Connection;
+import io.nats.client.Message;
+import io.nats.client.Nats;
+import io.nats.client.Options;
+import io.nats.client.Subscription;
+import io.nats.client.SyncSubscription;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class NatsClient {
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
- private String serverURI;
+public final class NatsClient {
- private Connection natsConnection;
+ private final String serverURI;
- private Map subscriptions = new HashMap<>();
+ private final Connection natsConnection;
+
+ private final Map subscriptions = new HashMap<>();
private final static Logger log = LoggerFactory.getLogger(NatsClient.class);
- public NatsClient() {
+ NatsClient() {
this.serverURI = "jnats://localhost:4222";
natsConnection = initConnection(serverURI);
}
-
public NatsClient(String serverURI) {
-
if ((serverURI != null) && (!serverURI.isEmpty())) {
this.serverURI = serverURI;
} else {
@@ -40,59 +44,33 @@ public class NatsClient {
natsConnection.close();
}
-
private Connection initConnection(String uri) {
try {
-
Options options = new Options.Builder()
- .errorCb(new ExceptionHandler() {
- @Override
- public void onException(NATSException ex) {
- log.error("Connection Exception: ", ex);
- }
- })
- .disconnectedCb(new DisconnectedCallback() {
- @Override
- public void onDisconnect(ConnectionEvent event) {
- log.error("Channel disconnected: {}", event.getConnection());
- }
- })
- .reconnectedCb(new ReconnectedCallback() {
- @Override
- public void onReconnect(ConnectionEvent event) {
- log.error("Reconnected to server: {}", event.getConnection());
- }
- })
+ .errorCb(ex -> log.error("Connection Exception: ", ex))
+ .disconnectedCb(event -> log.error("Channel disconnected: {}", event.getConnection()))
+ .reconnectedCb(event -> log.error("Reconnected to server: {}", event.getConnection()))
.build();
return Nats.connect(uri, options);
-
} catch (IOException ioe) {
log.error("Error connecting to NATs! ", ioe);
return null;
}
}
-
- public void publishMessage(String topic, String replyTo, String message) {
+ void publishMessage(String topic, String replyTo, String message) {
try {
- // Simple Publisher
natsConnection.publish(topic, replyTo, message.getBytes());
} catch (IOException ioe) {
log.error("Error publishing message: {} to {} ", message, topic, ioe);
}
}
-
public void subscribeAsync(String topic) {
- // Simple Async Subscriber
- AsyncSubscription subscription = natsConnection.subscribe(topic, new MessageHandler() {
- @Override
- public void onMessage(Message msg) {
- log.info("Received message on {}", msg.getSubject());
- }
- });
+ AsyncSubscription subscription = natsConnection.subscribe(
+ topic, msg -> log.info("Received message on {}", msg.getSubject()));
if (subscription == null) {
log.error("Error subscribing to {}", topic);
@@ -101,13 +79,11 @@ public class NatsClient {
}
}
- public SyncSubscription subscribeSync(String topic) {
- // Simple Sync Subscriber
+ SyncSubscription subscribeSync(String topic) {
return natsConnection.subscribe(topic);
}
public void unsubscribe(String topic) {
-
try {
Subscription subscription = subscriptions.get(topic);
@@ -116,15 +92,12 @@ public class NatsClient {
} else {
log.error("{} not found. Unable to unsubscribe.", topic);
}
-
} catch (IOException ioe) {
log.error("Error unsubscribing from {} ", topic, ioe);
}
}
-
- public Message makeRequest(String topic, String request) {
-
+ Message makeRequest(String topic, String request) {
try {
return natsConnection.request(topic, request.getBytes(), 100);
} catch (IOException | InterruptedException ioe) {
@@ -133,7 +106,7 @@ public class NatsClient {
}
}
- public void installReply(String topic, String reply) {
+ void installReply(String topic, String reply) {
natsConnection.subscribe(topic, message -> {
try {
natsConnection.publish(message.getReplyTo(), reply.getBytes());
@@ -143,8 +116,7 @@ public class NatsClient {
});
}
- public SyncSubscription joinQueueGroup(String topic, String queue) {
+ SyncSubscription joinQueueGroup(String topic, String queue) {
return natsConnection.subscribe(topic, queue);
}
-
}
diff --git a/libraries/src/main/java/com/baeldung/netty/CalculatorOperationHandler.java b/libraries/src/main/java/com/baeldung/netty/CalculatorOperationHandler.java
new file mode 100644
index 0000000000..4d4cba259b
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/netty/CalculatorOperationHandler.java
@@ -0,0 +1,49 @@
+package com.baeldung.netty;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.handler.codec.http.*;
+import io.netty.util.CharsetUtil;
+
+public class CalculatorOperationHandler extends SimpleChannelInboundHandler {
+
+ protected void channelRead0(ChannelHandlerContext ctx, Operation msg) throws Exception {
+ Long result = calculateEndpoint(msg);
+ sendHttpResponse(ctx, new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.CREATED), result.toString());
+ ctx.fireChannelRead(result);
+ }
+
+ private long calculateEndpoint(Operation operation) {
+
+ String operator = operation.getOperator().toLowerCase().trim();
+ switch (operator) {
+ case "add":
+ return operation.getNumber1() + operation.getNumber2();
+ case "multiply":
+ return operation.getNumber1() * operation.getNumber2();
+ default:
+ throw new IllegalArgumentException("Operation not defined");
+ }
+ }
+
+ public static void sendHttpResponse(ChannelHandlerContext ctx, FullHttpResponse res, String content) {
+
+ // Generate an error page if response getStatus code is not OK (200).
+ ByteBuf buf = Unpooled.copiedBuffer(content, CharsetUtil.UTF_8);
+ res.content().writeBytes(buf);
+
+ HttpUtil.setContentLength(res, res.content().readableBytes());
+
+ ctx.channel().writeAndFlush(res);
+ }
+
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
+ throws Exception {
+
+ sendHttpResponse(ctx, new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.INTERNAL_SERVER_ERROR), "Operation not defined");
+ ctx.fireExceptionCaught(cause);
+ }
+
+}
diff --git a/libraries/src/main/java/com/baeldung/netty/HttpMessageHandler.java b/libraries/src/main/java/com/baeldung/netty/HttpMessageHandler.java
new file mode 100644
index 0000000000..58a81432b6
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/netty/HttpMessageHandler.java
@@ -0,0 +1,40 @@
+package com.baeldung.netty;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.handler.codec.http.FullHttpRequest;
+import io.netty.handler.codec.http.HttpHeaders;
+import io.netty.handler.codec.http.HttpMethod;
+
+public class HttpMessageHandler extends SimpleChannelInboundHandler {
+
+ protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest msg) throws Exception {
+
+ String uri = msg.uri();
+ HttpMethod httpMethod = msg.method();
+ HttpHeaders headers = msg.headers();
+
+ if (HttpMethod.GET == httpMethod) {
+
+ String[] uriComponents = uri.split("[?]");
+ String endpoint = uriComponents[0];
+ String[] queryParams = uriComponents[1].split("&");
+
+ if ("/calculate".equalsIgnoreCase(endpoint)) {
+
+ String[] firstQueryParam = queryParams[0].split("=");
+ String[] secondQueryParam = queryParams[1].split("=");
+
+ Integer a = Integer.valueOf(firstQueryParam[1]);
+ Integer b = Integer.valueOf(secondQueryParam[1]);
+ String operator = headers.get("operator");
+
+ Operation operation = new Operation(a, b, operator);
+ ctx.fireChannelRead(operation);
+ }
+ } else {
+ throw new UnsupportedOperationException("HTTP method not supported");
+ }
+
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/netty/Operation.java b/libraries/src/main/java/com/baeldung/netty/Operation.java
new file mode 100644
index 0000000000..136316ed7c
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/netty/Operation.java
@@ -0,0 +1,49 @@
+package com.baeldung.netty;
+
+import java.io.Serializable;
+
+public class Operation implements Serializable {
+
+ private Integer number1;
+ private Integer number2;
+ private String operator;
+
+ public Operation(Integer number1, Integer number2, String operator) {
+ this.number1 = number1;
+ this.number2 = number2;
+ this.operator = operator;
+ }
+
+ public Integer getNumber1() {
+ return number1;
+ }
+
+ public void setNumber1(Integer number1) {
+ this.number1 = number1;
+ }
+
+ public Integer getNumber2() {
+ return number2;
+ }
+
+ public void setNumber2(Integer number2) {
+ this.number2 = number2;
+ }
+
+ public String getOperator() {
+ return operator;
+ }
+
+ public void setOperator(String operator) {
+ this.operator = operator;
+ }
+
+ @Override
+ public String toString() {
+ return "Operation{" +
+ "number1=" + number1 +
+ ", number2=" + number2 +
+ ", operator='" + operator + '\'' +
+ '}';
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/opencsv/Application.java b/libraries/src/main/java/com/baeldung/opencsv/Application.java
new file mode 100644
index 0000000000..fd7e4d82d4
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/Application.java
@@ -0,0 +1,108 @@
+package com.baeldung.opencsv;
+
+import com.baeldung.opencsv.beans.NamedColumnBean;
+import com.baeldung.opencsv.beans.SimplePositionBean;
+import com.baeldung.opencsv.examples.sync.BeanExamples;
+import com.baeldung.opencsv.examples.sync.CsvReaderExamples;
+import com.baeldung.opencsv.examples.sync.CsvWriterExamples;
+import com.baeldung.opencsv.helpers.Helpers;
+
+import java.io.Reader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+public class Application {
+
+ /*
+ * Bean Examples.
+ */
+
+ public static String simpleSyncPositionBeanExample() {
+ Path path = null;
+ try {
+ path = Helpers.twoColumnCsvPath();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return BeanExamples.beanBuilderExample(path, SimplePositionBean.class).toString();
+ }
+
+ public static String namedSyncColumnBeanExample() {
+ Path path = null;
+ try {
+ path = Helpers.namedColumnCsvPath();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return BeanExamples.beanBuilderExample(path, NamedColumnBean.class).toString();
+ }
+
+ public static String writeSyncCsvFromBeanExample() {
+ Path path = null;
+ try {
+ path = Helpers.fileOutBeanPath();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return BeanExamples.writeCsvFromBean(path);
+ }
+
+ /*
+ * CSV Reader Examples.
+ */
+
+ public static String oneByOneSyncExample() {
+ Reader reader = null;
+ try {
+ reader = Files.newBufferedReader(Helpers.twoColumnCsvPath());
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return CsvReaderExamples.oneByOne(reader).toString();
+ }
+
+ public static String readAllSyncExample() {
+ Reader reader = null;
+ try {
+ reader = Files.newBufferedReader(Helpers.twoColumnCsvPath());
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return CsvReaderExamples.readAll(reader).toString();
+ }
+
+ /*
+ * CSV Writer Examples.
+ */
+
+
+ public static String csvWriterSyncOneByOne() {
+ Path path = null;
+ try {
+ path = Helpers.fileOutOnePath();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return CsvWriterExamples.csvWriterOneByOne(Helpers.fourColumnCsvString(), path);
+ }
+
+ public static String csvWriterSyncAll() {
+ Path path = null;
+ try {
+ path = Helpers.fileOutAllPath();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return CsvWriterExamples.csvWriterAll(Helpers.fourColumnCsvString(), path);
+ }
+
+ public static void main(String[] args) {
+ simpleSyncPositionBeanExample();
+ namedSyncColumnBeanExample();
+ writeSyncCsvFromBeanExample();
+ oneByOneSyncExample();
+ readAllSyncExample();
+ csvWriterSyncOneByOne();
+ csvWriterSyncAll();
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/opencsv/Constants.java b/libraries/src/main/java/com/baeldung/opencsv/Constants.java
new file mode 100644
index 0000000000..f7978acf24
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/Constants.java
@@ -0,0 +1,17 @@
+package com.baeldung.opencsv;
+
+public class Constants {
+
+ public static final String GENERIC_EXCEPTION = "EXCEPTION ENCOUNTERED: ";
+ public static final String GENERIC_SUCCESS = "SUCCESS";
+
+ public static final String TWO_COLUMN_CSV = "csv/twoColumn.csv";
+ public static final String FOUR_COLUMN_CSV = "csv/fourColumn.csv";
+ public static final String NAMED_COLUMN_CSV = "csv/namedColumn.csv";
+
+ public static final String CSV_All = "csv/writtenAll.csv";
+ public static final String CSV_BEAN = "csv/writtenBean.csv";
+ public static final String CSV_ONE = "csv/writtenOneByOne.csv";
+
+
+}
diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/CsvBean.java b/libraries/src/main/java/com/baeldung/opencsv/beans/CsvBean.java
new file mode 100644
index 0000000000..af9caaae12
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/beans/CsvBean.java
@@ -0,0 +1,3 @@
+package com.baeldung.opencsv.beans;
+
+public class CsvBean { }
diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java b/libraries/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java
new file mode 100644
index 0000000000..d9e5f96333
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java
@@ -0,0 +1,31 @@
+package com.baeldung.opencsv.beans;
+
+import com.opencsv.bean.CsvBindByName;
+
+public class NamedColumnBean extends CsvBean {
+
+ @CsvBindByName(column = "name")
+ private String name;
+
+ //Automatically infer column name as Age
+ @CsvBindByName
+ private int age;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+
+}
diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java b/libraries/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java
new file mode 100644
index 0000000000..799006e2f9
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java
@@ -0,0 +1,29 @@
+package com.baeldung.opencsv.beans;
+
+import com.opencsv.bean.CsvBindByPosition;
+
+public class SimplePositionBean extends CsvBean {
+
+ @CsvBindByPosition(position = 0)
+ private String exampleColOne;
+
+ @CsvBindByPosition(position = 1)
+ private String exampleColTwo;
+
+ public String getExampleColOne() {
+ return exampleColOne;
+ }
+
+ private void setExampleColOne(String exampleColOne) {
+ this.exampleColOne = exampleColOne;
+ }
+
+ public String getExampleColTwo() {
+ return exampleColTwo;
+ }
+
+ private void setExampleCsvTwo (String exampleColTwo) {
+ this.exampleColTwo = exampleColTwo;
+ }
+
+}
diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java b/libraries/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java
new file mode 100644
index 0000000000..f145f67f11
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java
@@ -0,0 +1,40 @@
+package com.baeldung.opencsv.beans;
+
+public class WriteExampleBean extends CsvBean {
+
+ private String colA;
+
+ private String colB;
+
+ private String colC;
+
+ public WriteExampleBean(String colA, String colB, String colC) {
+ this.colA = colA;
+ this.colB = colB;
+ this.colC = colC;
+ }
+
+ public String getColA() {
+ return colA;
+ }
+
+ public void setColA(String colA) {
+ this.colA = colA;
+ }
+
+ public String getColB() {
+ return colB;
+ }
+
+ public void setColB(String colB) {
+ this.colB = colB;
+ }
+
+ public String getColC() {
+ return colC;
+ }
+
+ public void setColC(String colC) {
+ this.colC = colC;
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java b/libraries/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java
new file mode 100644
index 0000000000..76d044ca60
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java
@@ -0,0 +1,61 @@
+package com.baeldung.opencsv.examples.sync;
+
+import com.baeldung.opencsv.beans.CsvBean;
+import com.baeldung.opencsv.beans.WriteExampleBean;
+import com.baeldung.opencsv.helpers.Helpers;
+import com.baeldung.opencsv.pojos.CsvTransfer;
+import com.opencsv.CSVWriter;
+import com.opencsv.bean.*;
+
+import java.io.FileWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+
+public class BeanExamples {
+
+ public static List beanBuilderExample(Path path, Class clazz) {
+ CsvTransfer csvTransfer = new CsvTransfer();
+ try {
+ ColumnPositionMappingStrategy ms = new ColumnPositionMappingStrategy();
+ ms.setType(clazz);
+
+ Reader reader = Files.newBufferedReader(path);
+ CsvToBean cb = new CsvToBeanBuilder(reader)
+ .withType(clazz)
+ .withMappingStrategy(ms)
+ .build();
+
+ csvTransfer.setCsvList(cb.parse());
+ reader.close();
+
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return csvTransfer.getCsvList();
+ }
+
+ public static String writeCsvFromBean(Path path) {
+ try {
+ Writer writer = new FileWriter(path.toString());
+
+ StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer)
+ .withSeparator(CSVWriter.DEFAULT_SEPARATOR)
+ .build();
+
+ List list = new ArrayList<>();
+ list.add(new WriteExampleBean("Test1", "sfdsf", "fdfd"));
+ list.add(new WriteExampleBean("Test2", "ipso", "facto"));
+
+ sbc.write(list);
+ writer.close();
+
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return Helpers.readFile(path);
+ }
+}
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java b/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java
new file mode 100644
index 0000000000..bacfdcff3d
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java
@@ -0,0 +1,63 @@
+package com.baeldung.opencsv.examples.sync;
+
+import com.baeldung.opencsv.helpers.Helpers;
+import com.opencsv.CSVParser;
+import com.opencsv.CSVParserBuilder;
+import com.opencsv.CSVReader;
+import com.opencsv.CSVReaderBuilder;
+
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+
+public class CsvReaderExamples {
+
+ public static List readAll(Reader reader) {
+
+ CSVParser parser = new CSVParserBuilder()
+ .withSeparator(',')
+ .withIgnoreQuotations(true)
+ .build();
+
+ CSVReader csvReader = new CSVReaderBuilder(reader)
+ .withSkipLines(0)
+ .withCSVParser(parser)
+ .build();
+
+ List list = new ArrayList<>();
+ try {
+ list = csvReader.readAll();
+ reader.close();
+ csvReader.close();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return list;
+ }
+
+ public static List oneByOne(Reader reader) {
+ List list = new ArrayList<>();
+ try {
+ CSVParser parser = new CSVParserBuilder()
+ .withSeparator(',')
+ .withIgnoreQuotations(true)
+ .build();
+
+ CSVReader csvReader = new CSVReaderBuilder(reader)
+ .withSkipLines(0)
+ .withCSVParser(parser)
+ .build();
+
+ String[] line;
+ while ((line = csvReader.readNext()) != null) {
+ list.add(line);
+ }
+ reader.close();
+ csvReader.close();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return list;
+ }
+
+}
diff --git a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java b/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java
new file mode 100644
index 0000000000..6f52160ba8
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java
@@ -0,0 +1,35 @@
+package com.baeldung.opencsv.examples.sync;
+
+import com.baeldung.opencsv.helpers.Helpers;
+import com.opencsv.CSVWriter;
+
+import java.io.FileWriter;
+import java.nio.file.Path;
+import java.util.List;
+
+public class CsvWriterExamples {
+
+ public static String csvWriterOneByOne(List stringArray, Path path) {
+ try {
+ CSVWriter writer = new CSVWriter(new FileWriter(path.toString()));
+ for (String[] array : stringArray) {
+ writer.writeNext(array);
+ }
+ writer.close();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return Helpers.readFile(path);
+ }
+
+ public static String csvWriterAll(List stringArray, Path path) {
+ try {
+ CSVWriter writer = new CSVWriter(new FileWriter(path.toString()));
+ writer.writeAll(stringArray);
+ writer.close();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return Helpers.readFile(path);
+ }
+}
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/opencsv/helpers/Helpers.java b/libraries/src/main/java/com/baeldung/opencsv/helpers/Helpers.java
new file mode 100644
index 0000000000..9a46fbc495
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/helpers/Helpers.java
@@ -0,0 +1,108 @@
+package com.baeldung.opencsv.helpers;
+
+import com.baeldung.opencsv.Constants;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Helpers {
+
+ /**
+ * Write Files
+ */
+
+ public static Path fileOutAllPath() throws URISyntaxException {
+ URI uri = ClassLoader.getSystemResource(Constants.CSV_All).toURI();
+ return Paths.get(uri);
+ }
+
+ public static Path fileOutBeanPath() throws URISyntaxException {
+ URI uri = ClassLoader.getSystemResource(Constants.CSV_BEAN).toURI();
+ return Paths.get(uri);
+ }
+
+ public static Path fileOutOnePath() throws URISyntaxException {
+ URI uri = ClassLoader.getSystemResource(Constants.CSV_ONE).toURI();
+ return Paths.get(uri);
+ }
+
+ /**
+ * Read Files
+ */
+
+ public static Path twoColumnCsvPath() throws URISyntaxException {
+ URI uri = ClassLoader.getSystemResource(Constants.TWO_COLUMN_CSV).toURI();
+ return Paths.get(uri);
+ }
+
+ public static Path fourColumnCsvPath() throws URISyntaxException {
+ URI uri = ClassLoader.getSystemResource(Constants.FOUR_COLUMN_CSV).toURI();
+ return Paths.get(uri);
+ }
+
+ public static Path namedColumnCsvPath() throws URISyntaxException {
+ URI uri = ClassLoader.getSystemResource(Constants.NAMED_COLUMN_CSV).toURI();
+ return Paths.get(uri);
+ }
+
+ /**
+ * Simple File Reader
+ */
+
+ public static String readFile(Path path) {
+ String response = "";
+ try {
+ FileReader fr = new FileReader(path.toString());
+ BufferedReader br = new BufferedReader(fr);
+ String strLine;
+ StringBuffer sb = new StringBuffer();
+ while ((strLine = br.readLine()) != null) {
+ sb.append(strLine);
+ }
+ response = sb.toString();
+ System.out.println(response);
+ fr.close();
+ br.close();
+ } catch (Exception ex) {
+ Helpers.err(ex);
+ }
+ return response;
+ }
+
+ /**
+ * Dummy Data for Writing.
+ */
+
+ public static List twoColumnCsvString() {
+ List list = new ArrayList<>();
+ list.add(new String[]{"ColA", "ColB"});
+ list.add(new String[]{"A", "B"});
+ return list;
+ }
+
+ public static List fourColumnCsvString() {
+ List list = new ArrayList<>();
+ list.add(new String[]{"ColA", "ColB", "ColC", "ColD"});
+ list.add(new String[]{"A", "B", "A", "B"});
+ list.add(new String[]{"BB", "AB", "AA", "B"});
+ return list;
+ }
+
+ /**
+ * Message Helpers
+ */
+
+ public static void print(String msg) {
+ System.out.println(msg);
+ }
+
+ public static void err(Exception ex) {
+ System.out.println(Constants.GENERIC_EXCEPTION + " " + ex);
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java b/libraries/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java
new file mode 100644
index 0000000000..79366e3d20
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java
@@ -0,0 +1,38 @@
+package com.baeldung.opencsv.pojos;
+
+import com.baeldung.opencsv.beans.CsvBean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CsvTransfer {
+
+ private List csvStringList;
+
+ private List csvList;
+
+ public CsvTransfer() {}
+
+ public List getCsvStringList() {
+ if (csvStringList != null) return csvStringList;
+ return new ArrayList();
+ }
+
+ public void addLine(String[] line) {
+ if (this.csvList == null) this.csvStringList = new ArrayList<>();
+ this.csvStringList.add(line);
+ }
+
+ public void setCsvStringList(List csvStringList) {
+ this.csvStringList = csvStringList;
+ }
+
+ public void setCsvList(List csvList) {
+ this.csvList = csvList;
+ }
+
+ public List getCsvList() {
+ if (csvList != null) return csvList;
+ return new ArrayList();
+ }
+}
\ No newline at end of file
diff --git a/libraries/src/main/resources/csv/fourColumn.csv b/libraries/src/main/resources/csv/fourColumn.csv
new file mode 100644
index 0000000000..51a69fd1a0
--- /dev/null
+++ b/libraries/src/main/resources/csv/fourColumn.csv
@@ -0,0 +1,5 @@
+ColA,ColB,ColC,ColD
+A,B,B,B
+C,D,W,W
+G,G,E,E
+G,F,Q,Q
diff --git a/libraries/src/main/resources/csv/namedColumn.csv b/libraries/src/main/resources/csv/namedColumn.csv
new file mode 100644
index 0000000000..279b743600
--- /dev/null
+++ b/libraries/src/main/resources/csv/namedColumn.csv
@@ -0,0 +1,5 @@
+name,age
+adam,1000
+martin,27
+gigi,41
+seraphine,30
\ No newline at end of file
diff --git a/libraries/src/main/resources/csv/twoColumn.csv b/libraries/src/main/resources/csv/twoColumn.csv
new file mode 100644
index 0000000000..3eab8e8a64
--- /dev/null
+++ b/libraries/src/main/resources/csv/twoColumn.csv
@@ -0,0 +1,5 @@
+ColA,ColB
+A,B
+C,D
+G,G
+G,F
diff --git a/libraries/src/main/resources/csv/writtenAll.csv b/libraries/src/main/resources/csv/writtenAll.csv
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/src/main/resources/csv/writtenBean.csv b/libraries/src/main/resources/csv/writtenBean.csv
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/src/main/resources/csv/writtenOneByOne.csv b/libraries/src/main/resources/csv/writtenOneByOne.csv
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/src/test/java/com/baeldung/asynchttpclient/AsyncHttpClientTestCase.java b/libraries/src/test/java/com/baeldung/asynchttpclient/AsyncHttpClientLiveTest.java
similarity index 99%
rename from libraries/src/test/java/com/baeldung/asynchttpclient/AsyncHttpClientTestCase.java
rename to libraries/src/test/java/com/baeldung/asynchttpclient/AsyncHttpClientLiveTest.java
index 7ff81c20c3..4d35dd79da 100644
--- a/libraries/src/test/java/com/baeldung/asynchttpclient/AsyncHttpClientTestCase.java
+++ b/libraries/src/test/java/com/baeldung/asynchttpclient/AsyncHttpClientLiveTest.java
@@ -28,7 +28,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-public class AsyncHttpClientTestCase {
+public class AsyncHttpClientLiveTest {
private static AsyncHttpClient HTTP_CLIENT;
diff --git a/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueTest.java b/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueTest.java
index d52f392217..2ba1086226 100644
--- a/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueTest.java
+++ b/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueTest.java
@@ -2,11 +2,9 @@ package com.baeldung.atlassian.fugue;
import io.atlassian.fugue.*;
import org.junit.Assert;
-import org.junit.Before;
import org.junit.Test;
-import java.util.NoSuchElementException;
-import java.util.Optional;
+import java.util.*;
import java.util.function.Function;
import static org.junit.Assert.*;
@@ -14,10 +12,6 @@ import static io.atlassian.fugue.Unit.Unit;
public class FugueTest {
- @Before
- public void setup() {
- }
-
@Test
public void whenSome_thenDefined() {
Option some = Option.some("value");
@@ -47,7 +41,11 @@ public class FugueTest {
@Test
public void whenNullOption_thenSome() {
- Option