From 21bd180c1c1600bbdcefbc7aa4d57813c424ad3a Mon Sep 17 00:00:00 2001 From: Thoughtscript Date: Thu, 19 Apr 2018 05:37:34 +0100 Subject: [PATCH 01/82] BAEL-1461 --- pom.xml | 1 + web3j/.gitignore | 3 + web3j/README.md | 4 + web3j/dev_ganache/README.md | 23 + web3j/dev_truffle/README.md | 43 + .../build/contracts/ConvertLib.json | 455 ++++++ .../dev_truffle/build/contracts/Example.json | 251 +++ .../build/contracts/Migrations.json | 1380 +++++++++++++++++ web3j/dev_truffle/contracts/ConvertLib.sol | 8 + web3j/dev_truffle/contracts/Example.sol | 11 + web3j/dev_truffle/contracts/Migrations.sol | 23 + .../migrations/1_initial_migration.js | 3 + .../migrations/2_deploy_contracts.js | 8 + web3j/dev_truffle/truffle.js | 20 + web3j/pom.xml | 210 +++ .../com/baeldung/web3j/config/AppConfig.java | 68 + .../web3j/config/WebAppInitializer.java | 28 + .../baeldung/web3j/constants/Constants.java | 18 + .../com/baeldung/web3j/contracts/Example.java | 74 + .../controllers/EthereumRestController.java | 103 ++ .../baeldung/web3j/helpers/TimeHelper.java | 16 + .../baeldung/web3j/services/Web3Service.java | 156 ++ .../web3j/transfers/ResponseTransfer.java | 28 + web3j/src/main/webapp/WEB-INF/.gitkeep | 0 web3j/src/main/webapp/resources/.gitkeep | 0 ...EthereumRestControllerIntegrationTest.java | 78 + .../EthereumRestControllerUnitTest.java | 76 + .../services/EthereumContractUnitTest.java | 37 + 28 files changed, 3125 insertions(+) create mode 100644 web3j/.gitignore create mode 100644 web3j/README.md create mode 100644 web3j/dev_ganache/README.md create mode 100644 web3j/dev_truffle/README.md create mode 100644 web3j/dev_truffle/build/contracts/ConvertLib.json create mode 100644 web3j/dev_truffle/build/contracts/Example.json create mode 100644 web3j/dev_truffle/build/contracts/Migrations.json create mode 100644 web3j/dev_truffle/contracts/ConvertLib.sol create mode 100644 web3j/dev_truffle/contracts/Example.sol create mode 100644 web3j/dev_truffle/contracts/Migrations.sol create mode 100644 web3j/dev_truffle/migrations/1_initial_migration.js create mode 100644 web3j/dev_truffle/migrations/2_deploy_contracts.js create mode 100644 web3j/dev_truffle/truffle.js create mode 100644 web3j/pom.xml create mode 100644 web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java create mode 100644 web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java create mode 100644 web3j/src/main/java/com/baeldung/web3j/constants/Constants.java create mode 100644 web3j/src/main/java/com/baeldung/web3j/contracts/Example.java create mode 100644 web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java create mode 100644 web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java create mode 100644 web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java create mode 100644 web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java create mode 100644 web3j/src/main/webapp/WEB-INF/.gitkeep create mode 100644 web3j/src/main/webapp/resources/.gitkeep create mode 100644 web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java create mode 100644 web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java create mode 100644 web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java diff --git a/pom.xml b/pom.xml index f0cb72e4d0..750c95679c 100644 --- a/pom.xml +++ b/pom.xml @@ -74,6 +74,7 @@ dozer ethereumj + web3j diff --git a/web3j/.gitignore b/web3j/.gitignore new file mode 100644 index 0000000000..f83e8cf07c --- /dev/null +++ b/web3j/.gitignore @@ -0,0 +1,3 @@ +.idea +target +*.iml diff --git a/web3j/README.md b/web3j/README.md new file mode 100644 index 0000000000..bc9909af25 --- /dev/null +++ b/web3j/README.md @@ -0,0 +1,4 @@ +## Web3j + +### Relevant Articles: +- [Lightweight Web3](http://www.baeldung.com/lightweight-web3/) diff --git a/web3j/dev_ganache/README.md b/web3j/dev_ganache/README.md new file mode 100644 index 0000000000..2d3e645504 --- /dev/null +++ b/web3j/dev_ganache/README.md @@ -0,0 +1,23 @@ +# Ganache Readme + +TL:DR - To set up Ganache visit: http://truffleframework.com/ganache/ + +# Three Ways to Install Ganache + +Ganache is provided in three libraries or distributions: + +(1) Ganache - https://github.com/trufflesuite/ganache + +This is a pre-built and out-of-the-box solution. Easiest to set up. It provides an interface and server shell for Ganache CLI. + +(2) Ganache CLI - https://www.npmjs.com/package/ganache-cli + +Ganache CLI abstracts Ganache Core and supplies the default options and arguments used. + +(3) Ganache Core - https://www.npmjs.com/package/ganache-core + +Basically, only use Ganache Core if you need to build a totally customized option. + +# Use + +The default port is *8545* on *localhost* \ No newline at end of file diff --git a/web3j/dev_truffle/README.md b/web3j/dev_truffle/README.md new file mode 100644 index 0000000000..b64e16d570 --- /dev/null +++ b/web3j/dev_truffle/README.md @@ -0,0 +1,43 @@ +# Using Truffle + +Basic Truffle walkthrough readme. + +See also: http://truffleframework.com/docs/ + +# Bash + +Truffle install + +```bash + $ npm install truffle -g + $ truffle version +``` + +Truffle commands: + +```bash + $ truffle init + $ truffle compile + $ truffle migrate + $ truffle test +``` + +# Directory Structure + +The command `$ truffle init` will create a directory structure in the specified root according to the following: + +``` +root -| + |-build (Compiled Solc JSON Output Dir) + |-contracts (Solc Contracts to be Compiled and Migrated) + |-migrations (Specify the Order and Dependencies of Contracts to Be Deployed) + |-test (Truffle Tests) +``` + +# Compile + +Truffle will compile the smart contracts and expose their **JSON ABI's for use with Web3.js** or **Binary ABI's for use with Web3J**. + +# Migration + +Truffle will let you deploy your Solc contracts directly to a blockchin of your choice. \ No newline at end of file diff --git a/web3j/dev_truffle/build/contracts/ConvertLib.json b/web3j/dev_truffle/build/contracts/ConvertLib.json new file mode 100644 index 0000000000..977928c756 --- /dev/null +++ b/web3j/dev_truffle/build/contracts/ConvertLib.json @@ -0,0 +1,455 @@ +{ + "contractName": "ConvertLib", + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "amount", + "type": "uint256" + }, + { + "name": "conversionRate", + "type": "uint256" + } + ], + "name": "convert", + "outputs": [ + { + "name": "convertedAmount", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60d161002f600b82828239805160001a6073146000811461001f57610021565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146060604052600436106056576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806396e4ee3d14605b575b600080fd5b8115606557600080fd5b608260048080359060200190919080359060200190919050506098565b6040518082815260200191505060405180910390f35b60008183029050929150505600a165627a7a72305820ab84b2740847d7b84a33de9738ae9cf9aabac1b68e6a64d60bd5020b9b6235e40029", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146060604052600436106056576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806396e4ee3d14605b575b600080fd5b8115606557600080fd5b608260048080359060200190919080359060200190919050506098565b6040518082815260200191505060405180910390f35b60008183029050929150505600a165627a7a72305820ab84b2740847d7b84a33de9738ae9cf9aabac1b68e6a64d60bd5020b9b6235e40029", + "sourceMap": "28:148:0:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24", + "deployedSourceMap": "28:148:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;50:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;109:20;154:14;145:6;:23;138:30;;50:123;;;;:::o", + "source": "pragma solidity ^0.4.17;\r\n\r\nlibrary ConvertLib{\r\n\tfunction convert(uint amount,uint conversionRate) returns (uint convertedAmount)\r\n\t{\r\n\t\treturn amount * conversionRate;\r\n\t}\r\n}\r\n", + "sourcePath": "C:\\workspace\\current_workspace\\web3java\\dev_truffle\\contracts\\ConvertLib.sol", + "ast": { + "absolutePath": "/C/workspace/current_workspace/web3java/dev_truffle/contracts/ConvertLib.sol", + "exportedSymbols": { + "ConvertLib": [ + 16 + ] + }, + "id": 17, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.4", + ".17" + ], + "nodeType": "PragmaDirective", + "src": "0:24:0" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": null, + "fullyImplemented": true, + "id": 16, + "linearizedBaseContracts": [ + 16 + ], + "name": "ConvertLib", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 14, + "nodeType": "Block", + "src": "133:40:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 10, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "145:6:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "id": 11, + "name": "conversionRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "154:14:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "145:23:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9, + "id": 13, + "nodeType": "Return", + "src": "138:30:0" + } + ] + }, + "documentation": null, + "id": 15, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "convert", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 15, + "src": "67:11:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "67:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5, + "name": "conversionRate", + "nodeType": "VariableDeclaration", + "scope": 15, + "src": "79:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "79:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "66:33:0" + }, + "payable": false, + "returnParameters": { + "id": 9, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8, + "name": "convertedAmount", + "nodeType": "VariableDeclaration", + "scope": 15, + "src": "109:20:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "109:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "108:22:0" + }, + "scope": 16, + "src": "50:123:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 17, + "src": "28:148:0" + } + ], + "src": "0:178:0" + }, + "legacyAST": { + "absolutePath": "/C/workspace/current_workspace/web3java/dev_truffle/contracts/ConvertLib.sol", + "exportedSymbols": { + "ConvertLib": [ + 16 + ] + }, + "id": 17, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.4", + ".17" + ], + "nodeType": "PragmaDirective", + "src": "0:24:0" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": null, + "fullyImplemented": true, + "id": 16, + "linearizedBaseContracts": [ + 16 + ], + "name": "ConvertLib", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 14, + "nodeType": "Block", + "src": "133:40:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 10, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3, + "src": "145:6:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "id": 11, + "name": "conversionRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "154:14:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "145:23:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9, + "id": 13, + "nodeType": "Return", + "src": "138:30:0" + } + ] + }, + "documentation": null, + "id": 15, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "convert", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 15, + "src": "67:11:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "67:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 5, + "name": "conversionRate", + "nodeType": "VariableDeclaration", + "scope": 15, + "src": "79:19:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "79:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "66:33:0" + }, + "payable": false, + "returnParameters": { + "id": 9, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8, + "name": "convertedAmount", + "nodeType": "VariableDeclaration", + "scope": 15, + "src": "109:20:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "109:4:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "108:22:0" + }, + "scope": 16, + "src": "50:123:0", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 17, + "src": "28:148:0" + } + ], + "src": "0:178:0" + }, + "compiler": { + "name": "solc", + "version": "0.4.21+commit.dfe3193c.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "2.0.0", + "updatedAt": "2018-04-14T03:37:39.678Z" +} \ No newline at end of file diff --git a/web3j/dev_truffle/build/contracts/Example.json b/web3j/dev_truffle/build/contracts/Example.json new file mode 100644 index 0000000000..82111dab11 --- /dev/null +++ b/web3j/dev_truffle/build/contracts/Example.json @@ -0,0 +1,251 @@ +{ + "contractName": "Example", + "abi": [ + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "constant": false, + "inputs": [], + "name": "ExampleFunction", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60606040523415600e57600080fd5b60848061001c6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b818dacd146044575b600080fd5b3415604e57600080fd5b60546056565b005b5600a165627a7a72305820bebcbbdf06550591bc772dfcb0eadc842f95953869feb7a9528bac91487d95240029", + "deployedBytecode": "0x606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b818dacd146044575b600080fd5b3415604e57600080fd5b60546056565b005b5600a165627a7a72305820bebcbbdf06550591bc772dfcb0eadc842f95953869feb7a9528bac91487d95240029", + "sourceMap": "28:134:1:-;;;50:45;;;;;;;;28:134;;;;;;", + "deployedSourceMap": "28:134:1:-;;;;;;;;;;;;;;;;;;;;;;;;101:58;;;;;;;;;;;;;;;:::o", + "source": "pragma solidity ^0.4.17;\r\n\r\ncontract Example {\r\n function Example() {\r\n // constructor\r\n }\r\n\r\n function ExampleFunction() {\r\n // example function\r\n }\r\n}", + "sourcePath": "C:\\workspace\\current_workspace\\web3java\\dev_truffle\\contracts\\Example.sol", + "ast": { + "absolutePath": "/C/workspace/current_workspace/web3java/dev_truffle/contracts/Example.sol", + "exportedSymbols": { + "Example": [ + 27 + ] + }, + "id": 28, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 18, + "literals": [ + "solidity", + "^", + "0.4", + ".17" + ], + "nodeType": "PragmaDirective", + "src": "0:24:1" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 27, + "linearizedBaseContracts": [ + 27 + ], + "name": "Example", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 21, + "nodeType": "Block", + "src": "69:26:1", + "statements": [] + }, + "documentation": null, + "id": 22, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "Example", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 19, + "nodeType": "ParameterList", + "parameters": [], + "src": "66:2:1" + }, + "payable": false, + "returnParameters": { + "id": 20, + "nodeType": "ParameterList", + "parameters": [], + "src": "69:0:1" + }, + "scope": 27, + "src": "50:45:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 25, + "nodeType": "Block", + "src": "128:31:1", + "statements": [] + }, + "documentation": null, + "id": 26, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "ExampleFunction", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 23, + "nodeType": "ParameterList", + "parameters": [], + "src": "125:2:1" + }, + "payable": false, + "returnParameters": { + "id": 24, + "nodeType": "ParameterList", + "parameters": [], + "src": "128:0:1" + }, + "scope": 27, + "src": "101:58:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 28, + "src": "28:134:1" + } + ], + "src": "0:162:1" + }, + "legacyAST": { + "absolutePath": "/C/workspace/current_workspace/web3java/dev_truffle/contracts/Example.sol", + "exportedSymbols": { + "Example": [ + 27 + ] + }, + "id": 28, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 18, + "literals": [ + "solidity", + "^", + "0.4", + ".17" + ], + "nodeType": "PragmaDirective", + "src": "0:24:1" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 27, + "linearizedBaseContracts": [ + 27 + ], + "name": "Example", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 21, + "nodeType": "Block", + "src": "69:26:1", + "statements": [] + }, + "documentation": null, + "id": 22, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "Example", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 19, + "nodeType": "ParameterList", + "parameters": [], + "src": "66:2:1" + }, + "payable": false, + "returnParameters": { + "id": 20, + "nodeType": "ParameterList", + "parameters": [], + "src": "69:0:1" + }, + "scope": 27, + "src": "50:45:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 25, + "nodeType": "Block", + "src": "128:31:1", + "statements": [] + }, + "documentation": null, + "id": 26, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [], + "name": "ExampleFunction", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 23, + "nodeType": "ParameterList", + "parameters": [], + "src": "125:2:1" + }, + "payable": false, + "returnParameters": { + "id": 24, + "nodeType": "ParameterList", + "parameters": [], + "src": "128:0:1" + }, + "scope": 27, + "src": "101:58:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 28, + "src": "28:134:1" + } + ], + "src": "0:162:1" + }, + "compiler": { + "name": "solc", + "version": "0.4.21+commit.dfe3193c.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "2.0.0", + "updatedAt": "2018-04-14T03:37:39.710Z" +} \ No newline at end of file diff --git a/web3j/dev_truffle/build/contracts/Migrations.json b/web3j/dev_truffle/build/contracts/Migrations.json new file mode 100644 index 0000000000..55f2c7ad69 --- /dev/null +++ b/web3j/dev_truffle/build/contracts/Migrations.json @@ -0,0 +1,1380 @@ +{ + "contractName": "Migrations", + "abi": [ + { + "constant": true, + "inputs": [], + "name": "last_completed_migration", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "constant": false, + "inputs": [ + { + "name": "completed", + "type": "uint256" + } + ], + "name": "setCompleted", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "new_address", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102d78061005e6000396000f300606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100a05780638da5cb5b146100c9578063fdacd5761461011e575b600080fd5b341561007257600080fd5b61009e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610141565b005b34156100ab57600080fd5b6100b3610220565b6040518082815260200191505060405180910390f35b34156100d457600080fd5b6100dc610226565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561012957600080fd5b61013f600480803590602001909190505061024b565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561021c578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b151561020b57600080fd5b5af1151561021857600080fd5b5050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102a857806001819055505b505600a165627a7a72305820be5431ce1823a03470fc4376ec6fdfa9e54ca2bd2b05b6271c73eb54ad4e4b060029", + "deployedBytecode": "0x606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100a05780638da5cb5b146100c9578063fdacd5761461011e575b600080fd5b341561007257600080fd5b61009e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610141565b005b34156100ab57600080fd5b6100b3610220565b6040518082815260200191505060405180910390f35b34156100d457600080fd5b6100dc610226565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561012957600080fd5b61013f600480803590602001909190505061024b565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561021c578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b151561020b57600080fd5b5af1151561021857600080fd5b5050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102a857806001819055505b505600a165627a7a72305820be5431ce1823a03470fc4376ec6fdfa9e54ca2bd2b05b6271c73eb54ad4e4b060029", + "sourceMap": "26:488:2:-;;;178:58;;;;;;;;221:10;213:5;;:18;;;;;;;;;;;;;;;;;;26:488;;;;;;", + "deployedSourceMap": "26:488:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;347:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;74:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;240:103;;;;;;;;;;;;;;;;;;;;;;;;;;347:165;409:19;161:5;;;;;;;;;;;147:19;;:10;:19;;;143:26;;;442:11;409:45;;460:8;:21;;;482:24;;460:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;143:26;347:165;;:::o;74:36::-;;;;:::o;50:20::-;;;;;;;;;;;;;:::o;240:103::-;161:5;;;;;;;;;;;147:19;;:10;:19;;;143:26;;;329:9;302:24;:36;;;;143:26;240:103;:::o", + "source": "pragma solidity ^0.4.17;\n\ncontract Migrations {\n address public owner;\n uint public last_completed_migration;\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n function Migrations() public {\n owner = msg.sender;\n }\n\n function setCompleted(uint completed) public restricted {\n last_completed_migration = completed;\n }\n\n function upgrade(address new_address) public restricted {\n Migrations upgraded = Migrations(new_address);\n upgraded.setCompleted(last_completed_migration);\n }\n}\n", + "sourcePath": "C:\\workspace\\current_workspace\\web3java\\dev_truffle\\contracts\\Migrations.sol", + "ast": { + "absolutePath": "/C/workspace/current_workspace/web3java/dev_truffle/contracts/Migrations.sol", + "exportedSymbols": { + "Migrations": [ + 84 + ] + }, + "id": 85, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 29, + "literals": [ + "solidity", + "^", + "0.4", + ".17" + ], + "nodeType": "PragmaDirective", + "src": "0:24:2" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 84, + "linearizedBaseContracts": [ + 84 + ], + "name": "Migrations", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 31, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 84, + "src": "50:20:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 30, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "50:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 33, + "name": "last_completed_migration", + "nodeType": "VariableDeclaration", + "scope": 84, + "src": "74:36:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 32, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "74:4:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "body": { + "id": 41, + "nodeType": "Block", + "src": "137:37:2", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 38, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 35, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 97, + "src": "147:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 36, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "147:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 37, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 31, + "src": "161:5:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "147:19:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 40, + "nodeType": "IfStatement", + "src": "143:26:2", + "trueBody": { + "id": 39, + "nodeType": "PlaceholderStatement", + "src": "168:1:2" + } + } + ] + }, + "documentation": null, + "id": 42, + "name": "restricted", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 34, + "nodeType": "ParameterList", + "parameters": [], + "src": "134:2:2" + }, + "src": "115:59:2", + "visibility": "internal" + }, + { + "body": { + "id": 50, + "nodeType": "Block", + "src": "207:29:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 48, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 45, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 31, + "src": "213:5:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 46, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 97, + "src": "221:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 47, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "221:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "213:18:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 49, + "nodeType": "ExpressionStatement", + "src": "213:18:2" + } + ] + }, + "documentation": null, + "id": 51, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "Migrations", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 43, + "nodeType": "ParameterList", + "parameters": [], + "src": "197:2:2" + }, + "payable": false, + "returnParameters": { + "id": 44, + "nodeType": "ParameterList", + "parameters": [], + "src": "207:0:2" + }, + "scope": 84, + "src": "178:58:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 62, + "nodeType": "Block", + "src": "296:47:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 60, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 58, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 33, + "src": "302:24:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 59, + "name": "completed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53, + "src": "329:9:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "302:36:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61, + "nodeType": "ExpressionStatement", + "src": "302:36:2" + } + ] + }, + "documentation": null, + "id": 63, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 56, + "modifierName": { + "argumentTypes": null, + "id": 55, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 42, + "src": "285:10:2", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "285:10:2" + } + ], + "name": "setCompleted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 54, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 53, + "name": "completed", + "nodeType": "VariableDeclaration", + "scope": 63, + "src": "262:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 52, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "262:4:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "261:16:2" + }, + "payable": false, + "returnParameters": { + "id": 57, + "nodeType": "ParameterList", + "parameters": [], + "src": "296:0:2" + }, + "scope": 84, + "src": "240:103:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 82, + "nodeType": "Block", + "src": "403:109:2", + "statements": [ + { + "assignments": [ + 71 + ], + "declarations": [ + { + "constant": false, + "id": 71, + "name": "upgraded", + "nodeType": "VariableDeclaration", + "scope": 83, + "src": "409:19:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$84", + "typeString": "contract Migrations" + }, + "typeName": { + "contractScope": null, + "id": 70, + "name": "Migrations", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 84, + "src": "409:10:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$84", + "typeString": "contract Migrations" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 75, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 73, + "name": "new_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65, + "src": "442:11:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 72, + "name": "Migrations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 84, + "src": "431:10:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Migrations_$84_$", + "typeString": "type(contract Migrations)" + } + }, + "id": 74, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "431:23:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$84", + "typeString": "contract Migrations" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "409:45:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 79, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 33, + "src": "482:24:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 76, + "name": "upgraded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "460:8:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$84", + "typeString": "contract Migrations" + } + }, + "id": 78, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setCompleted", + "nodeType": "MemberAccess", + "referencedDeclaration": 63, + "src": "460:21:2", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256) external" + } + }, + "id": 80, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "460:47:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 81, + "nodeType": "ExpressionStatement", + "src": "460:47:2" + } + ] + }, + "documentation": null, + "id": 83, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 68, + "modifierName": { + "argumentTypes": null, + "id": 67, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 42, + "src": "392:10:2", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "392:10:2" + } + ], + "name": "upgrade", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 66, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 65, + "name": "new_address", + "nodeType": "VariableDeclaration", + "scope": 83, + "src": "364:19:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 64, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "364:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "363:21:2" + }, + "payable": false, + "returnParameters": { + "id": 69, + "nodeType": "ParameterList", + "parameters": [], + "src": "403:0:2" + }, + "scope": 84, + "src": "347:165:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 85, + "src": "26:488:2" + } + ], + "src": "0:515:2" + }, + "legacyAST": { + "absolutePath": "/C/workspace/current_workspace/web3java/dev_truffle/contracts/Migrations.sol", + "exportedSymbols": { + "Migrations": [ + 84 + ] + }, + "id": 85, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 29, + "literals": [ + "solidity", + "^", + "0.4", + ".17" + ], + "nodeType": "PragmaDirective", + "src": "0:24:2" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 84, + "linearizedBaseContracts": [ + 84 + ], + "name": "Migrations", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 31, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 84, + "src": "50:20:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 30, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "50:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 33, + "name": "last_completed_migration", + "nodeType": "VariableDeclaration", + "scope": 84, + "src": "74:36:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 32, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "74:4:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "body": { + "id": 41, + "nodeType": "Block", + "src": "137:37:2", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 38, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 35, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 97, + "src": "147:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 36, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "147:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 37, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 31, + "src": "161:5:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "147:19:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 40, + "nodeType": "IfStatement", + "src": "143:26:2", + "trueBody": { + "id": 39, + "nodeType": "PlaceholderStatement", + "src": "168:1:2" + } + } + ] + }, + "documentation": null, + "id": 42, + "name": "restricted", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 34, + "nodeType": "ParameterList", + "parameters": [], + "src": "134:2:2" + }, + "src": "115:59:2", + "visibility": "internal" + }, + { + "body": { + "id": 50, + "nodeType": "Block", + "src": "207:29:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 48, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 45, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 31, + "src": "213:5:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 46, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 97, + "src": "221:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 47, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "221:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "213:18:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 49, + "nodeType": "ExpressionStatement", + "src": "213:18:2" + } + ] + }, + "documentation": null, + "id": 51, + "implemented": true, + "isConstructor": true, + "isDeclaredConst": false, + "modifiers": [], + "name": "Migrations", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 43, + "nodeType": "ParameterList", + "parameters": [], + "src": "197:2:2" + }, + "payable": false, + "returnParameters": { + "id": 44, + "nodeType": "ParameterList", + "parameters": [], + "src": "207:0:2" + }, + "scope": 84, + "src": "178:58:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 62, + "nodeType": "Block", + "src": "296:47:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 60, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 58, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 33, + "src": "302:24:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 59, + "name": "completed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53, + "src": "329:9:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "302:36:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61, + "nodeType": "ExpressionStatement", + "src": "302:36:2" + } + ] + }, + "documentation": null, + "id": 63, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 56, + "modifierName": { + "argumentTypes": null, + "id": 55, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 42, + "src": "285:10:2", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "285:10:2" + } + ], + "name": "setCompleted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 54, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 53, + "name": "completed", + "nodeType": "VariableDeclaration", + "scope": 63, + "src": "262:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 52, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "262:4:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "261:16:2" + }, + "payable": false, + "returnParameters": { + "id": 57, + "nodeType": "ParameterList", + "parameters": [], + "src": "296:0:2" + }, + "scope": 84, + "src": "240:103:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 82, + "nodeType": "Block", + "src": "403:109:2", + "statements": [ + { + "assignments": [ + 71 + ], + "declarations": [ + { + "constant": false, + "id": 71, + "name": "upgraded", + "nodeType": "VariableDeclaration", + "scope": 83, + "src": "409:19:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$84", + "typeString": "contract Migrations" + }, + "typeName": { + "contractScope": null, + "id": 70, + "name": "Migrations", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 84, + "src": "409:10:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$84", + "typeString": "contract Migrations" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 75, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 73, + "name": "new_address", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65, + "src": "442:11:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 72, + "name": "Migrations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 84, + "src": "431:10:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Migrations_$84_$", + "typeString": "type(contract Migrations)" + } + }, + "id": 74, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "431:23:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$84", + "typeString": "contract Migrations" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "409:45:2" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 79, + "name": "last_completed_migration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 33, + "src": "482:24:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 76, + "name": "upgraded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "460:8:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Migrations_$84", + "typeString": "contract Migrations" + } + }, + "id": 78, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setCompleted", + "nodeType": "MemberAccess", + "referencedDeclaration": 63, + "src": "460:21:2", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256) external" + } + }, + "id": 80, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "460:47:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 81, + "nodeType": "ExpressionStatement", + "src": "460:47:2" + } + ] + }, + "documentation": null, + "id": 83, + "implemented": true, + "isConstructor": false, + "isDeclaredConst": false, + "modifiers": [ + { + "arguments": [], + "id": 68, + "modifierName": { + "argumentTypes": null, + "id": 67, + "name": "restricted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 42, + "src": "392:10:2", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "392:10:2" + } + ], + "name": "upgrade", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 66, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 65, + "name": "new_address", + "nodeType": "VariableDeclaration", + "scope": 83, + "src": "364:19:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 64, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "364:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "363:21:2" + }, + "payable": false, + "returnParameters": { + "id": 69, + "nodeType": "ParameterList", + "parameters": [], + "src": "403:0:2" + }, + "scope": 84, + "src": "347:165:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + } + ], + "scope": 85, + "src": "26:488:2" + } + ], + "src": "0:515:2" + }, + "compiler": { + "name": "solc", + "version": "0.4.21+commit.dfe3193c.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "2.0.0", + "updatedAt": "2018-04-14T03:37:39.710Z" +} \ No newline at end of file diff --git a/web3j/dev_truffle/contracts/ConvertLib.sol b/web3j/dev_truffle/contracts/ConvertLib.sol new file mode 100644 index 0000000000..ec0576fc3f --- /dev/null +++ b/web3j/dev_truffle/contracts/ConvertLib.sol @@ -0,0 +1,8 @@ +pragma solidity ^0.4.17; + +library ConvertLib{ + function convert(uint amount,uint conversionRate) returns (uint convertedAmount) + { + return amount * conversionRate; + } +} diff --git a/web3j/dev_truffle/contracts/Example.sol b/web3j/dev_truffle/contracts/Example.sol new file mode 100644 index 0000000000..c09c54843c --- /dev/null +++ b/web3j/dev_truffle/contracts/Example.sol @@ -0,0 +1,11 @@ +pragma solidity ^0.4.17; + +contract Example { + function Example() { + // constructor + } + + function ExampleFunction() { + // example function + } +} \ No newline at end of file diff --git a/web3j/dev_truffle/contracts/Migrations.sol b/web3j/dev_truffle/contracts/Migrations.sol new file mode 100644 index 0000000000..f170cb4fa7 --- /dev/null +++ b/web3j/dev_truffle/contracts/Migrations.sol @@ -0,0 +1,23 @@ +pragma solidity ^0.4.17; + +contract Migrations { + address public owner; + uint public last_completed_migration; + + modifier restricted() { + if (msg.sender == owner) _; + } + + function Migrations() public { + owner = msg.sender; + } + + function setCompleted(uint completed) public restricted { + last_completed_migration = completed; + } + + function upgrade(address new_address) public restricted { + Migrations upgraded = Migrations(new_address); + upgraded.setCompleted(last_completed_migration); + } +} diff --git a/web3j/dev_truffle/migrations/1_initial_migration.js b/web3j/dev_truffle/migrations/1_initial_migration.js new file mode 100644 index 0000000000..269ad95867 --- /dev/null +++ b/web3j/dev_truffle/migrations/1_initial_migration.js @@ -0,0 +1,3 @@ +module.exports = deployer => { + deployer.deploy(artifacts.require("./Migrations.sol")); +}; diff --git a/web3j/dev_truffle/migrations/2_deploy_contracts.js b/web3j/dev_truffle/migrations/2_deploy_contracts.js new file mode 100644 index 0000000000..b6f30176ae --- /dev/null +++ b/web3j/dev_truffle/migrations/2_deploy_contracts.js @@ -0,0 +1,8 @@ +const Example = artifacts.require("./Example.sol"), + ConvertLib = artifacts.require("./ConvertLib.sol"); + +module.exports = deployer => { + deployer.deploy(ConvertLib); + deployer.link(ConvertLib, Example); + deployer.deploy(Example); +}; diff --git a/web3j/dev_truffle/truffle.js b/web3j/dev_truffle/truffle.js new file mode 100644 index 0000000000..8110fdad45 --- /dev/null +++ b/web3j/dev_truffle/truffle.js @@ -0,0 +1,20 @@ +module.exports = { + contracts_build_directory: "./build/contracts", + networks: { + live: { + network_id: 1, // Ethereum public network + host: 'localhost', + port: 8545 + }, + testnet: { + network_id: 3, // Official Ethereum test network (Ropsten) + host: 'localhost', + port: 8545 + }, + development: { + host: 'localhost', + port: 8545, + network_id: '*' + } + } +} diff --git a/web3j/pom.xml b/web3j/pom.xml new file mode 100644 index 0000000000..7d2eea9047 --- /dev/null +++ b/web3j/pom.xml @@ -0,0 +1,210 @@ + + + 4.0.0 + com.baeldung.web3j + Web3j + war + 1.0.0 + web3j + + + 1.3 + 2.9.3 + 2.3.1 + 3.1.0 + 2.4.0 + 1.2 + 4.12 + 1.2.3 + 2.18.1 + 1.10.19 + 1.7.25 + 5.0.5.RELEASE + + + + + + org.springframework + spring-core + ${springframework.version} + + + org.springframework + spring-web + ${springframework.version} + + + org.springframework + spring-webmvc + ${springframework.version} + + + + + javax.servlet + javax.servlet-api + ${javax-servlet.version} + + + javax.servlet.jsp.jstl + jstl-api + ${jstl.version} + + + javax.servlet.jsp + javax.servlet.jsp-api + ${javax-jsp.version} + + + javax.servlet + jstl + ${jstl.version} + + + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + + + org.web3j + core + 3.3.1 + + + + + org.mockito + mockito-core + ${mockito.version} + + + org.hamcrest + hamcrest-core + + + test + + + junit + junit + ${junit.version} + test + + + org.hamcrest + hamcrest-core + + + + + org.hamcrest + hamcrest-library + ${hamcrest.version} + test + + + org.springframework + spring-context + ${springframework.version} + + + org.springframework + spring-test + ${springframework.version} + test + + + com.jayway.jsonpath + json-path + ${jsonpath.version} + + + + + + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + org.apache.tomcat.maven + tomcat8-maven-plugin + 3.0-r1655215 + + /javaweb3 + + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + src/main/webapp + false + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire.version} + + + install + install + + test + + + + + test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java + + + test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java + + + test/com/baeldung/web3j/services/EthereumContractUnitTest.java + + + + + + + + + web3j + + \ No newline at end of file diff --git a/web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java b/web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java new file mode 100644 index 0000000000..75ef948f7a --- /dev/null +++ b/web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java @@ -0,0 +1,68 @@ +package com.baeldung.web3j.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.resource.PathResourceResolver; +import org.springframework.web.servlet.view.JstlView; +import org.springframework.web.servlet.view.UrlBasedViewResolver; + +import java.util.concurrent.Executor; + +@Configuration +@EnableWebMvc +@EnableAsync +@ComponentScan("com.baeldung.web3j") +public class AppConfig implements WebMvcConfigurer { + + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName("index"); + } + + /** + * Static resource locations including themes + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/resources/**/*") + .addResourceLocations("/", "/resources/") + .setCachePeriod(3600) + .resourceChain(true) + .addResolver(new PathResourceResolver()); + } + + /** + * View resolver for JSP + */ + @Bean + public UrlBasedViewResolver viewResolver() { + UrlBasedViewResolver resolver = new UrlBasedViewResolver(); + resolver.setPrefix("/WEB-INF/jsp/"); + resolver.setSuffix(".jsp"); + resolver.setViewClass(JstlView.class); + return resolver; + } + + /** + * Configuration for async thread bean + * + * More: https://docs.spring.io/autorepo/docs/spring-framework/5.0.3.RELEASE/javadoc-api/org/springframework/scheduling/SchedulingTaskExecutor.html + */ + @Bean + public Executor asyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(2); + executor.setMaxPoolSize(2); + executor.setQueueCapacity(500); + executor.setThreadNamePrefix("CsvThread"); + executor.initialize(); + return executor; + } + +} \ No newline at end of file diff --git a/web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java b/web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java new file mode 100644 index 0000000000..8a9a8cf8c1 --- /dev/null +++ b/web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java @@ -0,0 +1,28 @@ +package com.baeldung.web3j.config; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { + + //AbstractDispatcherServletInitializer override DEFAULT_SERVLET_NAME + @Override + protected String getServletName() { + return "dispatcher"; + } + + @Override + protected Class[] getRootConfigClasses() { + return new Class[]{}; + } + + @Override + protected Class[] getServletConfigClasses() { + return new Class[]{AppConfig.class}; + } + + @Override + protected String[] getServletMappings() { + return new String[]{"/"}; + } + +} \ No newline at end of file diff --git a/web3j/src/main/java/com/baeldung/web3j/constants/Constants.java b/web3j/src/main/java/com/baeldung/web3j/constants/Constants.java new file mode 100644 index 0000000000..005e4263cd --- /dev/null +++ b/web3j/src/main/java/com/baeldung/web3j/constants/Constants.java @@ -0,0 +1,18 @@ +package com.baeldung.web3j.constants; + +public class Constants { + + public static final String API_BLOCK = "/api/block"; + public static final String API_ACCOUNTS = "/api/accounts"; + public static final String API_TRANSACTIONS = "/api/transactions"; + public static final String API_BALANCE = "/api/balance"; + + public static final String GENERIC_EXCEPTION = "Exception encountered!"; + public static final String PLEASE_SUPPLY_REAL_DATA = "Please Supply Real Data!"; + + public static final String DEFAULT_ADDRESS = "0x281055afc982d96fab65b3a49cac8b878184cb16"; + public static final String DEFAULT_CONTRACT_ADDRESS = "00000000000000000000"; + + + +} diff --git a/web3j/src/main/java/com/baeldung/web3j/contracts/Example.java b/web3j/src/main/java/com/baeldung/web3j/contracts/Example.java new file mode 100644 index 0000000000..6909ca3e0c --- /dev/null +++ b/web3j/src/main/java/com/baeldung/web3j/contracts/Example.java @@ -0,0 +1,74 @@ +package com.baeldung.web3j.contracts; + +import java.math.BigInteger; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import org.web3j.abi.TypeReference; +import org.web3j.abi.datatypes.Function; +import org.web3j.abi.datatypes.Type; +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 Example extends Contract { + private static final String BINARY = "0x60606040523415600e57600080fd5b60848061001c6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b818dacd146044575b600080fd5b3415604e57600080fd5b60546056565b005b5600a165627a7a72305820bebcbbdf06550591bc772dfcb0eadc842f95953869feb7a9528bac91487d95240029"; + + protected static final HashMap _addresses; + + static { + _addresses = new HashMap<>(); + } + + protected Example(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) { + super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit); + } + + protected Example(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) { + super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit); + } + + public static RemoteCall deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) { + return deployRemoteCall(Example.class, web3j, credentials, gasPrice, gasLimit, BINARY, ""); + } + + public static RemoteCall deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) { + return deployRemoteCall(Example.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, ""); + } + + public RemoteCall ExampleFunction() { + final Function function = new Function( + "ExampleFunction", + Arrays.asList(), + Collections.>emptyList()); + return executeRemoteCallTransaction(function); + } + + public static Example load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) { + return new Example(contractAddress, web3j, credentials, gasPrice, gasLimit); + } + + public static Example load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) { + return new Example(contractAddress, web3j, transactionManager, gasPrice, gasLimit); + } + + protected String getStaticDeployedAddress(String networkId) { + return _addresses.get(networkId); + } + + public static String getPreviouslyDeployedAddress(String networkId) { + return _addresses.get(networkId); + } +} diff --git a/web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java b/web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java new file mode 100644 index 0000000000..e05517bc79 --- /dev/null +++ b/web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java @@ -0,0 +1,103 @@ +package com.baeldung.web3j.controllers; + +import com.baeldung.web3j.constants.Constants; +import com.baeldung.web3j.helpers.TimeHelper; +import com.baeldung.web3j.services.Web3Service; +import com.baeldung.web3j.transfers.ResponseTransfer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.web3j.protocol.core.methods.response.EthAccounts; +import org.web3j.protocol.core.methods.response.EthBlockNumber; +import org.web3j.protocol.core.methods.response.EthGetBalance; +import org.web3j.protocol.core.methods.response.EthGetTransactionCount; + +import java.time.Instant; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; + +import static com.baeldung.web3j.constants.Constants.GENERIC_EXCEPTION; + +@RestController +public class EthereumRestController { + + @Autowired + Web3Service web3Service; + + @RequestMapping(value = Constants.API_BLOCK, method = RequestMethod.GET) + public Future getBlock() { + ResponseTransfer responseTransfer = new ResponseTransfer(); + Instant start = TimeHelper.start(); + + return CompletableFuture.supplyAsync(() -> { + try { + CompletableFuture result = web3Service.getBlockNumber(); + responseTransfer.setMessage(result.get().toString()); + } catch (Exception e) { + responseTransfer.setMessage(GENERIC_EXCEPTION); + } + return responseTransfer; + }).thenApplyAsync(result -> { + result.setPerformance(TimeHelper.stop(start)); + return result; + }); + } + + @RequestMapping(value = Constants.API_ACCOUNTS, method = RequestMethod.GET) + public Future getAccounts() { + ResponseTransfer responseTransfer = new ResponseTransfer(); + Instant start = TimeHelper.start(); + + return CompletableFuture.supplyAsync(() -> { + try { + CompletableFuture result = web3Service.getEthAccounts(); + responseTransfer.setMessage(result.get().toString()); + } catch (Exception e) { + responseTransfer.setMessage(GENERIC_EXCEPTION); + } + return responseTransfer; + + }).thenApplyAsync(result -> { + result.setPerformance(TimeHelper.stop(start)); + return result; + }); + } + + @RequestMapping(value = Constants.API_TRANSACTIONS, method = RequestMethod.GET) + public Future getTransactions() { + ResponseTransfer responseTransfer = new ResponseTransfer(); + Instant start = TimeHelper.start(); + return CompletableFuture.supplyAsync(() -> { + try { + CompletableFuture result = web3Service.getTransactionCount(); + responseTransfer.setMessage(result.get().toString()); + } catch (Exception e) { + responseTransfer.setMessage(GENERIC_EXCEPTION); + } + return responseTransfer; + }).thenApplyAsync(result -> { + result.setPerformance(TimeHelper.stop(start)); + return result; + }); + } + + @RequestMapping(value = Constants.API_BALANCE, method = RequestMethod.GET) + public Future getBalance() { + ResponseTransfer responseTransfer = new ResponseTransfer(); + Instant start = TimeHelper.start(); + return CompletableFuture.supplyAsync(() -> { + try { + CompletableFuture result = web3Service.getEthBalance(); + responseTransfer.setMessage(result.get().toString()); + } catch (Exception e) { + responseTransfer.setMessage(GENERIC_EXCEPTION); + } + return responseTransfer; + }).thenApplyAsync(result -> { + result.setPerformance(TimeHelper.stop(start)); + return result; + }); + } + +} \ No newline at end of file diff --git a/web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java b/web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java new file mode 100644 index 0000000000..360fe088ba --- /dev/null +++ b/web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java @@ -0,0 +1,16 @@ +package com.baeldung.web3j.helpers; + +import java.time.Duration; +import java.time.Instant; + +public class TimeHelper { + + public static Instant start() { + return Instant.now(); + } + + public static Duration stop(Instant start) { + Instant end = Instant.now(); + return Duration.between(start, end); + } +} diff --git a/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java b/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java new file mode 100644 index 0000000000..790210d557 --- /dev/null +++ b/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java @@ -0,0 +1,156 @@ +package com.baeldung.web3j.services; + +import com.baeldung.web3j.contracts.Example; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.web3j.abi.FunctionEncoder; +import org.web3j.abi.datatypes.Function; +import org.web3j.crypto.Credentials; +import org.web3j.crypto.WalletUtils; +import org.web3j.protocol.Web3j; +import org.web3j.protocol.core.DefaultBlockParameter; +import org.web3j.protocol.core.methods.request.Transaction; +import org.web3j.protocol.core.methods.response.EthAccounts; +import org.web3j.protocol.core.methods.response.EthBlockNumber; +import org.web3j.protocol.core.methods.response.EthGetBalance; +import org.web3j.protocol.core.methods.response.EthGetTransactionCount; +import org.web3j.protocol.http.HttpService; +import org.web3j.tx.Contract; +import org.web3j.tx.ManagedTransaction; + +import java.io.File; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +import static com.baeldung.web3j.constants.Constants.DEFAULT_ADDRESS; +import static com.baeldung.web3j.constants.Constants.GENERIC_EXCEPTION; +import static com.baeldung.web3j.constants.Constants.PLEASE_SUPPLY_REAL_DATA; + +@Service +public class Web3Service { + + private Web3j web3j = Web3j.build(new HttpService()); + + //Create and Init the default Web3J connection + public void customInit(String provider) { + this.web3j = Web3j.build(new HttpService(provider)); + } + + //Convert to and from supplied contract ABI bytecode + public static String toBinary(String bytecode) { + return bytecode.replaceFirst("^0x", ""); + } + + public static String toByteCode(String binary) { + return "0x" + binary; + } + + @Async + public CompletableFuture getBlockNumber() { + EthBlockNumber result = new EthBlockNumber(); + try { + this.web3j.ethBlockNumber().sendAsync().thenApply(r -> r.getBlockNumber()); + } catch (Exception ex) { + System.out.println(GENERIC_EXCEPTION); + } + return CompletableFuture.completedFuture(result); + } + + @Async + public CompletableFuture getEthAccounts() { + EthAccounts result = new EthAccounts(); + try { + this.web3j.ethAccounts().sendAsync().thenApply(r -> r.getAccounts()); + } catch (Exception ex) { + System.out.println(GENERIC_EXCEPTION); + } + return CompletableFuture.completedFuture(result); + } + + @Async + public CompletableFuture getTransactionCount() { + EthGetTransactionCount result = new EthGetTransactionCount(); + try { + this.web3j.ethGetTransactionCount(DEFAULT_ADDRESS, DefaultBlockParameter.valueOf("latest")).sendAsync().thenApply(r -> r.getTransactionCount()); + } catch (Exception ex) { + System.out.println(GENERIC_EXCEPTION); + } + return CompletableFuture.completedFuture(result); + } + + @Async + public CompletableFuture getEthBalance() { + EthGetBalance result = new EthGetBalance(); + try { + this.web3j.ethGetBalance(DEFAULT_ADDRESS, DefaultBlockParameter.valueOf("latest")).sendAsync().thenApply(r -> r.getBalance()); + } catch (Exception ex) { + System.out.println(GENERIC_EXCEPTION); + } + return CompletableFuture.completedFuture(result); + } + + @Async + public CompletableFuture fromScratchContractExample() { + + String contractAddress = ""; + + try { + //Create a wallet + WalletUtils.generateNewWalletFile("PASSWORD", new File("/path/to/destination"), true); + //Load the credentials from it + Credentials credentials = WalletUtils.loadCredentials("PASSWORD", "/path/to/walletfile"); + + //Deploy contract to address specified by wallet + Example contract = Example.deploy(this.web3j, + credentials, + ManagedTransaction.GAS_PRICE, + Contract.GAS_LIMIT).send(); + + //Het the address + contractAddress = contract.getContractAddress(); + + } catch (Exception ex) { + System.out.println(PLEASE_SUPPLY_REAL_DATA); + return CompletableFuture.completedFuture(PLEASE_SUPPLY_REAL_DATA); + } + return CompletableFuture.completedFuture(contractAddress); + } + + @Async + public CompletableFuture sendTx() { + String transactionHash = ""; + + try { + List inputParams = new ArrayList(); + List outputParams = new ArrayList(); + Function function = new Function("fuctionName", inputParams, outputParams); + + String encodedFunction = FunctionEncoder.encode(function); + + BigInteger nonce = BigInteger.valueOf(100); + BigInteger gasprice = BigInteger.valueOf(100); + BigInteger gaslimit = BigInteger.valueOf(100); + + Transaction transaction = Transaction.createFunctionCallTransaction("FROM_ADDRESS", nonce, gasprice, gaslimit, "TO_ADDRESS", encodedFunction); + + org.web3j.protocol.core.methods.response.EthSendTransaction transactionResponse = web3j.ethSendTransaction(transaction).sendAsync().get(); + transactionHash = transactionResponse.getTransactionHash(); + + } catch (Exception ex) { + System.out.println(PLEASE_SUPPLY_REAL_DATA); + return CompletableFuture.completedFuture(PLEASE_SUPPLY_REAL_DATA); + } + + return CompletableFuture.completedFuture(transactionHash); + } +} + + + + + + + + diff --git a/web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java b/web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java new file mode 100644 index 0000000000..9c5d1799ff --- /dev/null +++ b/web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java @@ -0,0 +1,28 @@ +package com.baeldung.web3j.transfers; + +import java.time.Duration; + +public class ResponseTransfer { + + public ResponseTransfer() {} + + private Duration performance; + private String message; + + public Duration getPerformance() { + return performance; + } + + public void setPerformance(Duration performance) { + this.performance = performance; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/web3j/src/main/webapp/WEB-INF/.gitkeep b/web3j/src/main/webapp/WEB-INF/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/web3j/src/main/webapp/resources/.gitkeep b/web3j/src/main/webapp/resources/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java b/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java new file mode 100644 index 0000000000..ee78ab17c2 --- /dev/null +++ b/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java @@ -0,0 +1,78 @@ +package com.baeldung.web3j.controllers; + + +import com.baeldung.web3j.config.AppConfig; +import com.baeldung.web3j.constants.Constants; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {AppConfig.class}) +@WebAppConfiguration +public class EthereumRestControllerIntegrationTest { + + private MockMvc mockMvc; + + private void constructAsyncTest(String endpoint) { + try { + MvcResult asyncResult = mockMvc + .perform(get(endpoint)) + .andReturn(); + + mockMvc.perform(asyncDispatch(asyncResult)) + .andDo(print()) + .andExpect(status().isOk()); + + } catch (Exception e) { + System.out.println("Exception: " + e); + } + } + + @Autowired + private WebApplicationContext wac; + + @Before + public void preTest() throws Exception { + mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); + } + + @Test + public void accounts() { + constructAsyncTest(Constants.API_ACCOUNTS); + } + + @Test + public void transactions() { + constructAsyncTest(Constants.API_TRANSACTIONS); + } + + @Test + public void block() { + constructAsyncTest(Constants.API_BLOCK); + } + + @Test + public void balance() { + constructAsyncTest(Constants.API_BALANCE); + } + + @After + public void postTest() { + mockMvc = null; + } +} \ No newline at end of file diff --git a/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java b/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java new file mode 100644 index 0000000000..4ceed870f8 --- /dev/null +++ b/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java @@ -0,0 +1,76 @@ +package com.baeldung.web3j.controllers; + +import com.baeldung.web3j.constants.Constants; +import com.baeldung.web3j.services.Web3Service; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +public class EthereumRestControllerUnitTest { + + private MockMvc mockMvc; + + private void constructAsyncTest(String endpoint) { + try { + MvcResult asyncResult = mockMvc + .perform(get(endpoint)) + .andReturn(); + + mockMvc.perform(asyncDispatch(asyncResult)) + .andDo(print()) + .andExpect(status().isOk()); + + } catch (Exception e) { + System.out.println("Exception: " + e); + } + } + + @Mock + private Web3Service web3Service; + + @InjectMocks + private EthereumRestController ethereumRestController; + + @Before + public void preTest() { + MockitoAnnotations.initMocks(this); + mockMvc = MockMvcBuilders.standaloneSetup(ethereumRestController).build(); + } + + @Test + public void accounts() { + constructAsyncTest(Constants.API_ACCOUNTS); + } + + @Test + public void transactions() { + constructAsyncTest(Constants.API_TRANSACTIONS); + } + + @Test + public void block() { + constructAsyncTest(Constants.API_BLOCK); + } + + @Test + public void balance() { + constructAsyncTest(Constants.API_BALANCE); + } + + @After + public void postTest() { + mockMvc = null; + } + +} diff --git a/web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java b/web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java new file mode 100644 index 0000000000..5c74e1c7ce --- /dev/null +++ b/web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java @@ -0,0 +1,37 @@ +package com.baeldung.web3j.services; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.concurrent.CompletableFuture; + +import static com.baeldung.web3j.constants.Constants.PLEASE_SUPPLY_REAL_DATA; + +public class EthereumContractUnitTest { + + private Web3Service web3Service; + + @Before + public void setup() { + web3Service = new Web3Service(); + } + + @Test + public void testContract() { + CompletableFuture result = web3Service.fromScratchContractExample(); + assert (result instanceof CompletableFuture); + } + + @Test + public void sendTx() { + CompletableFuture result = web3Service.sendTx(); + assert (result instanceof CompletableFuture); + } + + @After + public void cleanup() { + } +} From 594b6dda121751e164e79d72ce3972f4ad36afad Mon Sep 17 00:00:00 2001 From: Thoughtscript Date: Fri, 27 Apr 2018 05:54:35 +0100 Subject: [PATCH 02/82] BAEL-1461 refactored --- {ethereumj => ethereum}/README.md | 4 +- {ethereumj => ethereum/ethereumj}/.gitgnore | 0 {web3j => ethereum/ethereumj}/README.md | 4 +- {ethereumj => ethereum/ethereumj}/pom.xml | 70 +++++++------------ .../baeldung/ethereumj/ApplicationMain.java | 0 .../com/baeldung/ethereumj/Constants.java | 0 .../com/baeldung/ethereumj/beans/EthBean.java | 0 .../baeldung/ethereumj/config/EthConfig.java | 0 .../ethereumj/controllers/EthController.java | 0 .../ethereumj/listeners/EthListener.java | 0 .../ethereumj/transfer/EthResponse.java | 0 .../java/com/baeldung/web3j/Template.java | 0 .../baeldung/web3j/contracts/Greeting.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/solidity/Greeting.sol | 0 .../resources/solidity/build/Greeting.abi | 0 .../resources/solidity/build/Greeting.bin | 0 .../controllers/EthControllerLiveTest.java | 0 ethereum/pom.xml | 9 +++ {web3j => ethereum/web3j}/.gitignore | 0 .../web3j}/dev_ganache/README.md | 0 .../web3j}/dev_truffle/README.md | 0 .../build/contracts/ConvertLib.json | 0 .../dev_truffle/build/contracts/Example.json | 0 .../build/contracts/Migrations.json | 0 .../dev_truffle/contracts/ConvertLib.sol | 0 .../web3j}/dev_truffle/contracts/Example.sol | 0 .../dev_truffle/contracts/Migrations.sol | 0 .../migrations/1_initial_migration.js | 0 .../migrations/2_deploy_contracts.js | 0 .../web3j}/dev_truffle/truffle.js | 0 {web3j => ethereum/web3j}/pom.xml | 2 +- .../com/baeldung/web3j/config/AppConfig.java | 0 .../web3j/config/WebAppInitializer.java | 0 .../baeldung/web3j/constants/Constants.java | 0 .../com/baeldung/web3j/contracts/Example.java | 0 .../controllers/EthereumRestController.java | 0 .../baeldung/web3j/helpers/TimeHelper.java | 0 .../baeldung/web3j/services/Web3Service.java | 13 ++-- .../web3j/transfers/ResponseTransfer.java | 0 .../web3j}/src/main/webapp/WEB-INF/.gitkeep | 0 .../web3j}/src/main/webapp/resources/.gitkeep | 0 ...EthereumRestControllerIntegrationTest.java | 0 .../EthereumRestControllerUnitTest.java | 0 .../services/EthereumContractUnitTest.java | 0 pom.xml | 3 +- xml/pom.xml | 2 - 47 files changed, 45 insertions(+), 62 deletions(-) rename {ethereumj => ethereum}/README.md (53%) rename {ethereumj => ethereum/ethereumj}/.gitgnore (100%) rename {web3j => ethereum/ethereumj}/README.md (53%) rename {ethereumj => ethereum/ethereumj}/pom.xml (59%) rename {ethereumj => ethereum/ethereumj}/src/main/java/com/baeldung/ethereumj/ApplicationMain.java (100%) rename {ethereumj => ethereum/ethereumj}/src/main/java/com/baeldung/ethereumj/Constants.java (100%) rename {ethereumj => ethereum/ethereumj}/src/main/java/com/baeldung/ethereumj/beans/EthBean.java (100%) rename {ethereumj => ethereum/ethereumj}/src/main/java/com/baeldung/ethereumj/config/EthConfig.java (100%) rename {ethereumj => ethereum/ethereumj}/src/main/java/com/baeldung/ethereumj/controllers/EthController.java (100%) rename {ethereumj => ethereum/ethereumj}/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java (100%) rename {ethereumj => ethereum/ethereumj}/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java (100%) rename {ethereumj => ethereum/ethereumj}/src/main/java/com/baeldung/web3j/Template.java (100%) rename {ethereumj => ethereum/ethereumj}/src/main/java/com/baeldung/web3j/contracts/Greeting.java (100%) rename {ethereumj => ethereum/ethereumj}/src/main/resources/application.properties (100%) rename {ethereumj => ethereum/ethereumj}/src/main/resources/solidity/Greeting.sol (100%) rename {ethereumj => ethereum/ethereumj}/src/main/resources/solidity/build/Greeting.abi (100%) rename {ethereumj => ethereum/ethereumj}/src/main/resources/solidity/build/Greeting.bin (100%) rename {ethereumj => ethereum/ethereumj}/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java (100%) create mode 100644 ethereum/pom.xml rename {web3j => ethereum/web3j}/.gitignore (100%) rename {web3j => ethereum/web3j}/dev_ganache/README.md (100%) rename {web3j => ethereum/web3j}/dev_truffle/README.md (100%) rename {web3j => ethereum/web3j}/dev_truffle/build/contracts/ConvertLib.json (100%) rename {web3j => ethereum/web3j}/dev_truffle/build/contracts/Example.json (100%) rename {web3j => ethereum/web3j}/dev_truffle/build/contracts/Migrations.json (100%) rename {web3j => ethereum/web3j}/dev_truffle/contracts/ConvertLib.sol (100%) rename {web3j => ethereum/web3j}/dev_truffle/contracts/Example.sol (100%) rename {web3j => ethereum/web3j}/dev_truffle/contracts/Migrations.sol (100%) rename {web3j => ethereum/web3j}/dev_truffle/migrations/1_initial_migration.js (100%) rename {web3j => ethereum/web3j}/dev_truffle/migrations/2_deploy_contracts.js (100%) rename {web3j => ethereum/web3j}/dev_truffle/truffle.js (100%) rename {web3j => ethereum/web3j}/pom.xml (99%) rename {web3j => ethereum/web3j}/src/main/java/com/baeldung/web3j/config/AppConfig.java (100%) rename {web3j => ethereum/web3j}/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java (100%) rename {web3j => ethereum/web3j}/src/main/java/com/baeldung/web3j/constants/Constants.java (100%) rename {web3j => ethereum/web3j}/src/main/java/com/baeldung/web3j/contracts/Example.java (100%) rename {web3j => ethereum/web3j}/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java (100%) rename {web3j => ethereum/web3j}/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java (100%) rename {web3j => ethereum/web3j}/src/main/java/com/baeldung/web3j/services/Web3Service.java (90%) rename {web3j => ethereum/web3j}/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java (100%) rename {web3j => ethereum/web3j}/src/main/webapp/WEB-INF/.gitkeep (100%) rename {web3j => ethereum/web3j}/src/main/webapp/resources/.gitkeep (100%) rename {web3j => ethereum/web3j}/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java (100%) rename {web3j => ethereum/web3j}/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java (100%) rename {web3j => ethereum/web3j}/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java (100%) diff --git a/ethereumj/README.md b/ethereum/README.md similarity index 53% rename from ethereumj/README.md rename to ethereum/README.md index d2e2753438..eb695e4bc3 100644 --- a/ethereumj/README.md +++ b/ethereum/README.md @@ -1,4 +1,6 @@ -## EthereumJ +## Ethereum ### Relevant Articles: - [Introduction to EthereumJ](http://www.baeldung.com/ethereumj) +- [Lightweight Web3](http://www.baeldung.com/lightweight-web3/) + diff --git a/ethereumj/.gitgnore b/ethereum/ethereumj/.gitgnore similarity index 100% rename from ethereumj/.gitgnore rename to ethereum/ethereumj/.gitgnore diff --git a/web3j/README.md b/ethereum/ethereumj/README.md similarity index 53% rename from web3j/README.md rename to ethereum/ethereumj/README.md index bc9909af25..eb695e4bc3 100644 --- a/web3j/README.md +++ b/ethereum/ethereumj/README.md @@ -1,4 +1,6 @@ -## Web3j +## Ethereum ### Relevant Articles: +- [Introduction to EthereumJ](http://www.baeldung.com/ethereumj) - [Lightweight Web3](http://www.baeldung.com/lightweight-web3/) + diff --git a/ethereumj/pom.xml b/ethereum/ethereumj/pom.xml similarity index 59% rename from ethereumj/pom.xml rename to ethereum/ethereumj/pom.xml index 8b6d3677c9..903e23bfda 100644 --- a/ethereumj/pom.xml +++ b/ethereum/ethereumj/pom.xml @@ -1,5 +1,7 @@ - + 4.0.0 com.baeldung.ethereumj ethereumj @@ -11,9 +13,18 @@ parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-5 + ../../parent-boot-5 + + UTF-8 + 1.8 + 8.5.4 + 1.5.0-RELEASE + 3.3.1 + 2.5.0 + + Ethereum @@ -23,7 +34,6 @@ - org.springframework.boot @@ -33,28 +43,24 @@ org.springframework.boot spring-boot-starter-tomcat - org.springframework.boot spring-boot-starter-test test - org.ethereum ethereumj-core - 1.5.0-RELEASE + ${ethereumj-core.version} - org.web3j core - 3.3.1 + ${web3j.core.version} - javax.servlet @@ -63,12 +69,20 @@ com.fasterxml.jackson.core jackson-databind - 2.5.0 + ${jackson-databind.version} + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + org.springframework.boot spring-boot-maven-plugin @@ -77,40 +91,4 @@ ethereumj - - - integration - - - - org.apache.maven.plugins - maven-surefire-plugin - - - integration-test - - test - - - - none - - - */EthControllerTestOne.java - - - - - - - - - - - - UTF-8 - 1.8 - 8.5.4 - - \ No newline at end of file diff --git a/ethereumj/src/main/java/com/baeldung/ethereumj/ApplicationMain.java b/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/ApplicationMain.java similarity index 100% rename from ethereumj/src/main/java/com/baeldung/ethereumj/ApplicationMain.java rename to ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/ApplicationMain.java diff --git a/ethereumj/src/main/java/com/baeldung/ethereumj/Constants.java b/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/Constants.java similarity index 100% rename from ethereumj/src/main/java/com/baeldung/ethereumj/Constants.java rename to ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/Constants.java diff --git a/ethereumj/src/main/java/com/baeldung/ethereumj/beans/EthBean.java b/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/beans/EthBean.java similarity index 100% rename from ethereumj/src/main/java/com/baeldung/ethereumj/beans/EthBean.java rename to ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/beans/EthBean.java diff --git a/ethereumj/src/main/java/com/baeldung/ethereumj/config/EthConfig.java b/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/config/EthConfig.java similarity index 100% rename from ethereumj/src/main/java/com/baeldung/ethereumj/config/EthConfig.java rename to ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/config/EthConfig.java diff --git a/ethereumj/src/main/java/com/baeldung/ethereumj/controllers/EthController.java b/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/controllers/EthController.java similarity index 100% rename from ethereumj/src/main/java/com/baeldung/ethereumj/controllers/EthController.java rename to ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/controllers/EthController.java diff --git a/ethereumj/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java b/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java similarity index 100% rename from ethereumj/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java rename to ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java diff --git a/ethereumj/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java b/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java similarity index 100% rename from ethereumj/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java rename to ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java diff --git a/ethereumj/src/main/java/com/baeldung/web3j/Template.java b/ethereum/ethereumj/src/main/java/com/baeldung/web3j/Template.java similarity index 100% rename from ethereumj/src/main/java/com/baeldung/web3j/Template.java rename to ethereum/ethereumj/src/main/java/com/baeldung/web3j/Template.java diff --git a/ethereumj/src/main/java/com/baeldung/web3j/contracts/Greeting.java b/ethereum/ethereumj/src/main/java/com/baeldung/web3j/contracts/Greeting.java similarity index 100% rename from ethereumj/src/main/java/com/baeldung/web3j/contracts/Greeting.java rename to ethereum/ethereumj/src/main/java/com/baeldung/web3j/contracts/Greeting.java diff --git a/ethereumj/src/main/resources/application.properties b/ethereum/ethereumj/src/main/resources/application.properties similarity index 100% rename from ethereumj/src/main/resources/application.properties rename to ethereum/ethereumj/src/main/resources/application.properties diff --git a/ethereumj/src/main/resources/solidity/Greeting.sol b/ethereum/ethereumj/src/main/resources/solidity/Greeting.sol similarity index 100% rename from ethereumj/src/main/resources/solidity/Greeting.sol rename to ethereum/ethereumj/src/main/resources/solidity/Greeting.sol diff --git a/ethereumj/src/main/resources/solidity/build/Greeting.abi b/ethereum/ethereumj/src/main/resources/solidity/build/Greeting.abi similarity index 100% rename from ethereumj/src/main/resources/solidity/build/Greeting.abi rename to ethereum/ethereumj/src/main/resources/solidity/build/Greeting.abi diff --git a/ethereumj/src/main/resources/solidity/build/Greeting.bin b/ethereum/ethereumj/src/main/resources/solidity/build/Greeting.bin similarity index 100% rename from ethereumj/src/main/resources/solidity/build/Greeting.bin rename to ethereum/ethereumj/src/main/resources/solidity/build/Greeting.bin diff --git a/ethereumj/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java b/ethereum/ethereumj/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java similarity index 100% rename from ethereumj/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java rename to ethereum/ethereumj/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java diff --git a/ethereum/pom.xml b/ethereum/pom.xml new file mode 100644 index 0000000000..7737348771 --- /dev/null +++ b/ethereum/pom.xml @@ -0,0 +1,9 @@ + + 4.0.0 + com.baeldung.ethereum + ethereum + 0.0.1-SNAPSHOT + ethereum + + diff --git a/web3j/.gitignore b/ethereum/web3j/.gitignore similarity index 100% rename from web3j/.gitignore rename to ethereum/web3j/.gitignore diff --git a/web3j/dev_ganache/README.md b/ethereum/web3j/dev_ganache/README.md similarity index 100% rename from web3j/dev_ganache/README.md rename to ethereum/web3j/dev_ganache/README.md diff --git a/web3j/dev_truffle/README.md b/ethereum/web3j/dev_truffle/README.md similarity index 100% rename from web3j/dev_truffle/README.md rename to ethereum/web3j/dev_truffle/README.md diff --git a/web3j/dev_truffle/build/contracts/ConvertLib.json b/ethereum/web3j/dev_truffle/build/contracts/ConvertLib.json similarity index 100% rename from web3j/dev_truffle/build/contracts/ConvertLib.json rename to ethereum/web3j/dev_truffle/build/contracts/ConvertLib.json diff --git a/web3j/dev_truffle/build/contracts/Example.json b/ethereum/web3j/dev_truffle/build/contracts/Example.json similarity index 100% rename from web3j/dev_truffle/build/contracts/Example.json rename to ethereum/web3j/dev_truffle/build/contracts/Example.json diff --git a/web3j/dev_truffle/build/contracts/Migrations.json b/ethereum/web3j/dev_truffle/build/contracts/Migrations.json similarity index 100% rename from web3j/dev_truffle/build/contracts/Migrations.json rename to ethereum/web3j/dev_truffle/build/contracts/Migrations.json diff --git a/web3j/dev_truffle/contracts/ConvertLib.sol b/ethereum/web3j/dev_truffle/contracts/ConvertLib.sol similarity index 100% rename from web3j/dev_truffle/contracts/ConvertLib.sol rename to ethereum/web3j/dev_truffle/contracts/ConvertLib.sol diff --git a/web3j/dev_truffle/contracts/Example.sol b/ethereum/web3j/dev_truffle/contracts/Example.sol similarity index 100% rename from web3j/dev_truffle/contracts/Example.sol rename to ethereum/web3j/dev_truffle/contracts/Example.sol diff --git a/web3j/dev_truffle/contracts/Migrations.sol b/ethereum/web3j/dev_truffle/contracts/Migrations.sol similarity index 100% rename from web3j/dev_truffle/contracts/Migrations.sol rename to ethereum/web3j/dev_truffle/contracts/Migrations.sol diff --git a/web3j/dev_truffle/migrations/1_initial_migration.js b/ethereum/web3j/dev_truffle/migrations/1_initial_migration.js similarity index 100% rename from web3j/dev_truffle/migrations/1_initial_migration.js rename to ethereum/web3j/dev_truffle/migrations/1_initial_migration.js diff --git a/web3j/dev_truffle/migrations/2_deploy_contracts.js b/ethereum/web3j/dev_truffle/migrations/2_deploy_contracts.js similarity index 100% rename from web3j/dev_truffle/migrations/2_deploy_contracts.js rename to ethereum/web3j/dev_truffle/migrations/2_deploy_contracts.js diff --git a/web3j/dev_truffle/truffle.js b/ethereum/web3j/dev_truffle/truffle.js similarity index 100% rename from web3j/dev_truffle/truffle.js rename to ethereum/web3j/dev_truffle/truffle.js diff --git a/web3j/pom.xml b/ethereum/web3j/pom.xml similarity index 99% rename from web3j/pom.xml rename to ethereum/web3j/pom.xml index 7d2eea9047..b65f120218 100644 --- a/web3j/pom.xml +++ b/ethereum/web3j/pom.xml @@ -8,7 +8,7 @@ 1.0.0 web3j - + 1.3 2.9.3 2.3.1 diff --git a/web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java b/ethereum/web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java similarity index 100% rename from web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java rename to ethereum/web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java diff --git a/web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java b/ethereum/web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java similarity index 100% rename from web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java rename to ethereum/web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java diff --git a/web3j/src/main/java/com/baeldung/web3j/constants/Constants.java b/ethereum/web3j/src/main/java/com/baeldung/web3j/constants/Constants.java similarity index 100% rename from web3j/src/main/java/com/baeldung/web3j/constants/Constants.java rename to ethereum/web3j/src/main/java/com/baeldung/web3j/constants/Constants.java diff --git a/web3j/src/main/java/com/baeldung/web3j/contracts/Example.java b/ethereum/web3j/src/main/java/com/baeldung/web3j/contracts/Example.java similarity index 100% rename from web3j/src/main/java/com/baeldung/web3j/contracts/Example.java rename to ethereum/web3j/src/main/java/com/baeldung/web3j/contracts/Example.java diff --git a/web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java b/ethereum/web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java similarity index 100% rename from web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java rename to ethereum/web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java diff --git a/web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java b/ethereum/web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java similarity index 100% rename from web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java rename to ethereum/web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java diff --git a/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java b/ethereum/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java similarity index 90% rename from web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java rename to ethereum/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java index 790210d557..c943ee4006 100644 --- a/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java +++ b/ethereum/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java @@ -47,51 +47,46 @@ public class Web3Service { return "0x" + binary; } - @Async public CompletableFuture getBlockNumber() { EthBlockNumber result = new EthBlockNumber(); try { - this.web3j.ethBlockNumber().sendAsync().thenApply(r -> r.getBlockNumber()); + result = this.web3j.ethBlockNumber().sendAsync().get(); } catch (Exception ex) { System.out.println(GENERIC_EXCEPTION); } return CompletableFuture.completedFuture(result); } - @Async public CompletableFuture getEthAccounts() { EthAccounts result = new EthAccounts(); try { - this.web3j.ethAccounts().sendAsync().thenApply(r -> r.getAccounts()); + result = this.web3j.ethAccounts().sendAsync().get(); } catch (Exception ex) { System.out.println(GENERIC_EXCEPTION); } return CompletableFuture.completedFuture(result); } - @Async public CompletableFuture getTransactionCount() { EthGetTransactionCount result = new EthGetTransactionCount(); try { - this.web3j.ethGetTransactionCount(DEFAULT_ADDRESS, DefaultBlockParameter.valueOf("latest")).sendAsync().thenApply(r -> r.getTransactionCount()); + result = this.web3j.ethGetTransactionCount(DEFAULT_ADDRESS, DefaultBlockParameter.valueOf("latest")).sendAsync().get(); } catch (Exception ex) { System.out.println(GENERIC_EXCEPTION); } return CompletableFuture.completedFuture(result); } - @Async public CompletableFuture getEthBalance() { EthGetBalance result = new EthGetBalance(); try { - this.web3j.ethGetBalance(DEFAULT_ADDRESS, DefaultBlockParameter.valueOf("latest")).sendAsync().thenApply(r -> r.getBalance()); + result = this.web3j.ethGetBalance(DEFAULT_ADDRESS, DefaultBlockParameter.valueOf("latest")).sendAsync().get(); } catch (Exception ex) { System.out.println(GENERIC_EXCEPTION); } return CompletableFuture.completedFuture(result); } - @Async public CompletableFuture fromScratchContractExample() { String contractAddress = ""; diff --git a/web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java b/ethereum/web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java similarity index 100% rename from web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java rename to ethereum/web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java diff --git a/web3j/src/main/webapp/WEB-INF/.gitkeep b/ethereum/web3j/src/main/webapp/WEB-INF/.gitkeep similarity index 100% rename from web3j/src/main/webapp/WEB-INF/.gitkeep rename to ethereum/web3j/src/main/webapp/WEB-INF/.gitkeep diff --git a/web3j/src/main/webapp/resources/.gitkeep b/ethereum/web3j/src/main/webapp/resources/.gitkeep similarity index 100% rename from web3j/src/main/webapp/resources/.gitkeep rename to ethereum/web3j/src/main/webapp/resources/.gitkeep diff --git a/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java b/ethereum/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java similarity index 100% rename from web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java rename to ethereum/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java diff --git a/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java b/ethereum/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java similarity index 100% rename from web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java rename to ethereum/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java diff --git a/web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java b/ethereum/web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java similarity index 100% rename from web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java rename to ethereum/web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java diff --git a/pom.xml b/pom.xml index 750c95679c..72c24aee76 100644 --- a/pom.xml +++ b/pom.xml @@ -73,8 +73,7 @@ deltaspike dozer - ethereumj - web3j + ethereum diff --git a/xml/pom.xml b/xml/pom.xml index c001c264d2..166cb6dd4e 100644 --- a/xml/pom.xml +++ b/xml/pom.xml @@ -285,8 +285,6 @@ 2.4 1.8 - - 1.3.1 From 2636f0cc7ca2bffaefa641384f8c564bfb11535d Mon Sep 17 00:00:00 2001 From: Thoughtscript Date: Wed, 2 May 2018 20:42:11 +0100 Subject: [PATCH 03/82] BAEL-1461: Combined modules and refactored --- ethereum/{ethereumj => }/.gitgnore | 0 ethereum/ethereumj/README.md | 6 - ethereum/ethereumj/pom.xml | 94 ------- ethereum/pom.xml | 233 ++++++++++++++++++ .../baeldung/ethereumj/ApplicationMain.java | 0 .../com/baeldung/ethereumj/Constants.java | 0 .../com/baeldung/ethereumj/beans/EthBean.java | 0 .../baeldung/ethereumj/config/EthConfig.java | 0 .../ethereumj/controllers/EthController.java | 0 .../ethereumj/listeners/EthListener.java | 0 .../ethereumj/transfer/EthResponse.java | 0 .../java/com/baeldung/web3j/Template.java | 0 .../com/baeldung/web3j/config/AppConfig.java | 0 .../web3j/config/WebAppInitializer.java | 0 .../baeldung/web3j/constants/Constants.java | 0 .../com/baeldung/web3j/contracts/Example.java | 0 .../baeldung/web3j/contracts/Greeting.java | 0 .../controllers/EthereumRestController.java | 0 .../baeldung/web3j/helpers/TimeHelper.java | 0 .../baeldung/web3j/services/Web3Service.java | 0 .../web3j/transfers/ResponseTransfer.java | 0 .../src/main/resources/application.properties | 0 .../main/resources}/dev_ganache/README.md | 0 .../main/resources}/dev_truffle/README.md | 0 .../build/contracts/ConvertLib.json | 0 .../dev_truffle/build/contracts/Example.json | 0 .../build/contracts/Migrations.json | 0 .../dev_truffle/contracts/ConvertLib.sol | 0 .../dev_truffle/contracts/Example.sol | 0 .../dev_truffle/contracts/Migrations.sol | 0 .../migrations/1_initial_migration.js | 0 .../migrations/2_deploy_contracts.js | 0 .../main/resources}/dev_truffle/truffle.js | 0 .../src/main/resources/solidity/Greeting.sol | 0 .../resources/solidity/build/Greeting.abi | 0 .../resources/solidity/build/Greeting.bin | 0 .../src/main/webapp/WEB-INF/.gitkeep | 0 .../src/main/webapp/resources/.gitkeep | 0 .../controllers/EthControllerLiveTest.java | 2 +- ...EthereumRestControllerIntegrationTest.java | 0 .../EthereumRestControllerUnitTest.java | 0 .../services/EthereumContractUnitTest.java | 4 - ethereum/web3j/.gitignore | 3 - ethereum/web3j/pom.xml | 210 ---------------- 44 files changed, 234 insertions(+), 318 deletions(-) rename ethereum/{ethereumj => }/.gitgnore (100%) delete mode 100644 ethereum/ethereumj/README.md delete mode 100644 ethereum/ethereumj/pom.xml rename ethereum/{ethereumj => }/src/main/java/com/baeldung/ethereumj/ApplicationMain.java (100%) rename ethereum/{ethereumj => }/src/main/java/com/baeldung/ethereumj/Constants.java (100%) rename ethereum/{ethereumj => }/src/main/java/com/baeldung/ethereumj/beans/EthBean.java (100%) rename ethereum/{ethereumj => }/src/main/java/com/baeldung/ethereumj/config/EthConfig.java (100%) rename ethereum/{ethereumj => }/src/main/java/com/baeldung/ethereumj/controllers/EthController.java (100%) rename ethereum/{ethereumj => }/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java (100%) rename ethereum/{ethereumj => }/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java (100%) rename ethereum/{ethereumj => }/src/main/java/com/baeldung/web3j/Template.java (100%) rename ethereum/{web3j => }/src/main/java/com/baeldung/web3j/config/AppConfig.java (100%) rename ethereum/{web3j => }/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java (100%) rename ethereum/{web3j => }/src/main/java/com/baeldung/web3j/constants/Constants.java (100%) rename ethereum/{web3j => }/src/main/java/com/baeldung/web3j/contracts/Example.java (100%) rename ethereum/{ethereumj => }/src/main/java/com/baeldung/web3j/contracts/Greeting.java (100%) rename ethereum/{web3j => }/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java (100%) rename ethereum/{web3j => }/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java (100%) rename ethereum/{web3j => }/src/main/java/com/baeldung/web3j/services/Web3Service.java (100%) rename ethereum/{web3j => }/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java (100%) rename ethereum/{ethereumj => }/src/main/resources/application.properties (100%) rename ethereum/{web3j => src/main/resources}/dev_ganache/README.md (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/README.md (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/build/contracts/ConvertLib.json (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/build/contracts/Example.json (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/build/contracts/Migrations.json (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/contracts/ConvertLib.sol (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/contracts/Example.sol (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/contracts/Migrations.sol (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/migrations/1_initial_migration.js (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/migrations/2_deploy_contracts.js (100%) rename ethereum/{web3j => src/main/resources}/dev_truffle/truffle.js (100%) rename ethereum/{ethereumj => }/src/main/resources/solidity/Greeting.sol (100%) rename ethereum/{ethereumj => }/src/main/resources/solidity/build/Greeting.abi (100%) rename ethereum/{ethereumj => }/src/main/resources/solidity/build/Greeting.bin (100%) rename ethereum/{web3j => }/src/main/webapp/WEB-INF/.gitkeep (100%) rename ethereum/{web3j => }/src/main/webapp/resources/.gitkeep (100%) rename ethereum/{ethereumj => }/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java (99%) rename ethereum/{web3j/src/test => src/test/java}/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java (100%) rename ethereum/{web3j/src/test => src/test/java}/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java (100%) rename ethereum/{web3j/src/test => src/test/java}/com/baeldung/web3j/services/EthereumContractUnitTest.java (81%) delete mode 100644 ethereum/web3j/.gitignore delete mode 100644 ethereum/web3j/pom.xml diff --git a/ethereum/ethereumj/.gitgnore b/ethereum/.gitgnore similarity index 100% rename from ethereum/ethereumj/.gitgnore rename to ethereum/.gitgnore diff --git a/ethereum/ethereumj/README.md b/ethereum/ethereumj/README.md deleted file mode 100644 index eb695e4bc3..0000000000 --- a/ethereum/ethereumj/README.md +++ /dev/null @@ -1,6 +0,0 @@ -## Ethereum - -### Relevant Articles: -- [Introduction to EthereumJ](http://www.baeldung.com/ethereumj) -- [Lightweight Web3](http://www.baeldung.com/lightweight-web3/) - diff --git a/ethereum/ethereumj/pom.xml b/ethereum/ethereumj/pom.xml deleted file mode 100644 index 903e23bfda..0000000000 --- a/ethereum/ethereumj/pom.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - 4.0.0 - com.baeldung.ethereumj - ethereumj - war - 1.0.0 - ethereumj - - - parent-boot-5 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-5 - - - - UTF-8 - 1.8 - 8.5.4 - 1.5.0-RELEASE - 3.3.1 - 2.5.0 - - - - - Ethereum - Ethereum - https://dl.bintray.com/ethereum/maven/ - - - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.ethereum - ethereumj-core - ${ethereumj-core.version} - - - - org.web3j - core - ${web3j.core.version} - - - - javax.servlet - jstl - - - com.fasterxml.jackson.core - jackson-databind - ${jackson-databind.version} - - - - - - - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - - - - org.springframework.boot - spring-boot-maven-plugin - - - ethereumj - - - \ No newline at end of file diff --git a/ethereum/pom.xml b/ethereum/pom.xml index 7737348771..02b9e5afe1 100644 --- a/ethereum/pom.xml +++ b/ethereum/pom.xml @@ -6,4 +6,237 @@ 0.0.1-SNAPSHOT ethereum + + + + + UTF-8 + 1.8 + 8.5.4 + 1.5.0-RELEASE + 3.3.1 + 5.0.5.RELEASE + 1.5.6.RELEASE + 2.18.1 + 1.10.19 + 2.5.0 + 1.3 + 2.9.3 + 2.3.1 + 3.1.0 + 2.4.0 + 1.2 + 4.12 + 1.2.3 + 1.7.25 + + + + + Ethereum + Ethereum + https://dl.bintray.com/ethereum/maven/ + + + + + + + + org.springframework.boot + spring-boot-starter + ${spring.boot.version} + + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + + + org.springframework.boot + spring-boot-starter-tomcat + ${spring.boot.version} + + + + + org.springframework + spring-core + ${springframework.version} + + + org.springframework + spring-web + ${springframework.version} + + + org.springframework + spring-webmvc + ${springframework.version} + + + + + org.ethereum + ethereumj-core + ${ethereumj-core.version} + + + org.web3j + core + ${web3j.core.version} + + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + + + javax.servlet + jstl + ${jstl.version} + + + javax.servlet + javax.servlet-api + ${javax-servlet.version} + + + javax.servlet.jsp.jstl + jstl-api + ${jstl.version} + + + javax.servlet.jsp + javax.servlet.jsp-api + ${javax-jsp.version} + + + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + + org.springframework.boot + spring-boot-starter-test + test + ${spring.boot.version} + + + org.springframework + spring-context + ${springframework.version} + + + org.springframework + spring-test + ${springframework.version} + test + + + + + org.mockito + mockito-core + ${mockito.version} + + + org.hamcrest + hamcrest-core + + + test + + + junit + junit + ${junit.version} + test + + + org.hamcrest + hamcrest-core + + + + + org.hamcrest + hamcrest-library + ${hamcrest.version} + test + + + com.jayway.jsonpath + json-path + ${jsonpath.version} + + + + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + src/main/webapp + false + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire.version} + + + install + install + + test + + + + + + ethereum + diff --git a/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/ApplicationMain.java b/ethereum/src/main/java/com/baeldung/ethereumj/ApplicationMain.java similarity index 100% rename from ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/ApplicationMain.java rename to ethereum/src/main/java/com/baeldung/ethereumj/ApplicationMain.java diff --git a/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/Constants.java b/ethereum/src/main/java/com/baeldung/ethereumj/Constants.java similarity index 100% rename from ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/Constants.java rename to ethereum/src/main/java/com/baeldung/ethereumj/Constants.java diff --git a/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/beans/EthBean.java b/ethereum/src/main/java/com/baeldung/ethereumj/beans/EthBean.java similarity index 100% rename from ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/beans/EthBean.java rename to ethereum/src/main/java/com/baeldung/ethereumj/beans/EthBean.java diff --git a/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/config/EthConfig.java b/ethereum/src/main/java/com/baeldung/ethereumj/config/EthConfig.java similarity index 100% rename from ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/config/EthConfig.java rename to ethereum/src/main/java/com/baeldung/ethereumj/config/EthConfig.java diff --git a/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/controllers/EthController.java b/ethereum/src/main/java/com/baeldung/ethereumj/controllers/EthController.java similarity index 100% rename from ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/controllers/EthController.java rename to ethereum/src/main/java/com/baeldung/ethereumj/controllers/EthController.java diff --git a/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java b/ethereum/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java similarity index 100% rename from ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java rename to ethereum/src/main/java/com/baeldung/ethereumj/listeners/EthListener.java diff --git a/ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java b/ethereum/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java similarity index 100% rename from ethereum/ethereumj/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java rename to ethereum/src/main/java/com/baeldung/ethereumj/transfer/EthResponse.java diff --git a/ethereum/ethereumj/src/main/java/com/baeldung/web3j/Template.java b/ethereum/src/main/java/com/baeldung/web3j/Template.java similarity index 100% rename from ethereum/ethereumj/src/main/java/com/baeldung/web3j/Template.java rename to ethereum/src/main/java/com/baeldung/web3j/Template.java diff --git a/ethereum/web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java b/ethereum/src/main/java/com/baeldung/web3j/config/AppConfig.java similarity index 100% rename from ethereum/web3j/src/main/java/com/baeldung/web3j/config/AppConfig.java rename to ethereum/src/main/java/com/baeldung/web3j/config/AppConfig.java diff --git a/ethereum/web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java b/ethereum/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java similarity index 100% rename from ethereum/web3j/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java rename to ethereum/src/main/java/com/baeldung/web3j/config/WebAppInitializer.java diff --git a/ethereum/web3j/src/main/java/com/baeldung/web3j/constants/Constants.java b/ethereum/src/main/java/com/baeldung/web3j/constants/Constants.java similarity index 100% rename from ethereum/web3j/src/main/java/com/baeldung/web3j/constants/Constants.java rename to ethereum/src/main/java/com/baeldung/web3j/constants/Constants.java diff --git a/ethereum/web3j/src/main/java/com/baeldung/web3j/contracts/Example.java b/ethereum/src/main/java/com/baeldung/web3j/contracts/Example.java similarity index 100% rename from ethereum/web3j/src/main/java/com/baeldung/web3j/contracts/Example.java rename to ethereum/src/main/java/com/baeldung/web3j/contracts/Example.java diff --git a/ethereum/ethereumj/src/main/java/com/baeldung/web3j/contracts/Greeting.java b/ethereum/src/main/java/com/baeldung/web3j/contracts/Greeting.java similarity index 100% rename from ethereum/ethereumj/src/main/java/com/baeldung/web3j/contracts/Greeting.java rename to ethereum/src/main/java/com/baeldung/web3j/contracts/Greeting.java diff --git a/ethereum/web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java b/ethereum/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java similarity index 100% rename from ethereum/web3j/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java rename to ethereum/src/main/java/com/baeldung/web3j/controllers/EthereumRestController.java diff --git a/ethereum/web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java b/ethereum/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java similarity index 100% rename from ethereum/web3j/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java rename to ethereum/src/main/java/com/baeldung/web3j/helpers/TimeHelper.java diff --git a/ethereum/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java b/ethereum/src/main/java/com/baeldung/web3j/services/Web3Service.java similarity index 100% rename from ethereum/web3j/src/main/java/com/baeldung/web3j/services/Web3Service.java rename to ethereum/src/main/java/com/baeldung/web3j/services/Web3Service.java diff --git a/ethereum/web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java b/ethereum/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java similarity index 100% rename from ethereum/web3j/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java rename to ethereum/src/main/java/com/baeldung/web3j/transfers/ResponseTransfer.java diff --git a/ethereum/ethereumj/src/main/resources/application.properties b/ethereum/src/main/resources/application.properties similarity index 100% rename from ethereum/ethereumj/src/main/resources/application.properties rename to ethereum/src/main/resources/application.properties diff --git a/ethereum/web3j/dev_ganache/README.md b/ethereum/src/main/resources/dev_ganache/README.md similarity index 100% rename from ethereum/web3j/dev_ganache/README.md rename to ethereum/src/main/resources/dev_ganache/README.md diff --git a/ethereum/web3j/dev_truffle/README.md b/ethereum/src/main/resources/dev_truffle/README.md similarity index 100% rename from ethereum/web3j/dev_truffle/README.md rename to ethereum/src/main/resources/dev_truffle/README.md diff --git a/ethereum/web3j/dev_truffle/build/contracts/ConvertLib.json b/ethereum/src/main/resources/dev_truffle/build/contracts/ConvertLib.json similarity index 100% rename from ethereum/web3j/dev_truffle/build/contracts/ConvertLib.json rename to ethereum/src/main/resources/dev_truffle/build/contracts/ConvertLib.json diff --git a/ethereum/web3j/dev_truffle/build/contracts/Example.json b/ethereum/src/main/resources/dev_truffle/build/contracts/Example.json similarity index 100% rename from ethereum/web3j/dev_truffle/build/contracts/Example.json rename to ethereum/src/main/resources/dev_truffle/build/contracts/Example.json diff --git a/ethereum/web3j/dev_truffle/build/contracts/Migrations.json b/ethereum/src/main/resources/dev_truffle/build/contracts/Migrations.json similarity index 100% rename from ethereum/web3j/dev_truffle/build/contracts/Migrations.json rename to ethereum/src/main/resources/dev_truffle/build/contracts/Migrations.json diff --git a/ethereum/web3j/dev_truffle/contracts/ConvertLib.sol b/ethereum/src/main/resources/dev_truffle/contracts/ConvertLib.sol similarity index 100% rename from ethereum/web3j/dev_truffle/contracts/ConvertLib.sol rename to ethereum/src/main/resources/dev_truffle/contracts/ConvertLib.sol diff --git a/ethereum/web3j/dev_truffle/contracts/Example.sol b/ethereum/src/main/resources/dev_truffle/contracts/Example.sol similarity index 100% rename from ethereum/web3j/dev_truffle/contracts/Example.sol rename to ethereum/src/main/resources/dev_truffle/contracts/Example.sol diff --git a/ethereum/web3j/dev_truffle/contracts/Migrations.sol b/ethereum/src/main/resources/dev_truffle/contracts/Migrations.sol similarity index 100% rename from ethereum/web3j/dev_truffle/contracts/Migrations.sol rename to ethereum/src/main/resources/dev_truffle/contracts/Migrations.sol diff --git a/ethereum/web3j/dev_truffle/migrations/1_initial_migration.js b/ethereum/src/main/resources/dev_truffle/migrations/1_initial_migration.js similarity index 100% rename from ethereum/web3j/dev_truffle/migrations/1_initial_migration.js rename to ethereum/src/main/resources/dev_truffle/migrations/1_initial_migration.js diff --git a/ethereum/web3j/dev_truffle/migrations/2_deploy_contracts.js b/ethereum/src/main/resources/dev_truffle/migrations/2_deploy_contracts.js similarity index 100% rename from ethereum/web3j/dev_truffle/migrations/2_deploy_contracts.js rename to ethereum/src/main/resources/dev_truffle/migrations/2_deploy_contracts.js diff --git a/ethereum/web3j/dev_truffle/truffle.js b/ethereum/src/main/resources/dev_truffle/truffle.js similarity index 100% rename from ethereum/web3j/dev_truffle/truffle.js rename to ethereum/src/main/resources/dev_truffle/truffle.js diff --git a/ethereum/ethereumj/src/main/resources/solidity/Greeting.sol b/ethereum/src/main/resources/solidity/Greeting.sol similarity index 100% rename from ethereum/ethereumj/src/main/resources/solidity/Greeting.sol rename to ethereum/src/main/resources/solidity/Greeting.sol diff --git a/ethereum/ethereumj/src/main/resources/solidity/build/Greeting.abi b/ethereum/src/main/resources/solidity/build/Greeting.abi similarity index 100% rename from ethereum/ethereumj/src/main/resources/solidity/build/Greeting.abi rename to ethereum/src/main/resources/solidity/build/Greeting.abi diff --git a/ethereum/ethereumj/src/main/resources/solidity/build/Greeting.bin b/ethereum/src/main/resources/solidity/build/Greeting.bin similarity index 100% rename from ethereum/ethereumj/src/main/resources/solidity/build/Greeting.bin rename to ethereum/src/main/resources/solidity/build/Greeting.bin diff --git a/ethereum/web3j/src/main/webapp/WEB-INF/.gitkeep b/ethereum/src/main/webapp/WEB-INF/.gitkeep similarity index 100% rename from ethereum/web3j/src/main/webapp/WEB-INF/.gitkeep rename to ethereum/src/main/webapp/WEB-INF/.gitkeep diff --git a/ethereum/web3j/src/main/webapp/resources/.gitkeep b/ethereum/src/main/webapp/resources/.gitkeep similarity index 100% rename from ethereum/web3j/src/main/webapp/resources/.gitkeep rename to ethereum/src/main/webapp/resources/.gitkeep diff --git a/ethereum/ethereumj/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java b/ethereum/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java similarity index 99% rename from ethereum/ethereumj/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java rename to ethereum/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java index f62d229261..7676b99224 100644 --- a/ethereum/ethereumj/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java +++ b/ethereum/src/test/java/com/baeldung/ethereumj/controllers/EthControllerLiveTest.java @@ -74,4 +74,4 @@ public class EthControllerLiveTest { assertTrue("Dynamic data returned?", a.hasBody()); System.out.println("Dynamic data returned?: " + a.hasBody()); } -} +} \ No newline at end of file diff --git a/ethereum/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java b/ethereum/src/test/java/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java similarity index 100% rename from ethereum/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java rename to ethereum/src/test/java/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java diff --git a/ethereum/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java b/ethereum/src/test/java/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java similarity index 100% rename from ethereum/web3j/src/test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java rename to ethereum/src/test/java/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java diff --git a/ethereum/web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java b/ethereum/src/test/java/com/baeldung/web3j/services/EthereumContractUnitTest.java similarity index 81% rename from ethereum/web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java rename to ethereum/src/test/java/com/baeldung/web3j/services/EthereumContractUnitTest.java index 5c74e1c7ce..382c96e985 100644 --- a/ethereum/web3j/src/test/com/baeldung/web3j/services/EthereumContractUnitTest.java +++ b/ethereum/src/test/java/com/baeldung/web3j/services/EthereumContractUnitTest.java @@ -3,13 +3,9 @@ package com.baeldung.web3j.services; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.mockito.Mock; -import org.springframework.beans.factory.annotation.Autowired; import java.util.concurrent.CompletableFuture; -import static com.baeldung.web3j.constants.Constants.PLEASE_SUPPLY_REAL_DATA; - public class EthereumContractUnitTest { private Web3Service web3Service; diff --git a/ethereum/web3j/.gitignore b/ethereum/web3j/.gitignore deleted file mode 100644 index f83e8cf07c..0000000000 --- a/ethereum/web3j/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.idea -target -*.iml diff --git a/ethereum/web3j/pom.xml b/ethereum/web3j/pom.xml deleted file mode 100644 index b65f120218..0000000000 --- a/ethereum/web3j/pom.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - 4.0.0 - com.baeldung.web3j - Web3j - war - 1.0.0 - web3j - - - 1.3 - 2.9.3 - 2.3.1 - 3.1.0 - 2.4.0 - 1.2 - 4.12 - 1.2.3 - 2.18.1 - 1.10.19 - 1.7.25 - 5.0.5.RELEASE - - - - - - org.springframework - spring-core - ${springframework.version} - - - org.springframework - spring-web - ${springframework.version} - - - org.springframework - spring-webmvc - ${springframework.version} - - - - - javax.servlet - javax.servlet-api - ${javax-servlet.version} - - - javax.servlet.jsp.jstl - jstl-api - ${jstl.version} - - - javax.servlet.jsp - javax.servlet.jsp-api - ${javax-jsp.version} - - - javax.servlet - jstl - ${jstl.version} - - - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - - - org.web3j - core - 3.3.1 - - - - - org.mockito - mockito-core - ${mockito.version} - - - org.hamcrest - hamcrest-core - - - test - - - junit - junit - ${junit.version} - test - - - org.hamcrest - hamcrest-core - - - - - org.hamcrest - hamcrest-library - ${hamcrest.version} - test - - - org.springframework - spring-context - ${springframework.version} - - - org.springframework - spring-test - ${springframework.version} - test - - - com.jayway.jsonpath - json-path - ${jsonpath.version} - - - - - - - - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - - - - org.apache.tomcat.maven - tomcat8-maven-plugin - 3.0-r1655215 - - /javaweb3 - - - - org.apache.maven.plugins - maven-war-plugin - 3.0.0 - - src/main/webapp - false - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire.version} - - - install - install - - test - - - - - test/com/baeldung/web3j/controllers/EthereumRestControllerIntegrationTest.java - - - test/com/baeldung/web3j/controllers/EthereumRestControllerUnitTest.java - - - test/com/baeldung/web3j/services/EthereumContractUnitTest.java - - - - - - - - - web3j - - \ No newline at end of file From e90737e54fa1e1ffe34d0d79844973ef83208086 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 3 May 2018 13:45:14 +0100 Subject: [PATCH 04/82] Add files via upload --- .../WorkingWithArraysInThymeleafApplication.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java new file mode 100644 index 0000000000..d15e14ef35 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java @@ -0,0 +1,12 @@ +package com.baeldung.thymeleaf; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class WorkingWithArraysInThymeleafApplication { + + public static void main(String[] args) { + SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); + } +} From 0c609288a60130c3896bacd9690bb497751cc148 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 3 May 2018 14:04:44 +0100 Subject: [PATCH 05/82] Delete WorkingWithArraysInThymeleafApplication.java --- .../WorkingWithArraysInThymeleafApplication.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java deleted file mode 100644 index d15e14ef35..0000000000 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.thymeleaf; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class WorkingWithArraysInThymeleafApplication { - - public static void main(String[] args) { - SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); - } -} From afb5fd317b261d99a6cd1bc04dd28def57aaf673 Mon Sep 17 00:00:00 2001 From: Adam InTae Gerard Date: Mon, 7 May 2018 13:05:04 -0700 Subject: [PATCH 06/82] Removed white-spacing conflict --- xml/pom.xml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/xml/pom.xml b/xml/pom.xml index 166cb6dd4e..8c578cdad9 100644 --- a/xml/pom.xml +++ b/xml/pom.xml @@ -1,10 +1,9 @@ + 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 xml 0.1-SNAPSHOT - xml @@ -236,8 +235,8 @@ - + maven-assembly-plugin ${project.basedir} @@ -256,10 +255,8 @@ - make-assembly - package + make-assembly + package attached @@ -285,10 +282,10 @@ 2.4 1.8 + 1.3.1 - From 936dc5e346da30509dfede38e3f30ccc1a06bcfd Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 12:38:20 +0100 Subject: [PATCH 07/82] Add files via upload --- .../thymeleaf/controller/ArrayController.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ArrayController.java diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ArrayController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ArrayController.java new file mode 100644 index 0000000000..e36dcdf092 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ArrayController.java @@ -0,0 +1,25 @@ +package com.baeldung.thymeleaf.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class ArrayController { + @GetMapping("/") + public String arrayController(Model model) { + String[] continents = new String[7]; + + continents[0] = "Africa"; + continents[1] = "Antarctica"; + continents[2] = "Assia"; + continents[3] = "Australia"; + continents[4] = "Europe"; + continents[5] = "North America"; + continents[6] = "Sourth America"; + + model.addAttribute("continents", continents); + + return "continents"; + } +} From 77227cdc9fb215c56404a210ae89976833a16ed5 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 12:43:28 +0100 Subject: [PATCH 08/82] Create continents.html --- .../main/resources/templates/continents.html | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 spring-thymeleaf/src/main/resources/templates/continents.html diff --git a/spring-thymeleaf/src/main/resources/templates/continents.html b/spring-thymeleaf/src/main/resources/templates/continents.html new file mode 100644 index 0000000000..d170ccae23 --- /dev/null +++ b/spring-thymeleaf/src/main/resources/templates/continents.html @@ -0,0 +1,48 @@ + + + +Arrays in Thymeleaf + + + + +

THE CONTINENTS

+

+ We have a total of + continents in this world. Following is a list showing their order + based on the number of population in each of them. +

+ +
    +
  1. +
  2. +
  3. +
  4. +
  5. +
  6. +
  7. +
+ + + +

+ +

+ The greatest + continents. +

+ +

+ Europe is a continent: . +

+ +

+ Array of continents is empty . +

+ + + Date: Thu, 10 May 2018 12:45:35 +0100 Subject: [PATCH 09/82] Add files via upload --- .../WorkingWithArraysInThymeleafApplication.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java new file mode 100644 index 0000000000..d15e14ef35 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java @@ -0,0 +1,12 @@ +package com.baeldung.thymeleaf; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class WorkingWithArraysInThymeleafApplication { + + public static void main(String[] args) { + SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); + } +} From c3c8b73e2146de89f7f2002653a27e9368377c6c Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 12:51:25 +0100 Subject: [PATCH 10/82] Update pom.xml --- spring-thymeleaf/pom.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index d13356b3d7..e74f7c2300 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -98,6 +98,13 @@ ${springframework-security.version} test + + + org.springframework.boot + spring-boot-autoconfigure + 2.0.1.RELEASE + jar + @@ -173,4 +180,4 @@ 2.2 - \ No newline at end of file + From 517b6d4bc8ea7f63ab991be8a989d43bae1f3dd0 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 13:10:34 +0100 Subject: [PATCH 11/82] Update pom.xml --- spring-thymeleaf/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index e74f7c2300..8add2a850c 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -99,12 +99,12 @@ test - + From ddd6019631c5f8be849067a1356447996121d558 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 13:11:24 +0100 Subject: [PATCH 12/82] Update WorkingWithArraysInThymeleafApplication.java --- ...orkingWithArraysInThymeleafApplication.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java index d15e14ef35..bce0660fda 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java @@ -1,12 +1,12 @@ -package com.baeldung.thymeleaf; +// package com.baeldung.thymeleaf; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; +// import org.springframework.boot.SpringApplication; +// import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication -public class WorkingWithArraysInThymeleafApplication { +// @SpringBootApplication +// public class WorkingWithArraysInThymeleafApplication { - public static void main(String[] args) { - SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); - } -} +// public static void main(String[] args) { +// SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); +// } +// } From 300d6000dbd16fa24ef56cf154808615f496c111 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 13:12:33 +0100 Subject: [PATCH 13/82] Update ArrayController.java From 26521fb2ff58fce02fd5471e087743b1e2457225 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 13:13:58 +0100 Subject: [PATCH 14/82] Update continents.html --- .../main/resources/templates/continents.html | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/spring-thymeleaf/src/main/resources/templates/continents.html b/spring-thymeleaf/src/main/resources/templates/continents.html index d170ccae23..849f479413 100644 --- a/spring-thymeleaf/src/main/resources/templates/continents.html +++ b/spring-thymeleaf/src/main/resources/templates/continents.html @@ -1,48 +1,48 @@ - -Arrays in Thymeleaf - - - - -

THE CONTINENTS

-

- We have a total of - continents in this world. Following is a list showing their order - based on the number of population in each of them. -

+ + Arrays in Thymeleaf + + + + +

THE CONTINENTS

+

+ We have a total of + continents in this world. Following is a list showing their order + based on the number of population in each of them. +

-
    -
  1. -
  2. -
  3. -
  4. -
  5. -
  6. -
  7. -
+
    +
  1. +
  2. +
  3. +
  4. +
  5. +
  6. +
  7. +
-
    -
  • -
+
    +
  • +
-

+

-

- The greatest - continents. -

+

+ The greatest + continents. +

-

- Europe is a continent: . -

+

+ Europe is a continent: . +

-

- Array of continents is empty . -

+

+ Array of continents is empty . +

- + Date: Thu, 10 May 2018 14:23:43 +0100 Subject: [PATCH 15/82] Delete ArrayController.java --- .../thymeleaf/controller/ArrayController.java | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ArrayController.java diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ArrayController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ArrayController.java deleted file mode 100644 index e36dcdf092..0000000000 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ArrayController.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.thymeleaf.controller; - -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; - -@Controller -public class ArrayController { - @GetMapping("/") - public String arrayController(Model model) { - String[] continents = new String[7]; - - continents[0] = "Africa"; - continents[1] = "Antarctica"; - continents[2] = "Assia"; - continents[3] = "Australia"; - continents[4] = "Europe"; - continents[5] = "North America"; - continents[6] = "Sourth America"; - - model.addAttribute("continents", continents); - - return "continents"; - } -} From 5deaa416e61a58200f9e5780993cb848b5fe7321 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 14:24:55 +0100 Subject: [PATCH 16/82] Add files via upload --- .../controller/ThymeleafArrayController.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java new file mode 100644 index 0000000000..789c87d870 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java @@ -0,0 +1,25 @@ +package com.baeldung.thymeleaf.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class ThymeleafArrayController { + @GetMapping("/") + public String arrayController(Model model) { + String[] continents = new String[7]; + + continents[0] = "Africa"; + continents[1] = "Antarctica"; + continents[2] = "Assia"; + continents[3] = "Australia"; + continents[4] = "Europe"; + continents[5] = "North America"; + continents[6] = "Sourth America"; + + model.addAttribute("continents", continents); + + return "continents"; + } +} From bc4594dacfa21ab99bc67fed2b80215e698cec1b Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 14:43:41 +0100 Subject: [PATCH 17/82] Update ThymeleafArrayController.java --- .../baeldung/thymeleaf/controller/ThymeleafArrayController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java index 789c87d870..5732827a3e 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java @@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.GetMapping; @Controller public class ThymeleafArrayController { - @GetMapping("/") + @GetMapping("/arrays") public String arrayController(Model model) { String[] continents = new String[7]; From 8aad495404f8a65f7e98a8dcb2bbeb11248d8c64 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 15:56:45 +0100 Subject: [PATCH 18/82] Update continents.html --- spring-thymeleaf/src/main/resources/templates/continents.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-thymeleaf/src/main/resources/templates/continents.html b/spring-thymeleaf/src/main/resources/templates/continents.html index 849f479413..0e7ffa3f58 100644 --- a/spring-thymeleaf/src/main/resources/templates/continents.html +++ b/spring-thymeleaf/src/main/resources/templates/continents.html @@ -5,6 +5,7 @@ +

THE CONTINENTS

@@ -45,4 +46,4 @@

- From 012bf35ffd7a24b107bc8b1ad6af879efd5e7be6 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 15:57:46 +0100 Subject: [PATCH 19/82] Update pom.xml --- spring-thymeleaf/pom.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 8add2a850c..a914a6d27e 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -99,12 +99,13 @@ test
- + + From 4e4b65c2fcc71158439b60f6905f5c69c62b5e0e Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Thu, 10 May 2018 15:58:29 +0100 Subject: [PATCH 20/82] Update WorkingWithArraysInThymeleafApplication.java --- ...orkingWithArraysInThymeleafApplication.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java index bce0660fda..d15e14ef35 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java @@ -1,12 +1,12 @@ -// package com.baeldung.thymeleaf; +package com.baeldung.thymeleaf; -// import org.springframework.boot.SpringApplication; -// import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; -// @SpringBootApplication -// public class WorkingWithArraysInThymeleafApplication { +@SpringBootApplication +public class WorkingWithArraysInThymeleafApplication { -// public static void main(String[] args) { -// SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); -// } -// } + public static void main(String[] args) { + SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); + } +} From 86b4b39852eec2798c30ebad0566f1073563860c Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 09:38:11 +0100 Subject: [PATCH 21/82] Update WorkingWithArraysInThymeleafApplication.java --- ...orkingWithArraysInThymeleafApplication.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java index d15e14ef35..bce0660fda 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java @@ -1,12 +1,12 @@ -package com.baeldung.thymeleaf; +// package com.baeldung.thymeleaf; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; +// import org.springframework.boot.SpringApplication; +// import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication -public class WorkingWithArraysInThymeleafApplication { +// @SpringBootApplication +// public class WorkingWithArraysInThymeleafApplication { - public static void main(String[] args) { - SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); - } -} +// public static void main(String[] args) { +// SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); +// } +// } From 460c314d986b39809f663afff452d03ceb67630b Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 09:39:56 +0100 Subject: [PATCH 22/82] Update pom.xml --- spring-thymeleaf/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index a914a6d27e..e05564abd8 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -99,12 +99,12 @@ test - + From a4c502058208513bd8b5924d988bddb7f3105691 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 09:42:28 +0100 Subject: [PATCH 23/82] Update continents.html From c510a4e72ee562bff2c76614740810828f28f391 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 09:49:12 +0100 Subject: [PATCH 24/82] Update pom.xml --- spring-thymeleaf/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index e05564abd8..a914a6d27e 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -99,12 +99,12 @@ test - + From 08d5edba2ff6a049b7faa6d239ebb26d96c9ffdf Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 09:58:14 +0100 Subject: [PATCH 25/82] Update WorkingWithArraysInThymeleafApplication.java --- ...orkingWithArraysInThymeleafApplication.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java index bce0660fda..d15e14ef35 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java @@ -1,12 +1,12 @@ -// package com.baeldung.thymeleaf; +package com.baeldung.thymeleaf; -// import org.springframework.boot.SpringApplication; -// import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; -// @SpringBootApplication -// public class WorkingWithArraysInThymeleafApplication { +@SpringBootApplication +public class WorkingWithArraysInThymeleafApplication { -// public static void main(String[] args) { -// SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); -// } -// } + public static void main(String[] args) { + SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); + } +} From ab93b6272fa9e499301016bfbe40667adecc3ce9 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 10:19:59 +0100 Subject: [PATCH 26/82] Update pom.xml --- spring-thymeleaf/pom.xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index a914a6d27e..d496addb87 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -106,6 +106,17 @@ jar + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter-web + + @@ -158,6 +169,14 @@ + + + + org.springframework.boot + spring-boot-maven-plugin + + + From a9827c6becd89669e8c721d06732bccfe542ba25 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 10:21:15 +0100 Subject: [PATCH 27/82] Update WorkingWithArraysInThymeleafApplication.java From 22ee523b8eca254a6ecf44e768673c99aada3b33 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 10:35:49 +0100 Subject: [PATCH 28/82] Update pom.xml --- spring-thymeleaf/pom.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index d496addb87..d4fcfe5f14 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -113,9 +113,9 @@ - org.springframework.boot - spring-boot-starter-web - + org.springframework.boot + spring-boot-starter-web + @@ -129,6 +129,7 @@ false + org.codehaus.cargo cargo-maven2-plugin @@ -148,6 +149,7 @@ + org.apache.tomcat.maven tomcat7-maven-plugin @@ -168,15 +170,13 @@ + + + org.springframework.boot + spring-boot-maven-plugin + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - From 7ceb31f3407d7f09d6ce5179133d3b028c908350 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 10:44:54 +0100 Subject: [PATCH 29/82] Update pom.xml --- spring-thymeleaf/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index d4fcfe5f14..68fa28018e 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -170,12 +170,6 @@ - - - org.springframework.boot - spring-boot-maven-plugin - -
From fdaa866ffab470ef7595aef9f06d8651f3df465f Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 10:52:20 +0100 Subject: [PATCH 30/82] Update pom.xml --- spring-thymeleaf/pom.xml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 68fa28018e..b774c453be 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -111,12 +111,7 @@ spring-boot-starter-test test - - - org.springframework.boot - spring-boot-starter-web - - + From a27ef5a9a755f647827174256f5998fde00edc5f Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 11:06:43 +0100 Subject: [PATCH 31/82] Update pom.xml --- spring-thymeleaf/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index b774c453be..81ff93f013 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -99,7 +99,7 @@ test - + From c2d37e99e13bd5622dfe9180597db08123e58a3d Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 11 May 2018 11:08:48 +0100 Subject: [PATCH 32/82] Update WorkingWithArraysInThymeleafApplication.java --- ...orkingWithArraysInThymeleafApplication.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java index d15e14ef35..bce0660fda 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/WorkingWithArraysInThymeleafApplication.java @@ -1,12 +1,12 @@ -package com.baeldung.thymeleaf; +// package com.baeldung.thymeleaf; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; +// import org.springframework.boot.SpringApplication; +// import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication -public class WorkingWithArraysInThymeleafApplication { +// @SpringBootApplication +// public class WorkingWithArraysInThymeleafApplication { - public static void main(String[] args) { - SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); - } -} +// public static void main(String[] args) { +// SpringApplication.run(WorkingWithArraysInThymeleafApplication.class, args); +// } +// } From 1d94492e2992aacc2fdabd98dd47fb7fa11c7d21 Mon Sep 17 00:00:00 2001 From: jabyte <32500012+jabyte@users.noreply.github.com> Date: Fri, 18 May 2018 11:04:20 +0100 Subject: [PATCH 33/82] Array declared and initialized in one line. --- .../controller/ThymeleafArrayController.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java index 5732827a3e..8276cc4376 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ThymeleafArrayController.java @@ -8,16 +8,8 @@ import org.springframework.web.bind.annotation.GetMapping; public class ThymeleafArrayController { @GetMapping("/arrays") public String arrayController(Model model) { - String[] continents = new String[7]; - - continents[0] = "Africa"; - continents[1] = "Antarctica"; - continents[2] = "Assia"; - continents[3] = "Australia"; - continents[4] = "Europe"; - continents[5] = "North America"; - continents[6] = "Sourth America"; - + String[] continents = {"Africa", "Antarctica", "Asia", "Australia", "Europe", "North America", "Sourth America"}; + model.addAttribute("continents", continents); return "continents"; From 5a92adbc39545c6b580ffb99cdf236ab15946ea3 Mon Sep 17 00:00:00 2001 From: Mohamed El Tahawy Date: Tue, 22 May 2018 16:18:23 +0400 Subject: [PATCH 34/82] Typo "oponent" to "opponent" --- .../algorithms/mcts/montecarlo/MonteCarloTreeSearch.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/MonteCarloTreeSearch.java b/algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/MonteCarloTreeSearch.java index f428df45d3..a4918f674d 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/MonteCarloTreeSearch.java +++ b/algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/MonteCarloTreeSearch.java @@ -10,7 +10,7 @@ public class MonteCarloTreeSearch { private static final int WIN_SCORE = 10; private int level; - private int oponent; + private int opponent; public MonteCarloTreeSearch() { this.level = 3; @@ -32,11 +32,11 @@ public class MonteCarloTreeSearch { long start = System.currentTimeMillis(); long end = start + 60 * getMillisForCurrentLevel(); - oponent = 3 - playerNo; + opponent = 3 - playerNo; Tree tree = new Tree(); Node rootNode = tree.getRoot(); rootNode.getState().setBoard(board); - rootNode.getState().setPlayerNo(oponent); + rootNode.getState().setPlayerNo(opponent); while (System.currentTimeMillis() < end) { // Phase 1 - Selection @@ -93,7 +93,7 @@ public class MonteCarloTreeSearch { State tempState = tempNode.getState(); int boardStatus = tempState.getBoard().checkStatus(); - if (boardStatus == oponent) { + if (boardStatus == opponent) { tempNode.getParent().getState().setWinScore(Integer.MIN_VALUE); return boardStatus; } From d5177c158e9521196be9c5d08eb7e1328604a708 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Wed, 23 May 2018 18:44:15 +0100 Subject: [PATCH 35/82] Added for eval article --- .../baeldung/reactive/client/StockClient.java | 24 ++++++++++++ .../controller/StockReactiveController.java | 38 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java create mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java new file mode 100644 index 0000000000..6c37c6b763 --- /dev/null +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java @@ -0,0 +1,24 @@ +package com.baeldung.reactive.client; + +import org.springframework.http.MediaType; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec; + +import com.baeldung.reactive.model.Stock; + +public class StockClient { + + public void getStockUpdates(String stockCode) { + WebClient client = WebClient.create("localhost:9111"); + RequestHeadersSpec request = client.get().uri("/rtes/stocks/"+stockCode).accept(MediaType.TEXT_EVENT_STREAM); + request.retrieve().bodyToFlux(Stock.class).toStream().forEach(System.out::println); + } + + public static void main(String[] args) throws InterruptedException { + new StockClient().getStockUpdates("GOOGL"); + + while(true) { + Thread.sleep(1000L); + } + } +} diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java new file mode 100644 index 0000000000..4015d660b9 --- /dev/null +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java @@ -0,0 +1,38 @@ +package com.baeldung.reactive.controller; + +import java.math.BigDecimal; +import java.time.Duration; +import java.util.Random; +import java.util.stream.Stream; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.reactive.model.Stock; + +import reactor.core.publisher.Flux; +import reactor.util.function.Tuple2; + +@RestController +@RequestMapping("/rtes") +public class StockReactiveController { + + @GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE, value = "/stocks/{code}") + public Flux getStocks(@PathVariable String code) { + BigDecimal startingPrice = new BigDecimal("100"); + Flux stockFlux = Flux.fromStream(Stream.generate(() -> new Stock( + code, + new Random().nextBoolean() ? + startingPrice.add(BigDecimal.valueOf(new Random().nextDouble())): + startingPrice.subtract(BigDecimal.valueOf(new Random().nextDouble()))))); + Flux emmitFlux = Flux.interval(Duration.ofSeconds(1)); + return Flux.zip(stockFlux, emmitFlux).map(Tuple2::getT1); + } + + public static void main(String [] args) { + + } +} From 5268c3e8c25a977370fb86aafeb05a956e73c542 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Wed, 23 May 2018 18:49:26 +0100 Subject: [PATCH 36/82] Removed unused code --- .../java/com/baeldung/reactive/client/StockClient.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java index 6c37c6b763..909c9f3de4 100644 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java @@ -12,13 +12,5 @@ public class StockClient { WebClient client = WebClient.create("localhost:9111"); RequestHeadersSpec request = client.get().uri("/rtes/stocks/"+stockCode).accept(MediaType.TEXT_EVENT_STREAM); request.retrieve().bodyToFlux(Stock.class).toStream().forEach(System.out::println); - } - - public static void main(String[] args) throws InterruptedException { - new StockClient().getStockUpdates("GOOGL"); - - while(true) { - Thread.sleep(1000L); - } - } + } } From c170f2111d298782edf5908ea5e1e50ac546a4e4 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Thu, 24 May 2018 13:06:02 +0100 Subject: [PATCH 37/82] Used log() in StockClient and formatted in eclipse --- .../baeldung/reactive/client/StockClient.java | 24 +++++++++---------- .../controller/StockReactiveController.java | 14 +++++------ 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java index 6c37c6b763..8a65b77b37 100644 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java @@ -6,19 +6,17 @@ import org.springframework.web.reactive.function.client.WebClient.RequestHeaders import com.baeldung.reactive.model.Stock; +import reactor.core.publisher.Flux; + public class StockClient { - public void getStockUpdates(String stockCode) { - WebClient client = WebClient.create("localhost:9111"); - RequestHeadersSpec request = client.get().uri("/rtes/stocks/"+stockCode).accept(MediaType.TEXT_EVENT_STREAM); - request.retrieve().bodyToFlux(Stock.class).toStream().forEach(System.out::println); - } - - public static void main(String[] args) throws InterruptedException { - new StockClient().getStockUpdates("GOOGL"); - - while(true) { - Thread.sleep(1000L); - } - } + public Flux getStockUpdates(String stockCode) { + WebClient client = WebClient.create("localhost:8080"); + RequestHeadersSpec request = client.get() + .uri("/rtes/stocks/" + stockCode) + .accept(MediaType.TEXT_EVENT_STREAM); + return request.retrieve() + .bodyToFlux(Stock.class) + .log(); + } } diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java index 4015d660b9..8f8de79561 100644 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java @@ -23,16 +23,14 @@ public class StockReactiveController { @GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE, value = "/stocks/{code}") public Flux getStocks(@PathVariable String code) { BigDecimal startingPrice = new BigDecimal("100"); - Flux stockFlux = Flux.fromStream(Stream.generate(() -> new Stock( - code, - new Random().nextBoolean() ? - startingPrice.add(BigDecimal.valueOf(new Random().nextDouble())): - startingPrice.subtract(BigDecimal.valueOf(new Random().nextDouble()))))); + Flux stockFlux = Flux.fromStream(Stream.generate(() -> new Stock(code, getLatestPrice(startingPrice)))); Flux emmitFlux = Flux.interval(Duration.ofSeconds(1)); - return Flux.zip(stockFlux, emmitFlux).map(Tuple2::getT1); + return Flux.zip(stockFlux, emmitFlux) + .map(Tuple2::getT1); } - public static void main(String [] args) { - + private BigDecimal getLatestPrice(BigDecimal startingPrice) { + BigDecimal priceChange = BigDecimal.valueOf(new Random().nextDouble()); + return new Random().nextBoolean() ? startingPrice.add(priceChange) : startingPrice.subtract(priceChange); } } From c0852bf743b98c040e69ab6ad888d50021824d50 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Thu, 24 May 2018 13:15:52 +0100 Subject: [PATCH 38/82] Added model class --- .../com/baeldung/reactive/model/Stock.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java new file mode 100644 index 0000000000..6743de064e --- /dev/null +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java @@ -0,0 +1,32 @@ +package com.baeldung.reactive.model; + +import java.math.BigDecimal; + +public class Stock { + + private String code; + + private BigDecimal price; + + public Stock(String code, BigDecimal price) { + this.code = code; + this.price = price; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + +} From a0b0e1c70532b18663ab717307f2694dbd87c303 Mon Sep 17 00:00:00 2001 From: gangadkho Date: Tue, 26 Jun 2018 14:48:41 +0800 Subject: [PATCH 39/82] Java Custom Exception --- core-java/pom.xml | 18 +++++--- .../baeldung/customexception/FileManager.java | 43 +++++++++++++++++++ .../IncorrectFileExtensionException.java | 9 ++++ .../IncorrectFileNameException.java | 9 ++++ ...correctFileExtensionExceptionUnitTest.java | 29 +++++++++++++ .../IncorrectFileNameExceptionUnitTest.java | 19 ++++++++ .../correctFileNameWithoutProperExtension | 0 7 files changed, 120 insertions(+), 7 deletions(-) create mode 100644 core-java/src/main/java/com/baeldung/customexception/FileManager.java create mode 100644 core-java/src/main/java/com/baeldung/customexception/IncorrectFileExtensionException.java create mode 100644 core-java/src/main/java/com/baeldung/customexception/IncorrectFileNameException.java create mode 100644 core-java/src/test/java/com/baeldung/customexception/IncorrectFileExtensionExceptionUnitTest.java create mode 100644 core-java/src/test/java/com/baeldung/customexception/IncorrectFileNameExceptionUnitTest.java create mode 100644 core-java/src/test/resources/correctFileNameWithoutProperExtension diff --git a/core-java/pom.xml b/core-java/pom.xml index a823d836e8..ecbdae52f2 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -10,8 +10,8 @@ com.baeldung parent-java - 0.0.1-SNAPSHOT - ../parent-java + 0.0.1-SNAPSHOT + ../parent-java @@ -198,11 +198,6 @@ mail ${javax.mail.version} - - javax.mail - mail - 1.5.0-b01 - @@ -250,6 +245,7 @@ org.apache.maven.plugins maven-jar-plugin + ${maven-jar-plugin.version} @@ -288,6 +284,7 @@ org.apache.maven.plugins maven-shade-plugin + ${maven-shade-plugin.version} @@ -309,6 +306,7 @@ com.jolira onejar-maven-plugin + ${onejar-maven-plugin.version} @@ -326,6 +324,7 @@ org.springframework.boot spring-boot-maven-plugin + ${spring-boot-maven-plugin.version} @@ -473,6 +472,11 @@ 3.0.0-M1 1.6.0 1.5.0-b01 + 3.0.2 + 1.4.4 + 3.1.1 + 2.0.3.RELEASE + \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/customexception/FileManager.java b/core-java/src/main/java/com/baeldung/customexception/FileManager.java new file mode 100644 index 0000000000..b6f4d960aa --- /dev/null +++ b/core-java/src/main/java/com/baeldung/customexception/FileManager.java @@ -0,0 +1,43 @@ +package com.baeldung.customexception; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Scanner; + +public class FileManager { + + public static String getFirstLine(String fileName) throws IncorrectFileNameException { + try (Scanner file = new Scanner(new File(fileName))) { + if (file.hasNextLine()) { + return file.nextLine(); + } else { + throw new IllegalArgumentException("Non readable file"); + } + } catch (FileNotFoundException err) { + if (!isCorrectFileName(fileName)) { + throw new IncorrectFileNameException("Incorrect filename : " + fileName, err); + } + // Logging etc + } catch (IllegalArgumentException err) { + if (!containsExtension(fileName)) { + throw new IncorrectFileExtensionException("Filename does not contain extension : " + fileName, err); + } + // Other error cases and logging + } + return "Default First Line"; + } + + private static boolean containsExtension(String fileName) { + if (fileName.contains(".txt") || fileName.contains(".doc")) + return true; + return false; + } + + private static boolean isCorrectFileName(String fileName) { + if (fileName.equals("wrongFileName.txt")) + return false; + else + return true; + } + +} diff --git a/core-java/src/main/java/com/baeldung/customexception/IncorrectFileExtensionException.java b/core-java/src/main/java/com/baeldung/customexception/IncorrectFileExtensionException.java new file mode 100644 index 0000000000..c6dc6d6964 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/customexception/IncorrectFileExtensionException.java @@ -0,0 +1,9 @@ +package com.baeldung.customexception; + +public class IncorrectFileExtensionException extends RuntimeException{ + private static final long serialVersionUID = 1L; + + public IncorrectFileExtensionException(String errorMessage, Throwable err) { + super(errorMessage, err); + } +} diff --git a/core-java/src/main/java/com/baeldung/customexception/IncorrectFileNameException.java b/core-java/src/main/java/com/baeldung/customexception/IncorrectFileNameException.java new file mode 100644 index 0000000000..a804cadb84 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/customexception/IncorrectFileNameException.java @@ -0,0 +1,9 @@ +package com.baeldung.customexception; + +public class IncorrectFileNameException extends Exception { + private static final long serialVersionUID = 1L; + + public IncorrectFileNameException(String errorMessage, Throwable err) { + super(errorMessage, err); + } +} diff --git a/core-java/src/test/java/com/baeldung/customexception/IncorrectFileExtensionExceptionUnitTest.java b/core-java/src/test/java/com/baeldung/customexception/IncorrectFileExtensionExceptionUnitTest.java new file mode 100644 index 0000000000..230698f719 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/customexception/IncorrectFileExtensionExceptionUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.customexception; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; + +import org.junit.Test; + +public class IncorrectFileExtensionExceptionUnitTest { + + @Test + public void testWhenCorrectFileExtensionGiven_ReceivesNoException() throws IncorrectFileNameException { + assertThat(FileManager.getFirstLine("correctFileNameWithProperExtension.txt")).isEqualTo("Default First Line"); + } + + @Test(expected = IncorrectFileExtensionException.class) + public void testWhenCorrectFileNameExceptionThrown_ReceivesNoException() throws IncorrectFileNameException { + StringBuffer sBuffer = new StringBuffer(); + sBuffer.append("src"); + sBuffer.append(File.separator); + sBuffer.append("test"); + sBuffer.append(File.separator); + sBuffer.append("resources"); + sBuffer.append(File.separator); + sBuffer.append("correctFileNameWithoutProperExtension"); + FileManager.getFirstLine(sBuffer.toString()); + } + +} diff --git a/core-java/src/test/java/com/baeldung/customexception/IncorrectFileNameExceptionUnitTest.java b/core-java/src/test/java/com/baeldung/customexception/IncorrectFileNameExceptionUnitTest.java new file mode 100644 index 0000000000..acb05eb763 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/customexception/IncorrectFileNameExceptionUnitTest.java @@ -0,0 +1,19 @@ +package com.baeldung.customexception; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +public class IncorrectFileNameExceptionUnitTest { + + @Test(expected = IncorrectFileNameException.class) + public void testWhenIncorrectFileNameExceptionThrown_ReceivesIncorrectFileNameException() throws IncorrectFileNameException { + FileManager.getFirstLine("wrongFileName.txt"); + } + + @Test + public void testWhenCorrectFileNameExceptionThrown_ReceivesNoException() throws IncorrectFileNameException { + assertThat(FileManager.getFirstLine("correctFileName.txt")).isEqualTo("Default First Line"); + } + +} diff --git a/core-java/src/test/resources/correctFileNameWithoutProperExtension b/core-java/src/test/resources/correctFileNameWithoutProperExtension new file mode 100644 index 0000000000..e69de29bb2 From 5d2d79308e4f51d15dcec717ff215a24adf9910a Mon Sep 17 00:00:00 2001 From: mherbaghinyan Date: Thu, 28 Jun 2018 00:42:55 +0400 Subject: [PATCH 40/82] GWT app new branch --- google-web-toolkit/pom.xml | 116 ++++++++++++++++++ .../com/baeldung/Google_web_toolkit.gwt.xml | 31 +++++ .../baeldung/client/Google_web_toolkit.java | 108 ++++++++++++++++ .../baeldung/server/MessageServiceImpl.java | 22 ++++ .../com/baeldung/shared/MessageService.java | 12 ++ .../baeldung/shared/MessageServiceAsync.java | 10 ++ .../src/main/webapp/Google_web_toolkit.css | 31 +++++ .../src/main/webapp/Google_web_toolkit.html | 35 ++++++ .../src/main/webapp/WEB-INF/web.xml | 24 ++++ .../src/main/webapp/favicon.ico | Bin 0 -> 1082 bytes pom.xml | 1 + 11 files changed, 390 insertions(+) create mode 100644 google-web-toolkit/pom.xml create mode 100644 google-web-toolkit/src/main/java/com/baeldung/Google_web_toolkit.gwt.xml create mode 100644 google-web-toolkit/src/main/java/com/baeldung/client/Google_web_toolkit.java create mode 100644 google-web-toolkit/src/main/java/com/baeldung/server/MessageServiceImpl.java create mode 100644 google-web-toolkit/src/main/java/com/baeldung/shared/MessageService.java create mode 100644 google-web-toolkit/src/main/java/com/baeldung/shared/MessageServiceAsync.java create mode 100644 google-web-toolkit/src/main/webapp/Google_web_toolkit.css create mode 100644 google-web-toolkit/src/main/webapp/Google_web_toolkit.html create mode 100644 google-web-toolkit/src/main/webapp/WEB-INF/web.xml create mode 100644 google-web-toolkit/src/main/webapp/favicon.ico diff --git a/google-web-toolkit/pom.xml b/google-web-toolkit/pom.xml new file mode 100644 index 0000000000..d96a589e32 --- /dev/null +++ b/google-web-toolkit/pom.xml @@ -0,0 +1,116 @@ + + + + + 4.0.0 + com.baeldung + google_web_toolkit + war + 1.0-SNAPSHOT + com.baeldung.Google_web_toolkit + + + + + 1.8 + 1.8 + + + UTF-8 + UTF-8 + + + + + + + com.google.gwt + gwt + 2.8.2 + pom + import + + + + + + + com.google.gwt + gwt-servlet + runtime + + + com.google.gwt + gwt-user + provided + + + com.google.gwt + gwt-dev + provided + + + junit + junit + 4.11 + test + + + + + + ${project.build.directory}/${project.build.finalName}/WEB-INF/classes + + + + + + net.ltgt.gwt.maven + gwt-maven-plugin + 1.0-rc-8 + + + + compile + test + + + + + com.baeldung.Google_web_toolkit + Google_web_toolkit + true + + 1.8 + + + + -compileReport + -XcompilerMetrics + + + ${project.build.directory}/${project.build.finalName} + compile+runtime + + + Google_web_toolkit.html + + + + + + + maven-surefire-plugin + 2.17 + + true + + + + + + diff --git a/google-web-toolkit/src/main/java/com/baeldung/Google_web_toolkit.gwt.xml b/google-web-toolkit/src/main/java/com/baeldung/Google_web_toolkit.gwt.xml new file mode 100644 index 0000000000..1d8ca819d9 --- /dev/null +++ b/google-web-toolkit/src/main/java/com/baeldung/Google_web_toolkit.gwt.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/google-web-toolkit/src/main/java/com/baeldung/client/Google_web_toolkit.java b/google-web-toolkit/src/main/java/com/baeldung/client/Google_web_toolkit.java new file mode 100644 index 0000000000..ae0ae7da38 --- /dev/null +++ b/google-web-toolkit/src/main/java/com/baeldung/client/Google_web_toolkit.java @@ -0,0 +1,108 @@ +package com.baeldung.client; + +import com.baeldung.shared.MessageService; +import com.baeldung.shared.MessageServiceAsync; +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.event.dom.client.KeyUpEvent; +import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.DialogBox; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.RootPanel; +import com.google.gwt.user.client.ui.TextBox; +import com.google.gwt.user.client.ui.VerticalPanel; + +/** + * Entry point classes define onModuleLoad(). + */ +public class Google_web_toolkit implements EntryPoint { + private final MessageServiceAsync messageServiceAsync = GWT.create(MessageService.class); + + public void onModuleLoad() { + Button sendButton = new Button("Submit"); + TextBox nameField = new TextBox(); + nameField.setText("Hi there"); + + Label warningLabel = new Label(); + + sendButton.addStyleName("sendButton"); + + RootPanel.get("nameFieldContainer").add(nameField); + RootPanel.get("sendButtonContainer").add(sendButton); + RootPanel.get("errorLabelContainer").add(warningLabel); + + Button closeButton = new Button("Thanks"); + closeButton.getElement().setId("closeButton"); + + Label textToServerLabel = new Label(); + HTML serverResponseLabel = new HTML(); + VerticalPanel vPanel = new VerticalPanel(); + vPanel.addStyleName("vPanel"); + vPanel.add(new HTML("Sending message to the server:")); + vPanel.add(textToServerLabel); + vPanel.add(new HTML("
Server replies:")); + vPanel.add(serverResponseLabel); + vPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT); + vPanel.add(closeButton); + vPanel.setVisible(false); + RootPanel.get("serverResponseContainer").add(vPanel); + + closeButton.addClickHandler(event -> { + sendButton.setEnabled(true); + sendButton.setFocus(true); + vPanel.setVisible(false); + }); + + class MyHandler implements ClickHandler, KeyUpHandler { + + public void onClick(ClickEvent event) { + sendMessageToServer(); + } + + public void onKeyUp(KeyUpEvent event) { + if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { + sendMessageToServer(); + } + } + + private void sendMessageToServer() { + + warningLabel.setText(""); + String textToServer = nameField.getText(); + if (textToServer == null || textToServer.isEmpty()) { + warningLabel.setText("Please enter the message"); + return; + } + + sendButton.setEnabled(false); + textToServerLabel.setText(textToServer); + serverResponseLabel.setText(""); + messageServiceAsync.sendMessage(textToServer, new AsyncCallback() { + public void onFailure(Throwable caught) { + serverResponseLabel.addStyleName("serverResponseLabelError"); + serverResponseLabel.setHTML("server error occurred"); + closeButton.setFocus(true); + } + + public void onSuccess(String result) { + serverResponseLabel.removeStyleName("serverResponseLabelError"); + serverResponseLabel.setHTML(result); + closeButton.setFocus(true); + vPanel.setVisible(true); + } + }); + } + } + + // Add a handler to send the name to the server + MyHandler handler = new MyHandler(); + sendButton.addClickHandler(handler); + nameField.addKeyUpHandler(handler); + } +} diff --git a/google-web-toolkit/src/main/java/com/baeldung/server/MessageServiceImpl.java b/google-web-toolkit/src/main/java/com/baeldung/server/MessageServiceImpl.java new file mode 100644 index 0000000000..41e2a4725c --- /dev/null +++ b/google-web-toolkit/src/main/java/com/baeldung/server/MessageServiceImpl.java @@ -0,0 +1,22 @@ +package com.baeldung.server; + +import com.baeldung.shared.MessageService; +import com.google.gwt.user.server.rpc.RemoteServiceServlet; + +import java.time.LocalDateTime; + +/** + * The server-side implementation of the RPC service. + */ +@SuppressWarnings("serial") +public class MessageServiceImpl extends RemoteServiceServlet implements MessageService { + + public String sendMessage(String message) throws IllegalArgumentException { + if (message == null) { + throw new IllegalArgumentException("message is null"); + } + + return "Hello, " + message + "!

Time received: " + LocalDateTime.now(); + } + +} diff --git a/google-web-toolkit/src/main/java/com/baeldung/shared/MessageService.java b/google-web-toolkit/src/main/java/com/baeldung/shared/MessageService.java new file mode 100644 index 0000000000..2c74a5c00d --- /dev/null +++ b/google-web-toolkit/src/main/java/com/baeldung/shared/MessageService.java @@ -0,0 +1,12 @@ +package com.baeldung.shared; + +import com.google.gwt.user.client.rpc.RemoteService; +import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; + +/** + * The client-side stub for the RPC service. + */ +@RemoteServiceRelativePath("greet") +public interface MessageService extends RemoteService { + String sendMessage(String message) throws IllegalArgumentException; +} diff --git a/google-web-toolkit/src/main/java/com/baeldung/shared/MessageServiceAsync.java b/google-web-toolkit/src/main/java/com/baeldung/shared/MessageServiceAsync.java new file mode 100644 index 0000000000..49d4a29b7b --- /dev/null +++ b/google-web-toolkit/src/main/java/com/baeldung/shared/MessageServiceAsync.java @@ -0,0 +1,10 @@ +package com.baeldung.shared; + +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * The async counterpart of MessageService. + */ +public interface MessageServiceAsync { + void sendMessage(String input, AsyncCallback callback) throws IllegalArgumentException; +} diff --git a/google-web-toolkit/src/main/webapp/Google_web_toolkit.css b/google-web-toolkit/src/main/webapp/Google_web_toolkit.css new file mode 100644 index 0000000000..b02f219589 --- /dev/null +++ b/google-web-toolkit/src/main/webapp/Google_web_toolkit.css @@ -0,0 +1,31 @@ +/** Add css rules here for your application. */ +h1 { + font-size: 2em; + font-weight: bold; + color: #777777; + margin: 40px 0px 70px; + text-align: center; +} + +.sendButton { + display: block; + font-size: 16pt; +} + +/** Most GWT widgets already have a style name defined */ +.gwt-DialogBox { + width: 400px; +} + +.vPanel { + margin: 5px; +} + +.serverResponseLabelError { + color: red; +} + +/** Set ids using widget.getElement().setId("idOfElement") */ +#closeButton { + margin: 15px 6px 6px; +} \ No newline at end of file diff --git a/google-web-toolkit/src/main/webapp/Google_web_toolkit.html b/google-web-toolkit/src/main/webapp/Google_web_toolkit.html new file mode 100644 index 0000000000..20bba68eff --- /dev/null +++ b/google-web-toolkit/src/main/webapp/Google_web_toolkit.html @@ -0,0 +1,35 @@ + + + + + + + + + + + + Sample GWT Application + + + + + +

Sample GWT Application

+ + + + + + + + + + + + + + +
Please enter your message:
+ + \ No newline at end of file diff --git a/google-web-toolkit/src/main/webapp/WEB-INF/web.xml b/google-web-toolkit/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..820d3d9916 --- /dev/null +++ b/google-web-toolkit/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + + + greetServlet + com.baeldung.server.MessageServiceImpl + + + + greetServlet + /google_web_toolkit/greet + + + + + Google_web_toolkit.html + + + diff --git a/google-web-toolkit/src/main/webapp/favicon.ico b/google-web-toolkit/src/main/webapp/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..858a707523f540b16b6bd2cd79d8e870e5be524e GIT binary patch literal 1082 zcmZ`%ZETZO6uxD(Y;;{a>DsOByS{zfwcXaP?KZm7ZL*C*$bz2`oQXsMV+;XBQWYWr zYPJc6iP}IxBVpqQ{7{GsCSoK&zqdJ}*@R%GfJNp6J26{7Sl7o}lPdi1+&uT3oR8<6 zb8`vd(IXKPdb32wCqzaFF;Ykmn-B47&A#g@=I{@kviGeTm7B8>BFG2x znvr(r&4;vx+4o87i{n`_doHasp1I3#$0pRw!NdB>cUIZNPvu5=NEoSyFw&lXd~E5? zS2&j+jhmBLP#(r2HUtUx4djL|AuJoXD_G2F>pSGS3Nf=cL+sl+FyDB6W8y76rG3697TyP3Ylpb+NM$PRZ*1cFF~W& z_c>=hF}blXfooG4)OUVI>jEJ15J<^I_#@L;SQ(}}1t4Jj;FSmPh$?_$?GQ>00cg}8 zd~0bwnf@aU3||GLRo_FT8HJF$i~>~{o7_KQ#dBj2RfQp^GpyNkmBykFaUn=+!{Bs> z;--dUzuulo!{bSzu`Y$ymJ}Ks@oaTN3@XzVtl980R&`y&lP~;)Uhgju>LTbjMc8pct~ zjzVrc2X%SR2_D%Z=92?1MXC3-D)sRr?T+plr+GCRYKM}}`q-?)GCNaWoygjZXJO#( zz-FF+$r72@>iZK4;hXjc|01>d&p*@F-`-dewVT(Su^P93Z87*F4$DU~%k7mcFN5b%ULc)s3%Ms*f*gs@bMx qKWr^5TrSP^$>&dkkc&AiBV_MF>di6z%a+gjPv4-iKWScu=Kl?kF{Cg6 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 78e0fa925e..bda4a760db 100644 --- a/pom.xml +++ b/pom.xml @@ -51,6 +51,7 @@ geotools testing-modules/groovy-spock google-cloud + google_web_toolkit gson guava guava-modules/guava-18 From 52b1f322ef22fcba2976a5f2d3f301a5439ea890 Mon Sep 17 00:00:00 2001 From: mherbaghinyan Date: Thu, 28 Jun 2018 00:55:48 +0400 Subject: [PATCH 41/82] GWT app new branch --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2076fbcff0..4d3ea91ad2 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ geotools testing-modules/groovy-spock google-cloud - google_web_toolkit + google-web-toolkit gson guava guava-modules/guava-18 From 0c1cee1a0bfee2dd369e3b5257e6c6633aaf6654 Mon Sep 17 00:00:00 2001 From: Priyesh Mashelkar Date: Fri, 29 Jun 2018 01:16:37 +0100 Subject: [PATCH 42/82] Please enter the commit message for your changes. Lines starting Added test classes for article --- .../java/org/baeldung/MockAnnotationTest.java | 33 +++++++++++++++++++ .../MockBeanAnnotationIntegrationTest.java | 31 +++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 spring-boot/src/test/java/org/baeldung/MockAnnotationTest.java create mode 100644 spring-boot/src/test/java/org/baeldung/MockBeanAnnotationIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/MockAnnotationTest.java b/spring-boot/src/test/java/org/baeldung/MockAnnotationTest.java new file mode 100644 index 0000000000..a70b31177f --- /dev/null +++ b/spring-boot/src/test/java/org/baeldung/MockAnnotationTest.java @@ -0,0 +1,33 @@ +package org.baeldung; + +import org.baeldung.repository.UserRepository; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class MockAnnotationTest { + + @Mock + UserRepository mockRepository; + + @Test + public void testMockAnnotation() { + Mockito.when(mockRepository.count()).thenReturn(123L); + long userCount = mockRepository.count(); + Assert.assertEquals(123L, userCount); + Mockito.verify(mockRepository).count(); + } + + @Test + public void testMockitoMockMethod() { + UserRepository localMockRepository = Mockito.mock(UserRepository.class); + Mockito.when(localMockRepository.count()).thenReturn(111L); + long userCount = localMockRepository.count(); + Assert.assertEquals(111L, userCount); + Mockito.verify(localMockRepository).count(); + } +} diff --git a/spring-boot/src/test/java/org/baeldung/MockBeanAnnotationIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/MockBeanAnnotationIntegrationTest.java new file mode 100644 index 0000000000..0c93004a49 --- /dev/null +++ b/spring-boot/src/test/java/org/baeldung/MockBeanAnnotationIntegrationTest.java @@ -0,0 +1,31 @@ +package org.baeldung; + +import org.baeldung.repository.UserRepository; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.junit4.SpringRunner; + + +@RunWith(SpringRunner.class) +public class MockBeanAnnotationIntegrationTest { + + @MockBean + UserRepository mockRepository; + + @Autowired + ApplicationContext context; + + @Test + public void testMockBean() { + Mockito.when(mockRepository.count()).thenReturn(123L); + UserRepository userRepoFromContext = context.getBean(UserRepository.class); + long userCount = userRepoFromContext.count(); + Assert.assertEquals(123L, userCount); + Mockito.verify(mockRepository).count(); + } +} From b741e4e6487eecadad9a59d085509504b00e8a54 Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Thu, 24 May 2018 13:15:52 +0100 Subject: [PATCH 43/82] Added model class --- .../com/baeldung/reactive/model/Stock.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java new file mode 100644 index 0000000000..6743de064e --- /dev/null +++ b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java @@ -0,0 +1,32 @@ +package com.baeldung.reactive.model; + +import java.math.BigDecimal; + +public class Stock { + + private String code; + + private BigDecimal price; + + public Stock(String code, BigDecimal price) { + this.code = code; + this.price = price; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + +} From 6656f45f0d08925b92f0269d1de667104ada9ee8 Mon Sep 17 00:00:00 2001 From: Andrea Ligios Date: Sat, 30 Jun 2018 04:43:22 +0200 Subject: [PATCH 44/82] BAEL-1783 (#4545) * BAEL-1783 * tabs to spaces, artifact id renamed * tabs to spaces * Added module spring-boot-logging-log4j2 * Removed node * @GetMapping instead of the older @RequestMapping * @GetMapping instead of the older @RequestMapping --- pom.xml | 1 + spring-boot-logging-log4j2/.gitignore | 29 ++++++++++ spring-boot-logging-log4j2/pom.xml | 58 +++++++++++++++++++ .../springbootlogging/LoggingController.java | 37 ++++++++++++ .../SpringBootLoggingApplication.java | 12 ++++ .../src/main/resources/application.properties | 0 .../src/main/resources/log4j2-spring.xml | 38 ++++++++++++ .../springbootmvc/LoggingController.java | 23 ++++++++ 8 files changed, 198 insertions(+) create mode 100644 spring-boot-logging-log4j2/.gitignore create mode 100644 spring-boot-logging-log4j2/pom.xml create mode 100644 spring-boot-logging-log4j2/src/main/java/com/baeldung/springbootlogging/LoggingController.java create mode 100644 spring-boot-logging-log4j2/src/main/java/com/baeldung/springbootlogging/SpringBootLoggingApplication.java create mode 100644 spring-boot-logging-log4j2/src/main/resources/application.properties create mode 100644 spring-boot-logging-log4j2/src/main/resources/log4j2-spring.xml create mode 100644 spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoggingController.java diff --git a/pom.xml b/pom.xml index e1b85e27c0..45421969ec 100644 --- a/pom.xml +++ b/pom.xml @@ -147,6 +147,7 @@ spring-boot-ops spring-boot-security spring-boot-mvc + spring-boot-logging-log4j2 spring-cloud-data-flow spring-cloud spring-core diff --git a/spring-boot-logging-log4j2/.gitignore b/spring-boot-logging-log4j2/.gitignore new file mode 100644 index 0000000000..d129c74ec9 --- /dev/null +++ b/spring-boot-logging-log4j2/.gitignore @@ -0,0 +1,29 @@ +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/logs/ +/bin/ +/mvnw +/mvnw.cmd diff --git a/spring-boot-logging-log4j2/pom.xml b/spring-boot-logging-log4j2/pom.xml new file mode 100644 index 0000000000..c07c157eee --- /dev/null +++ b/spring-boot-logging-log4j2/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + com.baeldung + spring-boot-logging-log4j2 + 0.0.1-SNAPSHOT + jar + Demo project for Spring Boot Logging with Log4J2 + + + org.springframework.boot + spring-boot-starter-parent + 2.0.3.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/spring-boot-logging-log4j2/src/main/java/com/baeldung/springbootlogging/LoggingController.java b/spring-boot-logging-log4j2/src/main/java/com/baeldung/springbootlogging/LoggingController.java new file mode 100644 index 0000000000..07763c8c3b --- /dev/null +++ b/spring-boot-logging-log4j2/src/main/java/com/baeldung/springbootlogging/LoggingController.java @@ -0,0 +1,37 @@ +package com.baeldung.springbootlogging; + +import org.apache.logging.log4j.LogManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class LoggingController { + + private final static Logger logger = LoggerFactory.getLogger(LoggingController.class); + + @GetMapping("/") + public String index() { + logger.trace("A TRACE Message"); + logger.debug("A DEBUG Message"); + logger.info("An INFO Message"); + logger.warn("A WARN Message"); + logger.error("An ERROR Message"); + + return "Howdy! Check out the Logs to see the output..."; + } + + private static final org.apache.logging.log4j.Logger loggerNative = LogManager.getLogger(LoggingController.class); + + @GetMapping("/native") + public String nativeLogging() { + loggerNative.trace("This TRACE message has been printed by Log4j2 without passing through SLF4J"); + loggerNative.debug("This DEBUG message has been printed by Log4j2 without passing through SLF4J"); + loggerNative.info("This INFO message has been printed by Log4j2 without passing through SLF4J"); + loggerNative.warn("This WARN message been printed by Log4j2 without passing through SLF4J"); + loggerNative.error("This ERROR message been printed by Log4j2 without passing through SLF4J"); + loggerNative.fatal("This FATAL message been printed by Log4j2 without passing through SLF4J"); + return "Howdy! Check out the Logs to see the output printed directly throguh Log4j2..."; + } +} diff --git a/spring-boot-logging-log4j2/src/main/java/com/baeldung/springbootlogging/SpringBootLoggingApplication.java b/spring-boot-logging-log4j2/src/main/java/com/baeldung/springbootlogging/SpringBootLoggingApplication.java new file mode 100644 index 0000000000..336997a81e --- /dev/null +++ b/spring-boot-logging-log4j2/src/main/java/com/baeldung/springbootlogging/SpringBootLoggingApplication.java @@ -0,0 +1,12 @@ +package com.baeldung.springbootlogging; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootLoggingApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringBootLoggingApplication.class, args); + } +} diff --git a/spring-boot-logging-log4j2/src/main/resources/application.properties b/spring-boot-logging-log4j2/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-boot-logging-log4j2/src/main/resources/log4j2-spring.xml b/spring-boot-logging-log4j2/src/main/resources/log4j2-spring.xml new file mode 100644 index 0000000000..b08cd2d22d --- /dev/null +++ b/spring-boot-logging-log4j2/src/main/resources/log4j2-spring.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + %d %p %C{1.} [%t] %m%n + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoggingController.java b/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoggingController.java new file mode 100644 index 0000000000..819ee589fe --- /dev/null +++ b/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoggingController.java @@ -0,0 +1,23 @@ +package com.baeldung.springbootmvc; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class LoggingController { + + Logger logger = LoggerFactory.getLogger(LoggingController.class); + + @GetMapping("/") + public String index() { + logger.trace("A TRACE Message"); + logger.debug("A DEBUG Message"); + logger.info("An INFO Message"); + logger.warn("A WARN Message"); + logger.error("An ERROR Message"); + + return "Howdy! Check out the Logs to see the output..."; + } +} From c66845c60126f7413ebce96a2ab1311c4f53808c Mon Sep 17 00:00:00 2001 From: psevestre Date: Sat, 30 Jun 2018 00:21:08 -0300 Subject: [PATCH 45/82] BAEL-1474 take2 - Code cleanup (#4585) * BAEL-1474 Take2 * Remove extra code --- .../amqp/SpringWebfluxAmqpApplication.java | 255 ------------------ 1 file changed, 255 deletions(-) diff --git a/spring-webflux-amqp/src/main/java/org/baeldung/spring/amqp/SpringWebfluxAmqpApplication.java b/spring-webflux-amqp/src/main/java/org/baeldung/spring/amqp/SpringWebfluxAmqpApplication.java index eb3b858ddc..30614e7ee6 100755 --- a/spring-webflux-amqp/src/main/java/org/baeldung/spring/amqp/SpringWebfluxAmqpApplication.java +++ b/spring-webflux-amqp/src/main/java/org/baeldung/spring/amqp/SpringWebfluxAmqpApplication.java @@ -1,270 +1,15 @@ package org.baeldung.spring.amqp; -import java.util.stream.Stream; - -import org.baeldung.spring.amqp.DestinationsConfig.DestinationInfo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.amqp.AmqpException; -import org.springframework.amqp.core.AmqpAdmin; -import org.springframework.amqp.core.AmqpTemplate; -import org.springframework.amqp.core.Binding; -import org.springframework.amqp.core.BindingBuilder; -import org.springframework.amqp.core.Exchange; -import org.springframework.amqp.core.ExchangeBuilder; -import org.springframework.amqp.core.Queue; -import org.springframework.amqp.core.QueueBuilder; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; -import reactor.core.scheduler.Schedulers; @SpringBootApplication @EnableConfigurationProperties(DestinationsConfig.class) -@RestController public class SpringWebfluxAmqpApplication { - private static Logger log = LoggerFactory.getLogger(SpringWebfluxAmqpApplication.class); - - @Autowired - private AmqpTemplate amqpTemplate; - - @Autowired - private AmqpAdmin amqpAdmin; - - @Autowired - private DestinationsConfig destinationsConfig; - - public static void main(String[] args) { SpringApplication.run(SpringWebfluxAmqpApplication.class, args); } - - @Bean - public CommandLineRunner setupQueueDestinations(AmqpAdmin amqpAdmin,DestinationsConfig destinationsConfig) { - - return (args) -> { - - log.info("[I48] Creating Destinations..."); - - destinationsConfig.getQueues() - .forEach((key, destination) -> { - - log.info("[I54] Creating directExchange: key={}, name={}, routingKey={}", key, destination.getExchange(), destination.getRoutingKey()); - - Exchange ex = ExchangeBuilder - .directExchange(destination.getExchange()) - .durable(true) - .build(); - - amqpAdmin.declareExchange(ex); - - Queue q = QueueBuilder - .durable(destination.getRoutingKey()) - .build(); - - amqpAdmin.declareQueue(q); - - Binding b = BindingBuilder.bind(q) - .to(ex) - .with(destination.getRoutingKey()) - .noargs(); - amqpAdmin.declareBinding(b); - - log.info("[I70] Binding successfully created."); - - }); - - }; - - } - - @Bean - public CommandLineRunner setupTopicDestinations(AmqpAdmin amqpAdmin, DestinationsConfig destinationsConfig) { - - return (args) -> { - - // For topic each consumer will have its own Queue, so no binding - destinationsConfig.getTopics() - .forEach((key, destination) -> { - - log.info("[I98] Creating TopicExchange: name={}, exchange={}", key, destination.getExchange()); - - Exchange ex = ExchangeBuilder.topicExchange(destination.getExchange()) - .durable(true) - .build(); - - amqpAdmin.declareExchange(ex); - - log.info("[I107] Topic Exchange successfully created."); - - }); - }; - } - - @PostMapping(value = "/queue/{name}") - public Mono> sendMessageToQueue(@PathVariable String name, @RequestBody String payload) { - - // Lookup exchange details - final DestinationInfo d = destinationsConfig.getQueues() - .get(name); - if (d == null) { - // Destination not found. - return Mono.just(ResponseEntity.notFound().build()); - } - - return Mono.fromCallable(() -> { - - log.info("[I51] sendMessageToQueue: queue={}, routingKey={}", d.getExchange(), d.getRoutingKey()); - amqpTemplate.convertAndSend(d.getExchange(), d.getRoutingKey(), payload); - - return ResponseEntity.accepted().build(); - - }); - - } - - - /** - * Receive messages for the given queue - * @param name - * @return - */ - @GetMapping(value = "/queue/{name}", produces = MediaType.TEXT_EVENT_STREAM_VALUE) - public Flux receiveMessagesFromQueue(@PathVariable String name) { - - final DestinationInfo d = destinationsConfig.getQueues().get(name); - - if (d == null) { - return Flux.just(ResponseEntity.notFound().build()); - } - - Stream s = Stream.generate(() -> { - String queueName = d.getRoutingKey(); - - log.info("[I137] Polling {}", queueName); - - Object payload = amqpTemplate.receiveAndConvert(queueName,5000); - if ( payload == null ) { - payload = "No news is good news..."; - } - - return payload.toString(); - }); - - - return Flux - .fromStream(s) - .subscribeOn(Schedulers.elastic()); - - } - - /** - * send message to a given topic - * @param name - * @param payload - * @return - */ - @PostMapping(value = "/topic/{name}") - public Mono> sendMessageToTopic(@PathVariable String name, @RequestBody String payload) { - - // Lookup exchange details - final DestinationInfo d = destinationsConfig.getTopics().get(name); - if (d == null) { - // Destination not found. - return Mono.just(ResponseEntity.notFound().build()); - } - - return Mono.fromCallable(() -> { - - log.info("[I51] sendMessageToTopic: topic={}, routingKey={}", d.getExchange(), d.getRoutingKey()); - amqpTemplate.convertAndSend(d.getExchange(), d.getRoutingKey(), payload); - - return ResponseEntity.accepted().build(); - - }); - } - - - @GetMapping(value = "/topic/{name}", produces = MediaType.TEXT_EVENT_STREAM_VALUE) - public Flux receiveMessagesFromTopic(@PathVariable String name) { - - DestinationInfo d = destinationsConfig.getTopics().get(name); - - if (d == null) { - return Flux.just(ResponseEntity.notFound().build()); - } - - final Queue topicQueue = createTopicQueue(d); - - Stream s = Stream.generate(() -> { - String queueName = topicQueue.getName(); - - log.info("[I137] Polling {}", queueName); - - try { - Object payload = amqpTemplate.receiveAndConvert(queueName,5000); - if ( payload == null ) { - payload = "No news is good news..."; - } - - return payload.toString(); - } - catch(AmqpException ex) { - log.warn("[W247] Received an AMQP Exception: {}", ex.getMessage()); - return null; - } - }); - - - return Flux.fromStream(s) - .doOnCancel(() -> { - log.info("[I250] doOnCancel()"); - amqpAdmin.deleteQueue(topicQueue.getName()); - }) - .subscribeOn(Schedulers.elastic()); - - - } - - - private Queue createTopicQueue(DestinationInfo destination) { - - Exchange ex = ExchangeBuilder.topicExchange(destination.getExchange()) - .durable(true) - .build(); - - amqpAdmin.declareExchange(ex); - - // Create a durable queue - Queue q = QueueBuilder - .durable() - .build(); - - amqpAdmin.declareQueue(q); - - Binding b = BindingBuilder.bind(q) - .to(ex) - .with(destination.getRoutingKey()) - .noargs(); - - amqpAdmin.declareBinding(b); - - return q; - } - } From 4e785fdc152de8601917a13bfe897ad3ec8f5426 Mon Sep 17 00:00:00 2001 From: IvanLjubicic Date: Sat, 30 Jun 2018 05:27:36 +0200 Subject: [PATCH 46/82] BAEL-1760 Console I/O in Java (#4379) * ivan.ljubicic.app.developer@gmail.com * Added unit tests, configuration class and minor adjustments * primefaces intro module added * deleted primefaces old module * deleted different bean injection types sample project * deleted addition different bean injection types file * Renaming archetype in web.xml * Added primefaces in jsf module * Primefaces improvements * Added commandButton and dialog * Added PFM * Code formatting * Update pom.xml * Formatting changes * ConsoleDemo initial version * Added new classes, renamed ConsoleDemo class * Removed System.in class, renamed Scanner class and reorganized * Added more method examples --- .../baeldung/console/ConsoleConsoleClass.java | 26 +++++++ .../baeldung/console/ConsoleScannerClass.java | 76 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/console/ConsoleConsoleClass.java create mode 100644 core-java/src/main/java/com/baeldung/console/ConsoleScannerClass.java diff --git a/core-java/src/main/java/com/baeldung/console/ConsoleConsoleClass.java b/core-java/src/main/java/com/baeldung/console/ConsoleConsoleClass.java new file mode 100644 index 0000000000..a5c704345f --- /dev/null +++ b/core-java/src/main/java/com/baeldung/console/ConsoleConsoleClass.java @@ -0,0 +1,26 @@ +package com.baeldung.console; + +import java.io.Console; + +public class ConsoleConsoleClass { + + public static void main(String[] args) { + Console console = System.console(); + + if (console == null) { + System.out.print("No console available"); + return; + } + + String progLanguauge = console.readLine("Enter your favourite programming language: "); + console.printf(progLanguauge + " is very interesting!"); + + char[] pass = console.readPassword("To finish, enter password: "); + + if ("BAELDUNG".equals(pass.toString().toUpperCase())) + console.printf("Good! Regards!"); + else + console.printf("Nice try. Regards."); + + } +} diff --git a/core-java/src/main/java/com/baeldung/console/ConsoleScannerClass.java b/core-java/src/main/java/com/baeldung/console/ConsoleScannerClass.java new file mode 100644 index 0000000000..7b7a7a4ade --- /dev/null +++ b/core-java/src/main/java/com/baeldung/console/ConsoleScannerClass.java @@ -0,0 +1,76 @@ +package com.baeldung.console; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Scanner; +import java.util.regex.Pattern; + +public class ConsoleScannerClass { + + public static void main(String[] args) { + System.out.println("Please enter your name and surname: "); + + Scanner scanner = new Scanner(System.in); + + String nameSurname = scanner.nextLine(); + + System.out.println("Please enter your gender: "); + + char gender = scanner.next().charAt(0); + + System.out.println("Please enter your age: "); + + int age = scanner.nextInt(); + + System.out.println("Please enter your height in meters: "); + + double height = scanner.nextDouble(); + + System.out.println(nameSurname + ", " + age + ", is a great " + (gender == 'm' ? "guy" : "girl") + " with " + height + " meters height" + " and " + (gender == 'm' ? "he" : "she") + " reads Baeldung."); + + System.out.print("Have a good"); + System.out.print(" one!"); + + System.out.println("\nPlease enter number of years of experience as a developer: "); + + BufferedReader buffReader = new BufferedReader(new InputStreamReader(System.in)); + + int i = 0; + + try { + i = Integer.parseInt(buffReader.readLine()); + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + System.out.println("You are a " + (i > 5 ? "great" : "good") + " developer!"); + + int sum = 0, count = 0; + + System.out.println("Please enter your college degrees. To finish, enter baeldung website url"); + + while (scanner.hasNextInt()) { + int nmbr = scanner.nextInt(); + sum += nmbr; + count++; + } + int mean = sum / count; + + System.out.println("Your average degree is " + mean); + + if (scanner.hasNext(Pattern.compile("www.baeldung.com"))) + System.out.println("Correct!"); + else + System.out.println("Baeldung website url is www.baeldung.com"); + + if (scanner != null) + scanner.close(); + + } + +} From f6f62ea0f59137c25c79908e4fc426f51fd8b0f8 Mon Sep 17 00:00:00 2001 From: markusgulden Date: Sat, 30 Jun 2018 05:49:16 +0200 Subject: [PATCH 47/82] BAEL-1727 (#4575) * Moved Lambda examples to separate module Implementation of API Gateway example * Format fixes * Format fixes * Minor fixes * Minor fixes * Minor fixes * Adding SAM templates for "Introduction to AWS Serverless Application Model" * Fixing formatting with spaces --- .../sam-templates/template-implicit.yaml | 75 ++++++ .../template-inline-swagger.yaml | 127 +++++++++++ .../lambda/apigateway/APIDemoHandler.java | 214 +++++++++--------- .../lambda/apigateway/model/Person.java | 94 ++++---- 4 files changed, 356 insertions(+), 154 deletions(-) create mode 100644 aws-lambda/sam-templates/template-implicit.yaml create mode 100644 aws-lambda/sam-templates/template-inline-swagger.yaml diff --git a/aws-lambda/sam-templates/template-implicit.yaml b/aws-lambda/sam-templates/template-implicit.yaml new file mode 100644 index 0000000000..73289b8bb1 --- /dev/null +++ b/aws-lambda/sam-templates/template-implicit.yaml @@ -0,0 +1,75 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: 'AWS::Serverless-2016-10-31' +Description: Baeldung Serverless Application Model Example with Implicit API Definition +Globals: + Api: + EndpointConfiguration: REGIONAL + Name: "TestAPI" +Resources: + PersonTable: + Type: AWS::Serverless::SimpleTable + Properties: + PrimaryKey: + Name: id + Type: Number + TableName: Person + StorePersonFunction: + Type: AWS::Serverless::Function + Properties: + Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleRequest + Runtime: java8 + Timeout: 15 + MemorySize: 512 + CodeUri: ../target/aws-lambda-0.1.0-SNAPSHOT.jar + Policies: + - DynamoDBCrudPolicy: + TableName: !Ref PersonTable + Environment: + Variables: + TABLE_NAME: !Ref PersonTable + Events: + StoreApi: + Type: Api + Properties: + Path: /persons + Method: PUT + GetPersonByPathParamFunction: + Type: AWS::Serverless::Function + Properties: + Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByPathParam + Runtime: java8 + Timeout: 15 + MemorySize: 512 + CodeUri: ../target/aws-lambda-0.1.0-SNAPSHOT.jar + Policies: + - DynamoDBReadPolicy: + TableName: !Ref PersonTable + Environment: + Variables: + TABLE_NAME: !Ref PersonTable + Events: + GetByPathApi: + Type: Api + Properties: + Path: /persons/{id} + Method: GET + GetPersonByQueryParamFunction: + Type: AWS::Serverless::Function + Properties: + Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByQueryParam + Runtime: java8 + Timeout: 15 + MemorySize: 512 + CodeUri: ../target/aws-lambda-0.1.0-SNAPSHOT.jar + Policies: + - DynamoDBReadPolicy: + TableName: !Ref PersonTable + Environment: + Variables: + TABLE_NAME: !Ref PersonTable + Events: + GetByQueryApi: + Type: Api + Properties: + Path: /persons + Method: GET \ No newline at end of file diff --git a/aws-lambda/sam-templates/template-inline-swagger.yaml b/aws-lambda/sam-templates/template-inline-swagger.yaml new file mode 100644 index 0000000000..f704d47c25 --- /dev/null +++ b/aws-lambda/sam-templates/template-inline-swagger.yaml @@ -0,0 +1,127 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: 'AWS::Serverless-2016-10-31' +Description: Baeldung Serverless Application Model Example with Inline Swagger API Definition +Resources: + PersonTable: + Type: AWS::Serverless::SimpleTable + Properties: + PrimaryKey: + Name: id + Type: Number + TableName: Person + StorePersonFunction: + Type: AWS::Serverless::Function + Properties: + Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleRequest + Runtime: java8 + Timeout: 15 + MemorySize: 512 + CodeUri: ../target/aws-lambda-0.1.0-SNAPSHOT.jar + Policies: + - DynamoDBCrudPolicy: + TableName: !Ref PersonTable + Environment: + Variables: + TABLE_NAME: !Ref PersonTable + Events: + StoreApi: + Type: Api + Properties: + Path: /persons + Method: PUT + RestApiId: + Ref: MyApi + GetPersonByPathParamFunction: + Type: AWS::Serverless::Function + Properties: + Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByPathParam + Runtime: java8 + Timeout: 15 + MemorySize: 512 + CodeUri: ../target/aws-lambda-0.1.0-SNAPSHOT.jar + Policies: + - DynamoDBReadPolicy: + TableName: !Ref PersonTable + Environment: + Variables: + TABLE_NAME: !Ref PersonTable + Events: + GetByPathApi: + Type: Api + Properties: + Path: /persons/{id} + Method: GET + RestApiId: + Ref: MyApi + GetPersonByQueryParamFunction: + Type: AWS::Serverless::Function + Properties: + Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByQueryParam + Runtime: java8 + Timeout: 15 + MemorySize: 512 + CodeUri: ../target/aws-lambda-0.1.0-SNAPSHOT.jar + Policies: + - DynamoDBReadPolicy: + TableName: !Ref PersonTable + Environment: + Variables: + TABLE_NAME: !Ref PersonTable + Events: + GetByQueryApi: + Type: Api + Properties: + Path: /persons + Method: GET + RestApiId: + Ref: MyApi + MyApi: + Type: AWS::Serverless::Api + Properties: + StageName: test + EndpointConfiguration: REGIONAL + DefinitionBody: + swagger: "2.0" + info: + title: "TestAPI" + paths: + /persons: + get: + parameters: + - name: "id" + in: "query" + required: true + type: "string" + x-amazon-apigateway-request-validator: "Validate query string parameters and\ + \ headers" + x-amazon-apigateway-integration: + uri: + Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetPersonByQueryParamFunction.Arn}/invocations + responses: {} + httpMethod: "POST" + type: "aws_proxy" + put: + x-amazon-apigateway-integration: + uri: + Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${StorePersonFunction.Arn}/invocations + responses: {} + httpMethod: "POST" + type: "aws_proxy" + /persons/{id}: + get: + parameters: + - name: "id" + in: "path" + required: true + type: "string" + responses: {} + x-amazon-apigateway-integration: + uri: + Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetPersonByPathParamFunction.Arn}/invocations + responses: {} + httpMethod: "POST" + type: "aws_proxy" + x-amazon-apigateway-request-validators: + Validate query string parameters and headers: + validateRequestParameters: true + validateRequestBody: false \ No newline at end of file diff --git a/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java b/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java index 328915c028..71889eaf1b 100644 --- a/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java +++ b/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java @@ -15,152 +15,152 @@ import java.io.*; public class APIDemoHandler implements RequestStreamHandler { - private JSONParser parser = new JSONParser(); - private static final String DYNAMODB_TABLE_NAME = System.getenv("TABLE_NAME"); + private JSONParser parser = new JSONParser(); + private static final String DYNAMODB_TABLE_NAME = System.getenv("TABLE_NAME"); - @Override - public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { + @Override + public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - JSONObject responseJson = new JSONObject(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + JSONObject responseJson = new JSONObject(); - AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient(); - DynamoDB dynamoDb = new DynamoDB(client); + AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient(); + DynamoDB dynamoDb = new DynamoDB(client); - try { - JSONObject event = (JSONObject) parser.parse(reader); + try { + JSONObject event = (JSONObject) parser.parse(reader); - if (event.get("body") != null) { + if (event.get("body") != null) { - Person person = new Person((String) event.get("body")); + Person person = new Person((String) event.get("body")); - dynamoDb.getTable(DYNAMODB_TABLE_NAME) - .putItem(new PutItemSpec().withItem(new Item().withNumber("id", person.getId()) - .withString("firstName", person.getFirstName()) - .withString("lastName", person.getLastName()).withNumber("age", person.getAge()) - .withString("address", person.getAddress()))); - } + dynamoDb.getTable(DYNAMODB_TABLE_NAME) + .putItem(new PutItemSpec().withItem(new Item().withNumber("id", person.getId()) + .withString("firstName", person.getFirstName()) + .withString("lastName", person.getLastName()).withNumber("age", person.getAge()) + .withString("address", person.getAddress()))); + } - JSONObject responseBody = new JSONObject(); - responseBody.put("message", "New item created"); + JSONObject responseBody = new JSONObject(); + responseBody.put("message", "New item created"); - JSONObject headerJson = new JSONObject(); - headerJson.put("x-custom-header", "my custom header value"); + JSONObject headerJson = new JSONObject(); + headerJson.put("x-custom-header", "my custom header value"); - responseJson.put("statusCode", 200); - responseJson.put("headers", headerJson); - responseJson.put("body", responseBody.toString()); + responseJson.put("statusCode", 200); + responseJson.put("headers", headerJson); + responseJson.put("body", responseBody.toString()); - } catch (ParseException pex) { - responseJson.put("statusCode", 400); - responseJson.put("exception", pex); - } + } catch (ParseException pex) { + responseJson.put("statusCode", 400); + responseJson.put("exception", pex); + } - OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); - writer.write(responseJson.toString()); - writer.close(); - } + OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); + writer.write(responseJson.toString()); + writer.close(); + } - public void handleGetByPathParam(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { + public void handleGetByPathParam(InputStream inputStream, OutputStream outputStream, Context context) + throws IOException { - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - JSONObject responseJson = new JSONObject(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + JSONObject responseJson = new JSONObject(); - AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient(); - DynamoDB dynamoDb = new DynamoDB(client); + AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient(); + DynamoDB dynamoDb = new DynamoDB(client); - Item result = null; - try { - JSONObject event = (JSONObject) parser.parse(reader); - JSONObject responseBody = new JSONObject(); + Item result = null; + try { + JSONObject event = (JSONObject) parser.parse(reader); + JSONObject responseBody = new JSONObject(); - if (event.get("pathParameters") != null) { + if (event.get("pathParameters") != null) { - JSONObject pps = (JSONObject) event.get("pathParameters"); - if (pps.get("id") != null) { + JSONObject pps = (JSONObject) event.get("pathParameters"); + if (pps.get("id") != null) { - int id = Integer.parseInt((String) pps.get("id")); - result = dynamoDb.getTable(DYNAMODB_TABLE_NAME).getItem("id", id); - } + int id = Integer.parseInt((String) pps.get("id")); + result = dynamoDb.getTable(DYNAMODB_TABLE_NAME).getItem("id", id); + } - } - if (result != null) { + } + if (result != null) { - Person person = new Person(result.toJSON()); - responseBody.put("Person", person); - responseJson.put("statusCode", 200); - } else { + Person person = new Person(result.toJSON()); + responseBody.put("Person", person); + responseJson.put("statusCode", 200); + } else { - responseBody.put("message", "No item found"); - responseJson.put("statusCode", 404); - } + responseBody.put("message", "No item found"); + responseJson.put("statusCode", 404); + } - JSONObject headerJson = new JSONObject(); - headerJson.put("x-custom-header", "my custom header value"); + JSONObject headerJson = new JSONObject(); + headerJson.put("x-custom-header", "my custom header value"); - responseJson.put("headers", headerJson); - responseJson.put("body", responseBody.toString()); + responseJson.put("headers", headerJson); + responseJson.put("body", responseBody.toString()); - } catch (ParseException pex) { - responseJson.put("statusCode", 400); - responseJson.put("exception", pex); - } + } catch (ParseException pex) { + responseJson.put("statusCode", 400); + responseJson.put("exception", pex); + } - OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); - writer.write(responseJson.toString()); - writer.close(); - } + OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); + writer.write(responseJson.toString()); + writer.close(); + } - public void handleGetByQueryParam(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { + public void handleGetByQueryParam(InputStream inputStream, OutputStream outputStream, Context context) + throws IOException { - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - JSONObject responseJson = new JSONObject(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + JSONObject responseJson = new JSONObject(); - AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient(); - DynamoDB dynamoDb = new DynamoDB(client); + AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient(); + DynamoDB dynamoDb = new DynamoDB(client); - Item result = null; - try { - JSONObject event = (JSONObject) parser.parse(reader); - JSONObject responseBody = new JSONObject(); + Item result = null; + try { + JSONObject event = (JSONObject) parser.parse(reader); + JSONObject responseBody = new JSONObject(); - if (event.get("queryStringParameters") != null) { + if (event.get("queryStringParameters") != null) { - JSONObject qps = (JSONObject) event.get("queryStringParameters"); - if (qps.get("id") != null) { + JSONObject qps = (JSONObject) event.get("queryStringParameters"); + if (qps.get("id") != null) { - int id = Integer.parseInt((String) qps.get("id")); - result = dynamoDb.getTable(DYNAMODB_TABLE_NAME).getItem("id", id); - } - } + int id = Integer.parseInt((String) qps.get("id")); + result = dynamoDb.getTable(DYNAMODB_TABLE_NAME).getItem("id", id); + } + } - if (result != null) { + if (result != null) { - Person person = new Person(result.toJSON()); - responseBody.put("Person", person); - responseJson.put("statusCode", 200); - } else { + Person person = new Person(result.toJSON()); + responseBody.put("Person", person); + responseJson.put("statusCode", 200); + } else { - responseBody.put("message", "No item found"); - responseJson.put("statusCode", 404); - } + responseBody.put("message", "No item found"); + responseJson.put("statusCode", 404); + } - JSONObject headerJson = new JSONObject(); - headerJson.put("x-custom-header", "my custom header value"); + JSONObject headerJson = new JSONObject(); + headerJson.put("x-custom-header", "my custom header value"); - responseJson.put("headers", headerJson); - responseJson.put("body", responseBody.toString()); + responseJson.put("headers", headerJson); + responseJson.put("body", responseBody.toString()); - } catch (ParseException pex) { - responseJson.put("statusCode", 400); - responseJson.put("exception", pex); - } + } catch (ParseException pex) { + responseJson.put("statusCode", 400); + responseJson.put("exception", pex); + } - OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); - writer.write(responseJson.toString()); - writer.close(); - } + OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); + writer.write(responseJson.toString()); + writer.close(); + } } diff --git a/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java b/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java index 3be7b261cd..df00994651 100644 --- a/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java +++ b/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java @@ -5,64 +5,64 @@ import com.google.gson.GsonBuilder; public class Person { - private int id; - private String firstName; - private String lastName; - private int age; - private String address; + private int id; + private String firstName; + private String lastName; + private int age; + private String address; - public Person(String json) { - Gson gson = new Gson(); - Person request = gson.fromJson(json, Person.class); - this.id = request.getId(); - this.firstName = request.getFirstName(); - this.lastName = request.getLastName(); - this.age = request.getAge(); - this.address = request.getAddress(); - } + public Person(String json) { + Gson gson = new Gson(); + Person request = gson.fromJson(json, Person.class); + this.id = request.getId(); + this.firstName = request.getFirstName(); + this.lastName = request.getLastName(); + this.age = request.getAge(); + this.address = request.getAddress(); + } - public String toString() { - final Gson gson = new GsonBuilder().setPrettyPrinting().create(); - return gson.toJson(this); - } + public String toString() { + final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + return gson.toJson(this); + } - public int getId() { - return id; - } + public int getId() { + return id; + } - public void setId(int id) { - this.id = id; - } + public void setId(int id) { + this.id = id; + } - public String getFirstName() { - return firstName; - } + public String getFirstName() { + return firstName; + } - public void setFirstName(String firstName) { - this.firstName = firstName; - } + public void setFirstName(String firstName) { + this.firstName = firstName; + } - public String getLastName() { - return lastName; - } + public String getLastName() { + return lastName; + } - public void setLastName(String lastName) { - this.lastName = lastName; - } + public void setLastName(String lastName) { + this.lastName = lastName; + } - public int getAge() { - return age; - } + public int getAge() { + return age; + } - public void setAge(int age) { - this.age = age; - } + public void setAge(int age) { + this.age = age; + } - public String getAddress() { - return address; - } + public String getAddress() { + return address; + } - public void setAddress(String address) { - this.address = address; + public void setAddress(String address) { + this.address = address; } } From 172eb6c21899c1037762e4e7e5bb8973f90d86d3 Mon Sep 17 00:00:00 2001 From: eric-martin Date: Fri, 29 Jun 2018 23:05:28 -0500 Subject: [PATCH 48/82] BAEL-1774: Moved SpringBootConsoleApplication from spring-boot to spring-boot-ops --- .../springbootnonwebapp/SpringBootConsoleApplication.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {spring-boot => spring-boot-ops}/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java (100%) diff --git a/spring-boot/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java b/spring-boot-ops/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java rename to spring-boot-ops/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java From f4d9ba7c0d55f7efa7299d4181cc7757693f75a3 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Sat, 30 Jun 2018 11:34:57 +0530 Subject: [PATCH 49/82] [BAEL-7057] - Fixed Junits in Jenkins for libraries-data Module (#4588) --- libraries-data/src/main/resources/db.sql | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries-data/src/main/resources/db.sql b/libraries-data/src/main/resources/db.sql index 1dac59307b..e6a9ed3fc2 100644 --- a/libraries-data/src/main/resources/db.sql +++ b/libraries-data/src/main/resources/db.sql @@ -1,3 +1,7 @@ +drop table if exists emp; +drop table if exists dept; + + create table dept( deptno numeric, dname varchar(14), From 111c39d4c95cb0ae2f6aa2e200fa89d104cfa70a Mon Sep 17 00:00:00 2001 From: KevinGilmore Date: Sat, 30 Jun 2018 08:28:44 -0500 Subject: [PATCH 50/82] Update README files (#4589) * BAEL-1766: Update README * BAEL-1853: add link to article * BAEL-1801: add link to article * Added links back to articles --- core-java/README.md | 1 + patterns/design-patterns/README.md | 1 + spring-thymeleaf/README.md | 1 + 3 files changed, 3 insertions(+) diff --git a/core-java/README.md b/core-java/README.md index fa2d7e4cf0..8800e2b862 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -160,3 +160,4 @@ - [Guide to the super Java Keyword](http://www.baeldung.com/java-super) - [Guide to the this Java Keyword](http://www.baeldung.com/java-this) - [Jagged Arrays In Java](http://www.baeldung.com/java-jagged-arrays) +- [Importance of Main Manifest Attribute in a Self-Executing JAR](http://www.baeldung.com/java-jar-executable-manifest-main-class) diff --git a/patterns/design-patterns/README.md b/patterns/design-patterns/README.md index 77ead0b317..8b9d7a8193 100644 --- a/patterns/design-patterns/README.md +++ b/patterns/design-patterns/README.md @@ -9,3 +9,4 @@ - [Double-Checked Locking with Singleton](http://www.baeldung.com/java-singleton-double-checked-locking) - [Composite Design Pattern in Java](http://www.baeldung.com/java-composite-pattern) - [Visitor Design Pattern in Java](http://www.baeldung.com/java-visitor-pattern) +- [The DAO Pattern in Java](http://www.baeldung.com/java-dao-pattern) diff --git a/spring-thymeleaf/README.md b/spring-thymeleaf/README.md index 27af6c077a..99f46c2f39 100644 --- a/spring-thymeleaf/README.md +++ b/spring-thymeleaf/README.md @@ -15,6 +15,7 @@ - [Conditionals in Thymeleaf](http://www.baeldung.com/spring-thymeleaf-conditionals) - [Iteration in Thymeleaf](http://www.baeldung.com/thymeleaf-iteration) - [Working With Arrays in Thymeleaf](http://www.baeldung.com/thymeleaf-arrays) +- [Spring with Thymeleaf Pagination for a List](http://www.baeldung.com/spring-thymeleaf-pagination) ### Build the Project From 97bddd2a204bb2fb75ef68d2b23eec7b48f9a7fd Mon Sep 17 00:00:00 2001 From: abialas Date: Sat, 30 Jun 2018 19:12:01 +0200 Subject: [PATCH 51/82] BAEL-1924 (#4590) * Revert "BAEL-1924 (#4573)" This reverts commit b1b34e2fcad274cbe91737b2a6d1fbfbffb62ea6. * BAEL-1924 move code to new spring-boot-persistence module * BAEL-1924 add new spring-boot-persistence module --- pom.xml | 1 + spring-boot-persistence/.gitignore | 5 + .../.mvn/wrapper/maven-wrapper.properties | 1 + spring-boot-persistence/README.MD | 3 + spring-boot-persistence/mvnw | 227 ++++++++++++++++++ spring-boot-persistence/mvnw.cmd | 145 +++++++++++ spring-boot-persistence/pom.xml | 53 ++++ .../main/java/com/baeldung/Application.java | 14 ++ .../main/java/com/baeldung}/domain/User.java | 2 +- .../baeldung}/repository/UserRepository.java | 4 +- .../src/main/resources/application.properties | 0 .../UserRepositoryIntegrationTest.java | 8 +- .../src/test/resources/application.properties | 16 ++ .../test/resources/import_active_users.sql | 2 +- .../test/resources/import_inactive_users.sql | 0 .../src/test/resources/migrated_users.sql | 3 + .../info/TotalUsersInfoContributor.java | 2 +- .../main/java/org/baeldung/model/User.java | 49 ++++ .../baeldung/repository/UserRepository.java | 82 +++++++ .../UserRepositoryIntegrationTest.java | 7 +- .../application-integrationtest.properties | 2 - .../src/test/resources/application.properties | 4 +- 22 files changed, 613 insertions(+), 17 deletions(-) create mode 100644 spring-boot-persistence/.gitignore create mode 100755 spring-boot-persistence/.mvn/wrapper/maven-wrapper.properties create mode 100644 spring-boot-persistence/README.MD create mode 100755 spring-boot-persistence/mvnw create mode 100755 spring-boot-persistence/mvnw.cmd create mode 100644 spring-boot-persistence/pom.xml create mode 100644 spring-boot-persistence/src/main/java/com/baeldung/Application.java rename {spring-boot/src/main/java/org/baeldung/boot => spring-boot-persistence/src/main/java/com/baeldung}/domain/User.java (96%) rename {spring-boot/src/main/java/org/baeldung/boot => spring-boot-persistence/src/main/java/com/baeldung}/repository/UserRepository.java (97%) create mode 100644 spring-boot-persistence/src/main/resources/application.properties rename spring-boot/src/test/java/org/baeldung/boot/repository/UserRepositoryDataJpaIntegrationTest.java => spring-boot-persistence/src/test/java/com/baeldung/repository/UserRepositoryIntegrationTest.java (77%) create mode 100644 spring-boot-persistence/src/test/resources/application.properties rename {spring-boot => spring-boot-persistence}/src/test/resources/import_active_users.sql (67%) rename {spring-boot => spring-boot-persistence}/src/test/resources/import_inactive_users.sql (100%) create mode 100644 spring-boot-persistence/src/test/resources/migrated_users.sql create mode 100644 spring-boot/src/main/java/org/baeldung/model/User.java create mode 100644 spring-boot/src/main/java/org/baeldung/repository/UserRepository.java rename spring-boot/src/test/java/org/baeldung/{boot => }/repository/UserRepositoryIntegrationTest.java (95%) diff --git a/pom.xml b/pom.xml index 45421969ec..661258ef1d 100644 --- a/pom.xml +++ b/pom.xml @@ -145,6 +145,7 @@ spring-boot-bootstrap spring-boot-admin spring-boot-ops + spring-boot-persistence spring-boot-security spring-boot-mvc spring-boot-logging-log4j2 diff --git a/spring-boot-persistence/.gitignore b/spring-boot-persistence/.gitignore new file mode 100644 index 0000000000..88e3308e9d --- /dev/null +++ b/spring-boot-persistence/.gitignore @@ -0,0 +1,5 @@ +/target/ +.settings/ +.classpath +.project + diff --git a/spring-boot-persistence/.mvn/wrapper/maven-wrapper.properties b/spring-boot-persistence/.mvn/wrapper/maven-wrapper.properties new file mode 100755 index 0000000000..a447c9fa81 --- /dev/null +++ b/spring-boot-persistence/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip \ No newline at end of file diff --git a/spring-boot-persistence/README.MD b/spring-boot-persistence/README.MD new file mode 100644 index 0000000000..71cd226b3a --- /dev/null +++ b/spring-boot-persistence/README.MD @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Spring Boot with multiple SQL import files](http://www.baeldung.com/spring-Boot-with-multiple-SQL-import-files) \ No newline at end of file diff --git a/spring-boot-persistence/mvnw b/spring-boot-persistence/mvnw new file mode 100755 index 0000000000..e96ccd5fbb --- /dev/null +++ b/spring-boot-persistence/mvnw @@ -0,0 +1,227 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/spring-boot-persistence/mvnw.cmd b/spring-boot-persistence/mvnw.cmd new file mode 100755 index 0000000000..4f0b068a03 --- /dev/null +++ b/spring-boot-persistence/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/spring-boot-persistence/pom.xml b/spring-boot-persistence/pom.xml new file mode 100644 index 0000000000..af0d7ea505 --- /dev/null +++ b/spring-boot-persistence/pom.xml @@ -0,0 +1,53 @@ + + 4.0.0 + com.baeldung + spring-boot-persistence + 0.0.1-SNAPSHOT + jar + spring-boot-persistence + This is a simple Spring Data Repositories test + + + parent-boot-2 + com.baeldung + 0.0.1-SNAPSHOT + ../parent-boot-2 + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + + + org.springframework.boot + spring-boot-starter + + + + + spring-boot-persistence + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-war-plugin + + + pl.project13.maven + git-commit-id-plugin + + + + + \ No newline at end of file diff --git a/spring-boot-persistence/src/main/java/com/baeldung/Application.java b/spring-boot-persistence/src/main/java/com/baeldung/Application.java new file mode 100644 index 0000000000..43888c2d67 --- /dev/null +++ b/spring-boot-persistence/src/main/java/com/baeldung/Application.java @@ -0,0 +1,14 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; + +@SpringBootApplication +public class Application { + private static ApplicationContext applicationContext; + + public static void main(String[] args) { + applicationContext = SpringApplication.run(Application.class, args); + } +} diff --git a/spring-boot/src/main/java/org/baeldung/boot/domain/User.java b/spring-boot-persistence/src/main/java/com/baeldung/domain/User.java similarity index 96% rename from spring-boot/src/main/java/org/baeldung/boot/domain/User.java rename to spring-boot-persistence/src/main/java/com/baeldung/domain/User.java index b6d68b8c3c..9d1fc4c8ad 100644 --- a/spring-boot/src/main/java/org/baeldung/boot/domain/User.java +++ b/spring-boot-persistence/src/main/java/com/baeldung/domain/User.java @@ -1,4 +1,4 @@ -package org.baeldung.boot.domain; +package com.baeldung.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; diff --git a/spring-boot/src/main/java/org/baeldung/boot/repository/UserRepository.java b/spring-boot-persistence/src/main/java/com/baeldung/repository/UserRepository.java similarity index 97% rename from spring-boot/src/main/java/org/baeldung/boot/repository/UserRepository.java rename to spring-boot-persistence/src/main/java/com/baeldung/repository/UserRepository.java index 2463a416d2..bdc1e0af33 100644 --- a/spring-boot/src/main/java/org/baeldung/boot/repository/UserRepository.java +++ b/spring-boot-persistence/src/main/java/com/baeldung/repository/UserRepository.java @@ -1,6 +1,6 @@ -package org.baeldung.boot.repository; +package com.baeldung.repository; -import org.baeldung.boot.domain.User; +import com.baeldung.domain.User; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; diff --git a/spring-boot-persistence/src/main/resources/application.properties b/spring-boot-persistence/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/UserRepositoryDataJpaIntegrationTest.java b/spring-boot-persistence/src/test/java/com/baeldung/repository/UserRepositoryIntegrationTest.java similarity index 77% rename from spring-boot/src/test/java/org/baeldung/boot/repository/UserRepositoryDataJpaIntegrationTest.java rename to spring-boot-persistence/src/test/java/com/baeldung/repository/UserRepositoryIntegrationTest.java index dc4c6eedcf..af5abc22d7 100644 --- a/spring-boot/src/test/java/org/baeldung/boot/repository/UserRepositoryDataJpaIntegrationTest.java +++ b/spring-boot-persistence/src/test/java/com/baeldung/repository/UserRepositoryIntegrationTest.java @@ -1,6 +1,6 @@ -package org.baeldung.boot.repository; +package com.baeldung.repository; -import org.baeldung.boot.domain.User; +import com.baeldung.domain.User; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -16,7 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ @RunWith(SpringRunner.class) @DataJpaTest -public class UserRepositoryDataJpaIntegrationTest { +public class UserRepositoryIntegrationTest { @Autowired private UserRepository userRepository; @@ -24,7 +24,7 @@ public class UserRepositoryDataJpaIntegrationTest { public void givenTwoImportFilesWhenFindAllShouldReturnSixUsers() { Collection users = userRepository.findAll(); - assertThat(users.size()).isEqualTo(6); + assertThat(users.size()).isEqualTo(9); } } diff --git a/spring-boot-persistence/src/test/resources/application.properties b/spring-boot-persistence/src/test/resources/application.properties new file mode 100644 index 0000000000..a5c1d983cf --- /dev/null +++ b/spring-boot-persistence/src/test/resources/application.properties @@ -0,0 +1,16 @@ +# spring.datasource.x +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 +spring.datasource.username=sa +spring.datasource.password=sa + +# hibernate.X +hibernate.dialect=org.hibernate.dialect.H2Dialect +hibernate.show_sql=true +hibernate.hbm2ddl.auto=create-drop +hibernate.cache.use_second_level_cache=true +hibernate.cache.use_query_cache=true +hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory + +spring.jpa.properties.hibernate.hbm2ddl.import_files=migrated_users.sql +spring.datasource.data=import_*_users.sql \ No newline at end of file diff --git a/spring-boot/src/test/resources/import_active_users.sql b/spring-boot-persistence/src/test/resources/import_active_users.sql similarity index 67% rename from spring-boot/src/test/resources/import_active_users.sql rename to spring-boot-persistence/src/test/resources/import_active_users.sql index e1bdfef5a8..0ec3161d91 100644 --- a/spring-boot/src/test/resources/import_active_users.sql +++ b/spring-boot-persistence/src/test/resources/import_active_users.sql @@ -1,3 +1,3 @@ insert into USERS(name, status, id) values('Peter', 1, 1); insert into USERS(name, status, id) values('David', 1, 2); -insert into USERS(name, status, id) values('Ed', 1, 3); \ No newline at end of file +insert into USERS(name, status, id) values('Ed', 1, 3); diff --git a/spring-boot/src/test/resources/import_inactive_users.sql b/spring-boot-persistence/src/test/resources/import_inactive_users.sql similarity index 100% rename from spring-boot/src/test/resources/import_inactive_users.sql rename to spring-boot-persistence/src/test/resources/import_inactive_users.sql diff --git a/spring-boot-persistence/src/test/resources/migrated_users.sql b/spring-boot-persistence/src/test/resources/migrated_users.sql new file mode 100644 index 0000000000..11d1a69110 --- /dev/null +++ b/spring-boot-persistence/src/test/resources/migrated_users.sql @@ -0,0 +1,3 @@ +insert into USERS(name, status, id) values('Peter', 1, 7); +insert into USERS(name, status, id) values('David', 1, 8); +insert into USERS(name, status, id) values('Ed', 1, 9); diff --git a/spring-boot/src/main/java/org/baeldung/endpoints/info/TotalUsersInfoContributor.java b/spring-boot/src/main/java/org/baeldung/endpoints/info/TotalUsersInfoContributor.java index 790584644f..34b50a2c0a 100644 --- a/spring-boot/src/main/java/org/baeldung/endpoints/info/TotalUsersInfoContributor.java +++ b/spring-boot/src/main/java/org/baeldung/endpoints/info/TotalUsersInfoContributor.java @@ -3,7 +3,7 @@ package org.baeldung.endpoints.info; import java.util.HashMap; import java.util.Map; -import org.baeldung.boot.repository.UserRepository; +import org.baeldung.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.info.Info; import org.springframework.boot.actuate.info.InfoContributor; diff --git a/spring-boot/src/main/java/org/baeldung/model/User.java b/spring-boot/src/main/java/org/baeldung/model/User.java new file mode 100644 index 0000000000..eb886338a0 --- /dev/null +++ b/spring-boot/src/main/java/org/baeldung/model/User.java @@ -0,0 +1,49 @@ +package org.baeldung.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "users") +public class User { + + @Id + @GeneratedValue + private Integer id; + private String name; + private Integer status; + + public User() { + } + + public User(String name, Integer status) { + this.name = name; + this.status = status; + } + + 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 Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } +} diff --git a/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java b/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java new file mode 100644 index 0000000000..cba504b6c6 --- /dev/null +++ b/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java @@ -0,0 +1,82 @@ +package org.baeldung.repository; + +import org.baeldung.model.User; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Repository; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Stream; + +@Repository("userRepository") +public interface UserRepository extends JpaRepository { + + int countByStatus(int status); + + Optional findOneByName(String name); + + Stream findAllByName(String name); + + @Async + CompletableFuture findOneByStatus(Integer status); + + @Query("SELECT u FROM User u WHERE u.status = 1") + Collection findAllActiveUsers(); + + @Query(value = "SELECT * FROM USERS u WHERE u.status = 1", nativeQuery = true) + Collection findAllActiveUsersNative(); + + @Query("SELECT u FROM User u WHERE u.status = ?1") + User findUserByStatus(Integer status); + + @Query(value = "SELECT * FROM Users u WHERE u.status = ?1", nativeQuery = true) + User findUserByStatusNative(Integer status); + + @Query("SELECT u FROM User u WHERE u.status = ?1 and u.name = ?2") + User findUserByStatusAndName(Integer status, String name); + + @Query("SELECT u FROM User u WHERE u.status = :status and u.name = :name") + User findUserByStatusAndNameNamedParams(@Param("status") Integer status, @Param("name") String name); + + @Query(value = "SELECT * FROM Users u WHERE u.status = :status AND u.name = :name", nativeQuery = true) + User findUserByStatusAndNameNamedParamsNative(@Param("status") Integer status, @Param("name") String name); + + @Query("SELECT u FROM User u WHERE u.status = :status and u.name = :name") + User findUserByUserStatusAndUserName(@Param("status") Integer userStatus, @Param("name") String userName); + + @Query("SELECT u FROM User u WHERE u.name like ?1%") + User findUserByNameLike(String name); + + @Query("SELECT u FROM User u WHERE u.name like :name%") + User findUserByNameLikeNamedParam(@Param("name") String name); + + @Query(value = "SELECT * FROM users u WHERE u.name LIKE ?1%", nativeQuery = true) + User findUserByNameLikeNative(String name); + + @Query(value = "SELECT u FROM User u") + List findAllUsers(Sort sort); + + @Query(value = "SELECT u FROM User u ORDER BY id") + Page findAllUsersWithPagination(Pageable pageable); + + @Query(value = "SELECT * FROM Users ORDER BY id \n-- #pageable\n", countQuery = "SELECT count(*) FROM Users", nativeQuery = true) + Page findAllUsersWithPaginationNative(Pageable pageable); + + @Modifying + @Query("update User u set u.status = :status where u.name = :name") + int updateUserSetStatusForName(@Param("status") Integer status, @Param("name") String name); + + @Modifying + @Query(value = "UPDATE Users u SET u.status = ? WHERE u.name = ?", nativeQuery = true) + int updateUserSetStatusForNameNative(Integer status, String name); + +} diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/UserRepositoryIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java similarity index 95% rename from spring-boot/src/test/java/org/baeldung/boot/repository/UserRepositoryIntegrationTest.java rename to spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java index a0f3a7a80f..72d204820e 100644 --- a/spring-boot/src/test/java/org/baeldung/boot/repository/UserRepositoryIntegrationTest.java +++ b/spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java @@ -1,7 +1,7 @@ -package org.baeldung.boot.repository; +package org.baeldung.repository; import org.baeldung.boot.config.H2JpaConfig; -import org.baeldung.boot.domain.User; +import org.baeldung.model.User; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; @@ -27,7 +27,8 @@ public class UserRepositoryIntegrationTest { private final String USER_NAME_ADAM = "Adam"; private final Integer ACTIVE_STATUS = 1; - @Autowired private UserRepository userRepository; + @Autowired + private UserRepository userRepository; @Test public void givenEmptyDBWhenFindOneByNameThenReturnEmptyOptional() { diff --git a/spring-boot/src/test/resources/application-integrationtest.properties b/spring-boot/src/test/resources/application-integrationtest.properties index 1a5bd502dd..bcd03226d3 100644 --- a/spring-boot/src/test/resources/application-integrationtest.properties +++ b/spring-boot/src/test/resources/application-integrationtest.properties @@ -2,5 +2,3 @@ spring.datasource.url=jdbc:mysql://localhost:3306/employee_int_test spring.datasource.username=root spring.datasource.password=root -spring.jpa.hibernate.ddl-auto=update -spring.datasource.data=import_*_users.sql diff --git a/spring-boot/src/test/resources/application.properties b/spring-boot/src/test/resources/application.properties index fef16d556e..85e4e6e66f 100644 --- a/spring-boot/src/test/resources/application.properties +++ b/spring-boot/src/test/resources/application.properties @@ -16,6 +16,4 @@ hibernate.show_sql=true hibernate.hbm2ddl.auto=create-drop hibernate.cache.use_second_level_cache=true hibernate.cache.use_query_cache=true -hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory - -spring.jpa.properties.hibernate.hbm2ddl.import_files=import_active_users.sql,import_inactive_users.sql \ No newline at end of file +hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory \ No newline at end of file From 00a14a67074a6d2320a1d6c82a503794c0553e7f Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 30 Jun 2018 21:52:26 +0300 Subject: [PATCH 52/82] fix surefire version --- spring-ldap/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-ldap/pom.xml b/spring-ldap/pom.xml index 41683d32a1..ab5f557736 100644 --- a/spring-ldap/pom.xml +++ b/spring-ldap/pom.xml @@ -118,6 +118,7 @@ org.apache.maven.plugins maven-surefire-plugin + ${maven-surefire-plugin.version} integration-test From 0a5b8c3a00ab696d75ef1d9e88f4f7eae14bc7aa Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 1 Jul 2018 10:58:13 +0300 Subject: [PATCH 53/82] update to spring 5 --- parent-spring-5/pom.xml | 1 + spring-dispatcher-servlet/pom.xml | 4 ++-- .../springdispatcherservlet/configuration/AppConfig.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/parent-spring-5/pom.xml b/parent-spring-5/pom.xml index 87479d5e2f..84e1a29a0d 100644 --- a/parent-spring-5/pom.xml +++ b/parent-spring-5/pom.xml @@ -31,6 +31,7 @@ 5.0.6.RELEASE 5.0.2 + 2.9.6 \ No newline at end of file diff --git a/spring-dispatcher-servlet/pom.xml b/spring-dispatcher-servlet/pom.xml index 9dfd3c0f39..35c6b1ad33 100644 --- a/spring-dispatcher-servlet/pom.xml +++ b/spring-dispatcher-servlet/pom.xml @@ -11,9 +11,9 @@ com.baeldung - parent-spring-4 + parent-spring-5 0.0.1-SNAPSHOT - ../parent-spring-4 + ../parent-spring-5 diff --git a/spring-dispatcher-servlet/src/main/java/com/baeldung/springdispatcherservlet/configuration/AppConfig.java b/spring-dispatcher-servlet/src/main/java/com/baeldung/springdispatcherservlet/configuration/AppConfig.java index f5ad032e84..c8a6cf06a6 100644 --- a/spring-dispatcher-servlet/src/main/java/com/baeldung/springdispatcherservlet/configuration/AppConfig.java +++ b/spring-dispatcher-servlet/src/main/java/com/baeldung/springdispatcherservlet/configuration/AppConfig.java @@ -17,7 +17,7 @@ import java.io.IOException; @Configuration @EnableWebMvc @ComponentScan("com.baeldung.springdispatcherservlet") -public class AppConfig extends WebMvcConfigurerAdapter { +public class AppConfig implements WebMvcConfigurer { public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); From 92340e9ca5d6317242f36641454896b100cd210b Mon Sep 17 00:00:00 2001 From: Siben Nayak Date: Sun, 1 Jul 2018 16:11:31 +0530 Subject: [PATCH 54/82] [BAEL-1847] Iterate Backwards through a List (#4540) * [BAEL-1847] Iterate Backwards through a List * [BAEL-1847] Updated unit tests --- .../baeldung/java/list/ReverseIterator.java | 80 +++++++++++++++++ .../java/list/ReverseIteratorUnitTest.java | 87 +++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 core-java-collections/src/main/java/com/baeldung/java/list/ReverseIterator.java create mode 100644 core-java-collections/src/test/java/com/baeldung/java/list/ReverseIteratorUnitTest.java diff --git a/core-java-collections/src/main/java/com/baeldung/java/list/ReverseIterator.java b/core-java-collections/src/main/java/com/baeldung/java/list/ReverseIterator.java new file mode 100644 index 0000000000..42dd543ed4 --- /dev/null +++ b/core-java-collections/src/main/java/com/baeldung/java/list/ReverseIterator.java @@ -0,0 +1,80 @@ +package com.baeldung.java.list; + +import java.util.Collections; +import java.util.List; +import java.util.ListIterator; + +import org.apache.commons.collections4.iterators.ReverseListIterator; + +import com.google.common.collect.Lists; + +/** + * Provides methods for iterating backward over a list. + */ +public class ReverseIterator { + + /** + * Iterate using the for loop. + * + * @param list the list + */ + public void iterateUsingForLoop(final List list) { + + for (int i = list.size(); i-- > 0; ) { + System.out.println(list.get(i)); + } + } + + /** + * Iterate using the Java {@link ListIterator}. + * + * @param list the list + */ + public void iterateUsingListIterator(final List list) { + + final ListIterator listIterator = list.listIterator(list.size()); + while (listIterator.hasPrevious()) { + System.out.println(listIterator.previous()); + } + } + + /** + * Iterate using Java {@link Collections} API. + * + * @param list the list + */ + public void iterateUsingCollections(final List list) { + + Collections.reverse(list); + for (final String item : list) { + System.out.println(item); + } + } + + /** + * Iterate using Apache Commons {@link ReverseListIterator}. + * + * @param list the list + */ + public void iterateUsingApacheReverseListIterator(final List list) { + + final ReverseListIterator listIterator = new ReverseListIterator(list); + while (listIterator.hasNext()) { + System.out.println(listIterator.next()); + } + } + + /** + * Iterate using Guava {@link Lists} API. + * + * @param list the list + */ + public void iterateUsingGuava(final List list) { + + final List reversedList = Lists.reverse(list); + for (final String item : reversedList) { + System.out.println(item); + } + } + +} diff --git a/core-java-collections/src/test/java/com/baeldung/java/list/ReverseIteratorUnitTest.java b/core-java-collections/src/test/java/com/baeldung/java/list/ReverseIteratorUnitTest.java new file mode 100644 index 0000000000..172a2fe417 --- /dev/null +++ b/core-java-collections/src/test/java/com/baeldung/java/list/ReverseIteratorUnitTest.java @@ -0,0 +1,87 @@ +package com.baeldung.java.list; + +import static org.junit.Assert.assertEquals; + +import java.util.Collections; +import java.util.List; +import java.util.ListIterator; + +import org.apache.commons.collections4.iterators.ReverseListIterator; +import org.apache.commons.lang3.StringUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.google.common.collect.Lists; + +public class ReverseIteratorUnitTest { + + private final ReverseIterator reverseIterator = new ReverseIterator(); + + private List list; + + private final String originalString = "ABCDE"; + + @BeforeEach + void setUp() { + + list = Lists.newArrayList("A", "B", "C", "D", "E"); + } + + @Test + void whenIteratingUsingForLoop_thenCorrect() { + + String reverseString = ""; + for (int i = list.size(); i-- > 0; ) { + reverseString += list.get(i); + } + assertEquals(reverseString, StringUtils.reverse(originalString)); + } + + @Test + void whenIteratingUsingListIterator_thenCorrect() { + + String reverseString = ""; + final ListIterator listIterator = list.listIterator(list.size()); + while (listIterator.hasPrevious()) { + reverseString += listIterator.previous(); + } + assertEquals(reverseString, StringUtils.reverse(originalString)); + } + + @Test + void whenIteratingUsingCollections_thenCorrect() { + + String reverseString = ""; + Collections.reverse(list); + for (final String item : list) { + reverseString += item; + } + assertEquals(reverseString, StringUtils.reverse(originalString)); + + assertEquals("E", list.get(0)); + } + + @Test + void whenIteratingUsingApacheReverseListIterator_thenCorrect() { + + String reverseString = ""; + final ReverseListIterator listIterator = new ReverseListIterator(list); + while (listIterator.hasNext()) { + reverseString += listIterator.next(); + } + assertEquals(reverseString, StringUtils.reverse(originalString)); + } + + @Test + void whenIteratingUsingGuava_thenCorrect() { + + String reverseString = ""; + final List reversedList = Lists.reverse(list); + for (final String item : reversedList) { + reverseString += item; + } + assertEquals(reverseString, StringUtils.reverse(originalString)); + + assertEquals("A", list.get(0)); + } +} \ No newline at end of file From 06577f129d6441861981b7a292a8a3dbfda892d8 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 1 Jul 2018 15:33:12 +0300 Subject: [PATCH 55/82] update to spring 5 --- spring-mvc-forms-jsp/pom.xml | 24 ++++++------------- .../ApplicationConfiguration.java | 5 ++-- .../baeldung/springmvcforms/domain/User.java | 5 ++-- 3 files changed, 11 insertions(+), 23 deletions(-) diff --git a/spring-mvc-forms-jsp/pom.xml b/spring-mvc-forms-jsp/pom.xml index 359e186f52..3c18403c71 100644 --- a/spring-mvc-forms-jsp/pom.xml +++ b/spring-mvc-forms-jsp/pom.xml @@ -13,15 +13,16 @@ com.baeldung - parent-modules - 1.0.0-SNAPSHOT + parent-spring-5 + 0.0.1-SNAPSHOT + ../parent-spring-5 org.springframework spring-webmvc - ${springframework.version} + ${spring.version} commons-logging @@ -65,11 +66,10 @@ commons-fileupload ${fileupload.version} - com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson-databind.version} @@ -104,24 +104,14 @@ - - - 1 - jstl - https://mvnrepository.com/artifact/javax.servlet/jstl - - - - 4.3.7.RELEASE 2.6 1.2 2.3.1 3.1.0 - 5.4.0.Final + 6.0.10.Final server default deploy directory - 1.3.2 - 2.8.7 + 1.3.3 5.2.5.Final 5.1.40 diff --git a/spring-mvc-forms-jsp/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java b/spring-mvc-forms-jsp/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java index 93fab9caf8..b8b36df84e 100644 --- a/spring-mvc-forms-jsp/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java +++ b/spring-mvc-forms-jsp/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java @@ -8,14 +8,13 @@ import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @EnableWebMvc @ComponentScan(basePackages = {"com.baeldung.springmvcforms", "com.baeldung.jstl"}) -class ApplicationConfiguration extends WebMvcConfigurerAdapter { +class ApplicationConfiguration implements WebMvcConfigurer { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { diff --git a/spring-mvc-forms-jsp/src/main/java/com/baeldung/springmvcforms/domain/User.java b/spring-mvc-forms-jsp/src/main/java/com/baeldung/springmvcforms/domain/User.java index 49f006f422..9e0e7c99be 100644 --- a/spring-mvc-forms-jsp/src/main/java/com/baeldung/springmvcforms/domain/User.java +++ b/spring-mvc-forms-jsp/src/main/java/com/baeldung/springmvcforms/domain/User.java @@ -1,13 +1,12 @@ package com.baeldung.springmvcforms.domain; import javax.validation.constraints.Digits; +import javax.validation.constraints.Email; import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import org.hibernate.validator.constraints.Email; -import org.hibernate.validator.constraints.NotBlank; - public class User { @NotNull From f9ea250fd2a6d956b3f561f120bd60ac31f17f17 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 1 Jul 2018 15:35:48 +0300 Subject: [PATCH 56/82] Update README.md --- spring-mvc-forms-jsp/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-mvc-forms-jsp/README.md b/spring-mvc-forms-jsp/README.md index 44786d5ec7..588828c9cf 100644 --- a/spring-mvc-forms-jsp/README.md +++ b/spring-mvc-forms-jsp/README.md @@ -4,5 +4,4 @@ - [MaxUploadSizeExceededException in Spring](http://www.baeldung.com/spring-maxuploadsizeexceeded) - [Getting Started with Forms in Spring MVC](http://www.baeldung.com/spring-mvc-form-tutorial) - [Form Validation with AngularJS and Spring MVC](http://www.baeldung.com/validation-angularjs-spring-mvc) -- [Guide to JSTL](http://www.baeldung.com/guide-to-jstl) - [A Guide to the JSTL Library](http://www.baeldung.com/jstl) From 0cd80319bd72a8bbb79556acc822c17c8dae031d Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 1 Jul 2018 16:30:43 +0300 Subject: [PATCH 57/82] update to spring 5 --- spring-data-rest/pom.xml | 4 ++-- .../src/main/java/com/baeldung/config/MvcConfig.java | 7 ++----- .../projection/SpringDataProjectionIntegrationTest.java | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/spring-data-rest/pom.xml b/spring-data-rest/pom.xml index 0e525474e3..b3d2b0e359 100644 --- a/spring-data-rest/pom.xml +++ b/spring-data-rest/pom.xml @@ -10,10 +10,10 @@ Intro to Spring Data REST - parent-boot-1 + parent-boot-2 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-1 + ../parent-boot-2 diff --git a/spring-data-rest/src/main/java/com/baeldung/config/MvcConfig.java b/spring-data-rest/src/main/java/com/baeldung/config/MvcConfig.java index 82cb936348..e5748f2f55 100644 --- a/spring-data-rest/src/main/java/com/baeldung/config/MvcConfig.java +++ b/spring-data-rest/src/main/java/com/baeldung/config/MvcConfig.java @@ -3,17 +3,14 @@ package com.baeldung.config; import com.baeldung.events.AuthorEventHandler; import com.baeldung.events.BookEventHandler; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.web.servlet.view.InternalResourceViewResolver; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration @EnableWebMvc -public class MvcConfig extends WebMvcConfigurerAdapter{ +public class MvcConfig implements WebMvcConfigurer { public MvcConfig(){ super(); diff --git a/spring-data-rest/src/test/java/com/baeldung/projection/SpringDataProjectionIntegrationTest.java b/spring-data-rest/src/test/java/com/baeldung/projection/SpringDataProjectionIntegrationTest.java index 4091fdf154..2b1f6d4d4f 100644 --- a/spring-data-rest/src/test/java/com/baeldung/projection/SpringDataProjectionIntegrationTest.java +++ b/spring-data-rest/src/test/java/com/baeldung/projection/SpringDataProjectionIntegrationTest.java @@ -38,7 +38,7 @@ public class SpringDataProjectionIntegrationTest { @Before public void setup(){ - if(bookRepo.findOne(1L) == null){ + if(bookRepo.findById(1L) == null){ Book book = new Book("Animal Farm"); book.setIsbn("978-1943138425"); book = bookRepo.save(book); From c0aaed7474a01ccac78a71a82b9448856408d3a2 Mon Sep 17 00:00:00 2001 From: Kevin Wittek Date: Sun, 1 Jul 2018 21:05:28 +0200 Subject: [PATCH 58/82] [BAEL-1930] Encryption and decryption of files using JDK --- .gitmodules | 3 - .../encrypt/FileEncrypterDecrypter.java | 61 +++++++++++++++++++ ...FileEncrypterDecrypterIntegrationTest.java | 33 ++++++++++ 3 files changed, 94 insertions(+), 3 deletions(-) delete mode 100644 .gitmodules create mode 100644 core-java/src/main/java/com/baeldung/encrypt/FileEncrypterDecrypter.java create mode 100644 core-java/src/test/java/com/baeldung/encrypt/FileEncrypterDecrypterIntegrationTest.java diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 9c5cdb8f2d..0000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "testgitrepo"] - path = testgitrepo - url = /home/prd/Development/projects/idea/tutorials/spring-boot/src/main/resources/testgitrepo/ diff --git a/core-java/src/main/java/com/baeldung/encrypt/FileEncrypterDecrypter.java b/core-java/src/main/java/com/baeldung/encrypt/FileEncrypterDecrypter.java new file mode 100644 index 0000000000..aad2089d8b --- /dev/null +++ b/core-java/src/main/java/com/baeldung/encrypt/FileEncrypterDecrypter.java @@ -0,0 +1,61 @@ +package com.baeldung.encrypt; + +import javax.crypto.*; +import javax.crypto.spec.IvParameterSpec; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +class FileEncrypterDecrypter { + + private SecretKey secretKey; + private Cipher cipher; + + FileEncrypterDecrypter(SecretKey secretKey, String cipher) throws NoSuchPaddingException, NoSuchAlgorithmException { + this.secretKey = secretKey; + this.cipher = Cipher.getInstance(cipher); + } + + void encrypt(String content, String fileName) throws InvalidKeyException, IOException { + cipher.init(Cipher.ENCRYPT_MODE, secretKey); + byte[] iv = cipher.getIV(); + + try ( + FileOutputStream fileOut = new FileOutputStream(fileName); + CipherOutputStream cipherOut = new CipherOutputStream(fileOut, cipher) + ) { + fileOut.write(iv); + cipherOut.write(content.getBytes()); + } + + } + + String decrypt(String fileName) throws InvalidAlgorithmParameterException, InvalidKeyException, IOException { + + String content; + + try (FileInputStream fileIn = new FileInputStream(fileName)) { + byte[] fileIv = new byte[16]; + fileIn.read(fileIv); + cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(fileIv)); + + try (CipherInputStream cipherIn = new CipherInputStream(fileIn, cipher)) { + InputStreamReader inReader = new InputStreamReader(cipherIn); + + StringBuilder sb = new StringBuilder(); + int c = inReader.read(); + while (c != -1) { + sb.append((char) c); + c = inReader.read(); + } + content = sb.toString(); + } + + } + return content; + } +} diff --git a/core-java/src/test/java/com/baeldung/encrypt/FileEncrypterDecrypterIntegrationTest.java b/core-java/src/test/java/com/baeldung/encrypt/FileEncrypterDecrypterIntegrationTest.java new file mode 100644 index 0000000000..6cadfcde1d --- /dev/null +++ b/core-java/src/test/java/com/baeldung/encrypt/FileEncrypterDecrypterIntegrationTest.java @@ -0,0 +1,33 @@ +package com.baeldung.encrypt; + +import org.junit.Test; + +import javax.crypto.KeyGenerator; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; +import java.io.File; +import java.io.IOException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class FileEncrypterDecrypterIntegrationTest { + + @Test + public void givenStringAndFilename_whenEncryptingIntoFile_andDecryptingFileAgain_thenOriginalStringIsReturned() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException, InvalidAlgorithmParameterException { + String originalContent = "foobar"; + SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey(); + + FileEncrypterDecrypter fileEncrypterDecrypter = new FileEncrypterDecrypter(secretKey, "AES/CBC/PKCS5Padding"); + fileEncrypterDecrypter.encrypt(originalContent, "baz.enc"); + + String decryptedContent = fileEncrypterDecrypter.decrypt("baz.enc"); + assertThat(decryptedContent, is(originalContent)); + + new File("baz.enc").delete(); // cleanup + } + +} \ No newline at end of file From 3e3e577eeeb5e3d79912d61ce7af55da9a9eb4ba Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Mon, 2 Jul 2018 12:29:05 +0100 Subject: [PATCH 59/82] Deleted file from evaluation --- .../com/baeldung/reactive/model/Stock.java | 32 ------------------- 1 file changed, 32 deletions(-) delete mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java deleted file mode 100644 index 6743de064e..0000000000 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/model/Stock.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.reactive.model; - -import java.math.BigDecimal; - -public class Stock { - - private String code; - - private BigDecimal price; - - public Stock(String code, BigDecimal price) { - this.code = code; - this.price = price; - } - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - public BigDecimal getPrice() { - return price; - } - - public void setPrice(BigDecimal price) { - this.price = price; - } - -} From c7d58f3e583beefa6af3d4f83bd6756d92f51b4f Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Mon, 2 Jul 2018 12:29:42 +0100 Subject: [PATCH 60/82] Delete file from evaluation --- .../controller/StockReactiveController.java | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java deleted file mode 100644 index 8f8de79561..0000000000 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/controller/StockReactiveController.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.reactive.controller; - -import java.math.BigDecimal; -import java.time.Duration; -import java.util.Random; -import java.util.stream.Stream; - -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.baeldung.reactive.model.Stock; - -import reactor.core.publisher.Flux; -import reactor.util.function.Tuple2; - -@RestController -@RequestMapping("/rtes") -public class StockReactiveController { - - @GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE, value = "/stocks/{code}") - public Flux getStocks(@PathVariable String code) { - BigDecimal startingPrice = new BigDecimal("100"); - Flux stockFlux = Flux.fromStream(Stream.generate(() -> new Stock(code, getLatestPrice(startingPrice)))); - Flux emmitFlux = Flux.interval(Duration.ofSeconds(1)); - return Flux.zip(stockFlux, emmitFlux) - .map(Tuple2::getT1); - } - - private BigDecimal getLatestPrice(BigDecimal startingPrice) { - BigDecimal priceChange = BigDecimal.valueOf(new Random().nextDouble()); - return new Random().nextBoolean() ? startingPrice.add(priceChange) : startingPrice.subtract(priceChange); - } -} From 44caf3b868547ff83748029798ed6594b86dc32e Mon Sep 17 00:00:00 2001 From: priyeshmashelkar Date: Mon, 2 Jul 2018 12:30:59 +0100 Subject: [PATCH 61/82] Deleted file from evaluation --- .../baeldung/reactive/client/StockClient.java | 22 ------------------- 1 file changed, 22 deletions(-) delete mode 100644 spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java b/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java deleted file mode 100644 index 8a65b77b37..0000000000 --- a/spring-5-reactive/src/main/java/com/baeldung/reactive/client/StockClient.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.reactive.client; - -import org.springframework.http.MediaType; -import org.springframework.web.reactive.function.client.WebClient; -import org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec; - -import com.baeldung.reactive.model.Stock; - -import reactor.core.publisher.Flux; - -public class StockClient { - - public Flux getStockUpdates(String stockCode) { - WebClient client = WebClient.create("localhost:8080"); - RequestHeadersSpec request = client.get() - .uri("/rtes/stocks/" + stockCode) - .accept(MediaType.TEXT_EVENT_STREAM); - return request.retrieve() - .bodyToFlux(Stock.class) - .log(); - } -} From 92acea607e3ce092d540622d680470f8f75a0df3 Mon Sep 17 00:00:00 2001 From: Alejandro Gervasio Date: Mon, 2 Jul 2018 22:59:39 -0300 Subject: [PATCH 62/82] Context and Servlet Initialization Parameters (#4594) * Initial Commit * Update pom.xml --- javax-servlet-init-params/pom.xml | 56 +++++++++++++++++++ .../com/baeldung/servlets/UserServlet.java | 49 ++++++++++++++++ .../src/main/webapp/WEB-INF/jsp/result.jsp | 16 ++++++ .../src/main/webapp/WEB-INF/web.xml | 14 +++++ .../src/main/webapp/index.jsp | 19 +++++++ .../baeldung/test/UserServletUnitTest.java | 52 +++++++++++++++++ 6 files changed, 206 insertions(+) create mode 100644 javax-servlet-init-params/pom.xml create mode 100644 javax-servlet-init-params/src/main/java/com/baeldung/servlets/UserServlet.java create mode 100644 javax-servlet-init-params/src/main/webapp/WEB-INF/jsp/result.jsp create mode 100644 javax-servlet-init-params/src/main/webapp/WEB-INF/web.xml create mode 100644 javax-servlet-init-params/src/main/webapp/index.jsp create mode 100644 javax-servlet-init-params/src/test/java/com/baeldung/test/UserServletUnitTest.java diff --git a/javax-servlet-init-params/pom.xml b/javax-servlet-init-params/pom.xml new file mode 100644 index 0000000000..4f766a7e2c --- /dev/null +++ b/javax-servlet-init-params/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + com.baeldung.javax-servlet-init-params + javax-servlet-init-params + 1.0 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + junit + junit + 4.12 + test + + + org.assertj + assertj-core + 3.9.1 + test + + + org.hamcrest + hamcrest-core + 1.3 + test + + + org.mockito + mockito-core + 2.18.3 + test + + + javax + javaee-web-api + 7.0 + provided + + + jstl + jstl + 1.2 + + + javax.el + el-api + 2.2 + + + \ No newline at end of file diff --git a/javax-servlet-init-params/src/main/java/com/baeldung/servlets/UserServlet.java b/javax-servlet-init-params/src/main/java/com/baeldung/servlets/UserServlet.java new file mode 100644 index 0000000000..e195aa092a --- /dev/null +++ b/javax-servlet-init-params/src/main/java/com/baeldung/servlets/UserServlet.java @@ -0,0 +1,49 @@ +package com.baeldung.servlets; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebInitParam; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@WebServlet(name = "UserServlet", urlPatterns = {"/userServlet"}, initParams={ + @WebInitParam(name="name", value="Not provided"), + @WebInitParam(name="email", value="Not provided")}) +public class UserServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + forwardRequest(request, response, "/WEB-INF/jsp/result.jsp"); + } + + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + request.setAttribute("name", getRequestParameter(request, "name")); + request.setAttribute("email", getRequestParameter(request, "email")); + request.setAttribute("province", getContextParameter("province")); + request.setAttribute("country", getContextParameter("country")); + } + + protected String getRequestParameter(HttpServletRequest request, String name) { + String param = request.getParameter(name); + return !param.isEmpty() ? param : getInitParameter(name); + } + + protected String getContextParameter(String name) { + return getServletContext().getInitParameter(name); + } + + protected void forwardRequest(HttpServletRequest request, HttpServletResponse response, String path) + throws ServletException, IOException { + request.getRequestDispatcher(path).forward(request, response); + } +} \ No newline at end of file diff --git a/javax-servlet-init-params/src/main/webapp/WEB-INF/jsp/result.jsp b/javax-servlet-init-params/src/main/webapp/WEB-INF/jsp/result.jsp new file mode 100644 index 0000000000..01cc54858e --- /dev/null +++ b/javax-servlet-init-params/src/main/webapp/WEB-INF/jsp/result.jsp @@ -0,0 +1,16 @@ +<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> +<%@ page contentType="text/html" pageEncoding="UTF-8"%> + + + + + User Data + + +

User Information

+

Name: ${name}

+

Email: ${email}

+

Province: ${province}

+

Country: ${country}

+ + diff --git a/javax-servlet-init-params/src/main/webapp/WEB-INF/web.xml b/javax-servlet-init-params/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..1b801171b3 --- /dev/null +++ b/javax-servlet-init-params/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,14 @@ + + + + province + Mendoza + + + country + Argentina + + diff --git a/javax-servlet-init-params/src/main/webapp/index.jsp b/javax-servlet-init-params/src/main/webapp/index.jsp new file mode 100644 index 0000000000..ca41942e5d --- /dev/null +++ b/javax-servlet-init-params/src/main/webapp/index.jsp @@ -0,0 +1,19 @@ +<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> +<%@ page contentType="text/html" pageEncoding="UTF-8"%> + + + + Context and Initialization Servlet Parameters + + + +

Please fill the form below:

+
+ + + + + +
+ + diff --git a/javax-servlet-init-params/src/test/java/com/baeldung/test/UserServletUnitTest.java b/javax-servlet-init-params/src/test/java/com/baeldung/test/UserServletUnitTest.java new file mode 100644 index 0000000000..ef3d877dd7 --- /dev/null +++ b/javax-servlet-init-params/src/test/java/com/baeldung/test/UserServletUnitTest.java @@ -0,0 +1,52 @@ +package com.baeldung.test; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import static org.assertj.core.api.Assertions.assertThat; +import org.junit.BeforeClass; +import org.junit.Test; +import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class UserServletUnitTest { + + private static HttpServletRequest request; + private static HttpServletResponse response; + + + @BeforeClass + public static void setUpHttpServletRequestMockInstance() { + request = mock(HttpServletRequest.class); + } + + @BeforeClass + public static void setUpHttpServletResponsetMockInstance() { + response = mock(HttpServletResponse.class); + } + + @Test + public void givenHttpServletRequestMockInstance_whenCalledgetParameter_thenCalledAtLeastOnce() { + request.getParameter("name"); + verify(request, atLeast(1)).getParameter("name"); + } + + @Test + public void givenHttpServletRequestMockInstance_whenCalledgetParameter_thenOneAssertion() { + when(request.getParameter("name")).thenReturn("username"); + assertThat(request.getParameter("name")).isEqualTo("username"); + } + + @Test + public void givenHttpServletResponseMockInstance_whenCalledgetContentType_thenCalledAtLeastOnce() { + response.getContentType(); + verify(response, atLeast(1)).getContentType(); + } + + @Test + public void givenHttpServletResponseMockInstance_whenCalledgetContentType_thenOneAssertion() { + when(response.getContentType()).thenReturn("text/html"); + assertThat(response.getContentType()).isEqualTo("text/html"); + } +} \ No newline at end of file From 396df6fdca8577c32ec5e29e56485451b5d71563 Mon Sep 17 00:00:00 2001 From: Syed Mansoor Date: Tue, 3 Jul 2018 21:16:12 +1000 Subject: [PATCH 63/82] [BAEL-1753] Moved Kotlin-ktor in core-kotlin module --- .../.gradle/4.4/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../4.4/fileContent/annotation-processors.bin | Bin 0 -> 19073 bytes .../.gradle/4.4/fileContent/fileContent.lock | Bin 0 -> 38 bytes .../.gradle/4.4/fileHashes/fileHashes.bin | Bin 0 -> 26997 bytes .../.gradle/4.4/fileHashes/fileHashes.lock | Bin 0 -> 38 bytes .../4.4/fileHashes/resourceHashesCache.bin | Bin 0 -> 23665 bytes .../.gradle/4.4/taskHistory/taskHistory.bin | Bin 0 -> 80724 bytes .../.gradle/4.4/taskHistory/taskHistory.lock | Bin 0 -> 38 bytes .../buildOutputCleanup.lock | Bin 0 -> 38 bytes .../buildOutputCleanup/cache.properties | 2 + .../buildOutputCleanup/outputFiles.bin | Bin 0 -> 18713 bytes core-kotlin/build.gradle | 57 ++++++ .../META-INF/KtorWithKotlin.kotlin_module | Bin 0 -> 294 bytes core-kotlin/build/kotlin-build/version.txt | 1 + .../kotlin/compileKotlin/build-history.bin | Bin 0 -> 150 bytes .../caches-jvm/inputs/source-to-output.tab | Bin 0 -> 65536 bytes .../inputs/source-to-output.tab.keystream | Bin 0 -> 32768 bytes .../inputs/source-to-output.tab.keystream.len | Bin 0 -> 8 bytes .../inputs/source-to-output.tab.len | Bin 0 -> 8 bytes .../inputs/source-to-output.tab.values.at | Bin 0 -> 10869 bytes .../caches-jvm/inputs/source-to-output.tab_i | Bin 0 -> 32768 bytes .../inputs/source-to-output.tab_i.len | Bin 0 -> 8 bytes .../jvm/kotlin/class-fq-name-to-source.tab | Bin 0 -> 65536 bytes .../class-fq-name-to-source.tab.keystream | Bin 0 -> 4096 bytes .../class-fq-name-to-source.tab.keystream.len | Bin 0 -> 8 bytes .../kotlin/class-fq-name-to-source.tab.len | Bin 0 -> 8 bytes .../class-fq-name-to-source.tab.values.at | Bin 0 -> 5315 bytes .../jvm/kotlin/class-fq-name-to-source.tab_i | Bin 0 -> 32768 bytes .../kotlin/class-fq-name-to-source.tab_i.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/constants.tab | Bin 0 -> 65536 bytes .../jvm/kotlin/constants.tab.keystream | Bin 0 -> 4096 bytes .../jvm/kotlin/constants.tab.keystream.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/constants.tab.len | Bin 0 -> 8 bytes .../jvm/kotlin/constants.tab.values.at | Bin 0 -> 82 bytes .../caches-jvm/jvm/kotlin/constants.tab_i | Bin 0 -> 32768 bytes .../caches-jvm/jvm/kotlin/constants.tab_i.len | Bin 0 -> 8 bytes .../jvm/kotlin/internal-name-to-source.tab | Bin 0 -> 65536 bytes .../internal-name-to-source.tab.keystream | Bin 0 -> 4096 bytes .../internal-name-to-source.tab.keystream.len | Bin 0 -> 8 bytes .../kotlin/internal-name-to-source.tab.len | Bin 0 -> 8 bytes .../internal-name-to-source.tab.values.at | Bin 0 -> 8704 bytes .../jvm/kotlin/internal-name-to-source.tab_i | Bin 0 -> 32768 bytes .../kotlin/internal-name-to-source.tab_i.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/package-parts.tab | Bin 0 -> 65536 bytes .../jvm/kotlin/package-parts.tab.keystream | Bin 0 -> 4096 bytes .../kotlin/package-parts.tab.keystream.len | Bin 0 -> 8 bytes .../jvm/kotlin/package-parts.tab.len | Bin 0 -> 8 bytes .../jvm/kotlin/package-parts.tab.values.at | Bin 0 -> 73 bytes .../caches-jvm/jvm/kotlin/package-parts.tab_i | Bin 0 -> 32768 bytes .../jvm/kotlin/package-parts.tab_i.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/proto.tab | Bin 0 -> 65536 bytes .../caches-jvm/jvm/kotlin/proto.tab.keystream | Bin 0 -> 4096 bytes .../jvm/kotlin/proto.tab.keystream.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/proto.tab.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/proto.tab.values.at | Bin 0 -> 18673 bytes .../caches-jvm/jvm/kotlin/proto.tab_i | Bin 0 -> 32768 bytes .../caches-jvm/jvm/kotlin/proto.tab_i.len | Bin 0 -> 8 bytes .../jvm/kotlin/source-to-classes.tab | Bin 0 -> 65536 bytes .../kotlin/source-to-classes.tab.keystream | Bin 0 -> 32768 bytes .../source-to-classes.tab.keystream.len | Bin 0 -> 8 bytes .../jvm/kotlin/source-to-classes.tab.len | Bin 0 -> 8 bytes .../kotlin/source-to-classes.tab.values.at | Bin 0 -> 3168 bytes .../jvm/kotlin/source-to-classes.tab_i | Bin 0 -> 32768 bytes .../jvm/kotlin/source-to-classes.tab_i.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/subtypes.tab | Bin 0 -> 65536 bytes .../jvm/kotlin/subtypes.tab.keystream | Bin 0 -> 4096 bytes .../jvm/kotlin/subtypes.tab.keystream.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/subtypes.tab.len | Bin 0 -> 8 bytes .../jvm/kotlin/subtypes.tab.values.at | Bin 0 -> 647 bytes .../caches-jvm/jvm/kotlin/subtypes.tab_i | Bin 0 -> 32768 bytes .../caches-jvm/jvm/kotlin/subtypes.tab_i.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/supertypes.tab | Bin 0 -> 65536 bytes .../jvm/kotlin/supertypes.tab.keystream | Bin 0 -> 4096 bytes .../jvm/kotlin/supertypes.tab.keystream.len | Bin 0 -> 8 bytes .../caches-jvm/jvm/kotlin/supertypes.tab.len | Bin 0 -> 8 bytes .../jvm/kotlin/supertypes.tab.values.at | Bin 0 -> 501 bytes .../caches-jvm/jvm/kotlin/supertypes.tab_i | Bin 0 -> 32768 bytes .../jvm/kotlin/supertypes.tab_i.len | Bin 0 -> 8 bytes .../caches-jvm/lookups/counters.tab | 2 + .../caches-jvm/lookups/file-to-id.tab | Bin 0 -> 65536 bytes .../lookups/file-to-id.tab.keystream | Bin 0 -> 32768 bytes .../lookups/file-to-id.tab.keystream.len | Bin 0 -> 8 bytes .../caches-jvm/lookups/file-to-id.tab.len | Bin 0 -> 8 bytes .../lookups/file-to-id.tab.values.at | Bin 0 -> 289 bytes .../caches-jvm/lookups/file-to-id.tab_i | Bin 0 -> 32768 bytes .../caches-jvm/lookups/file-to-id.tab_i.len | Bin 0 -> 8 bytes .../caches-jvm/lookups/id-to-file.tab | Bin 0 -> 65536 bytes .../lookups/id-to-file.tab.keystream | Bin 0 -> 4096 bytes .../lookups/id-to-file.tab.keystream.len | Bin 0 -> 8 bytes .../caches-jvm/lookups/id-to-file.tab.len | Bin 0 -> 8 bytes .../lookups/id-to-file.tab.values.at | Bin 0 -> 4357 bytes .../caches-jvm/lookups/id-to-file.tab_i | Bin 0 -> 32768 bytes .../caches-jvm/lookups/id-to-file.tab_i.len | Bin 0 -> 8 bytes .../caches-jvm/lookups/lookups.tab | Bin 0 -> 65536 bytes .../caches-jvm/lookups/lookups.tab.keystream | Bin 0 -> 32768 bytes .../lookups/lookups.tab.keystream.len | Bin 0 -> 8 bytes .../caches-jvm/lookups/lookups.tab.len | Bin 0 -> 8 bytes .../caches-jvm/lookups/lookups.tab.values.at | Bin 0 -> 11033 bytes .../caches-jvm/lookups/lookups.tab_i | Bin 0 -> 32768 bytes .../caches-jvm/lookups/lookups.tab_i.len | Bin 0 -> 8 bytes .../data-container-format-version.txt | 1 + .../kotlin/compileKotlin/format-version.txt | 1 + .../compileKotlin/gradle-format-version.txt | 1 + .../build/kotlin/compileKotlin/last-build.bin | Bin 0 -> 81 bytes core-kotlin/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + core-kotlin/gradlew | 172 ++++++++++++++++++ core-kotlin/gradlew.bat | 84 +++++++++ core-kotlin/kotlin-ktor/.gitignore | 14 ++ core-kotlin/kotlin-ktor/build.gradle | 47 +++++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + core-kotlin/kotlin-ktor/gradlew | 172 ++++++++++++++++++ core-kotlin/kotlin-ktor/gradlew.bat | 84 +++++++++ core-kotlin/kotlin-ktor/resources/logback.xml | 11 ++ core-kotlin/kotlin-ktor/settings.gradle | 2 + .../kotlin-ktor/src/main/kotlin/APIServer.kt | 73 ++++++++ .../kotlin-ktor/webapp/WEB-INF/web.xml | 35 ++++ core-kotlin/resources/logback.xml | 11 ++ core-kotlin/settings.gradle | 2 + .../kotlin/com/baeldung/ktor/APIServer.kt | 73 ++++++++ kotlin-ktor/src/main/kotlin/APIServer.kt | 2 +- 122 files changed, 856 insertions(+), 1 deletion(-) create mode 100644 core-kotlin/.gradle/4.4/fileChanges/last-build.bin create mode 100644 core-kotlin/.gradle/4.4/fileContent/annotation-processors.bin create mode 100644 core-kotlin/.gradle/4.4/fileContent/fileContent.lock create mode 100644 core-kotlin/.gradle/4.4/fileHashes/fileHashes.bin create mode 100644 core-kotlin/.gradle/4.4/fileHashes/fileHashes.lock create mode 100644 core-kotlin/.gradle/4.4/fileHashes/resourceHashesCache.bin create mode 100644 core-kotlin/.gradle/4.4/taskHistory/taskHistory.bin create mode 100644 core-kotlin/.gradle/4.4/taskHistory/taskHistory.lock create mode 100644 core-kotlin/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 core-kotlin/.gradle/buildOutputCleanup/cache.properties create mode 100644 core-kotlin/.gradle/buildOutputCleanup/outputFiles.bin create mode 100755 core-kotlin/build.gradle create mode 100644 core-kotlin/build/classes/kotlin/main/META-INF/KtorWithKotlin.kotlin_module create mode 100644 core-kotlin/build/kotlin-build/version.txt create mode 100644 core-kotlin/build/kotlin/compileKotlin/build-history.bin create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i create mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len create mode 100644 core-kotlin/build/kotlin/compileKotlin/data-container-format-version.txt create mode 100644 core-kotlin/build/kotlin/compileKotlin/format-version.txt create mode 100644 core-kotlin/build/kotlin/compileKotlin/gradle-format-version.txt create mode 100644 core-kotlin/build/kotlin/compileKotlin/last-build.bin create mode 100755 core-kotlin/gradle/wrapper/gradle-wrapper.jar create mode 100755 core-kotlin/gradle/wrapper/gradle-wrapper.properties create mode 100755 core-kotlin/gradlew create mode 100755 core-kotlin/gradlew.bat create mode 100644 core-kotlin/kotlin-ktor/.gitignore create mode 100755 core-kotlin/kotlin-ktor/build.gradle create mode 100755 core-kotlin/kotlin-ktor/gradle/wrapper/gradle-wrapper.jar create mode 100755 core-kotlin/kotlin-ktor/gradle/wrapper/gradle-wrapper.properties create mode 100755 core-kotlin/kotlin-ktor/gradlew create mode 100755 core-kotlin/kotlin-ktor/gradlew.bat create mode 100755 core-kotlin/kotlin-ktor/resources/logback.xml create mode 100755 core-kotlin/kotlin-ktor/settings.gradle create mode 100755 core-kotlin/kotlin-ktor/src/main/kotlin/APIServer.kt create mode 100755 core-kotlin/kotlin-ktor/webapp/WEB-INF/web.xml create mode 100755 core-kotlin/resources/logback.xml create mode 100755 core-kotlin/settings.gradle create mode 100755 core-kotlin/src/main/kotlin/com/baeldung/ktor/APIServer.kt diff --git a/core-kotlin/.gradle/4.4/fileChanges/last-build.bin b/core-kotlin/.gradle/4.4/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/core-kotlin/.gradle/4.4/fileContent/annotation-processors.bin b/core-kotlin/.gradle/4.4/fileContent/annotation-processors.bin new file mode 100644 index 0000000000000000000000000000000000000000..114bb513f163c3885eeb105a37c0239df388b2ce GIT binary patch literal 19073 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 jOK$`| literal 0 HcmV?d00001 diff --git a/core-kotlin/.gradle/4.4/fileHashes/resourceHashesCache.bin b/core-kotlin/.gradle/4.4/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..28dd081876aed1784aad324f024c1dd9ab50fd17 GIT binary patch literal 23665 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 literal 0 HcmV?d00001 diff --git a/core-kotlin/.gradle/4.4/taskHistory/taskHistory.bin b/core-kotlin/.gradle/4.4/taskHistory/taskHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..ecbab3d3dd088cd88f667d20b20f6705b4871614 GIT binary patch literal 80724 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 literal 0 HcmV?d00001 diff --git a/core-kotlin/.gradle/buildOutputCleanup/cache.properties b/core-kotlin/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..1cae56dfec --- /dev/null +++ b/core-kotlin/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Tue Jul 03 21:01:49 AEST 2018 +gradle.version=4.4 diff --git a/core-kotlin/.gradle/buildOutputCleanup/outputFiles.bin b/core-kotlin/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..fdf5abf9788a7ce77f0beae68cc6ecdb606699fb GIT binary patch literal 18713 zcmeI&F(^cF9KiAa$s_MB-f}r9i!v#s?8?BV&W#4c-5>+I1F;=SJQ*JUu1zOUZ@{rmpk@cy6m{RfPRIiGTw>J_a{nIV7x0tg_0 z00IagfB*srAbi>h~!}88{*3C=r*M88pzx%P!VM#A(zbO~arHhO@~AKx?KH+_j-*8l(j literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin-build/version.txt b/core-kotlin/build/kotlin-build/version.txt new file mode 100644 index 0000000000..01aabacbfd --- /dev/null +++ b/core-kotlin/build/kotlin-build/version.txt @@ -0,0 +1 @@ +11001 \ No newline at end of file diff --git a/core-kotlin/build/kotlin/compileKotlin/build-history.bin b/core-kotlin/build/kotlin/compileKotlin/build-history.bin new file mode 100644 index 0000000000000000000000000000000000000000..e3926f1cead83a2a82c5113b45c79ec058c52e74 GIT binary patch literal 150 zcmZ4UmVvc=0s{naFfcHt#Gmtyg7QHWNTB60n!pB_4ycNYewL^zF4q~L3S2RLf+}z| NQw~+&X4pQs001I@7Lxz~ literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab new file mode 100644 index 0000000000000000000000000000000000000000..9a13eeb034a1b6ec7d61627dd37c8dff955e7b01 GIT binary patch literal 65536 zcmeIvzpGDi9LMoD7uWUU-jzX2Vv)io-ASa}yWT&53?`!xgHaZPfyqi18SX9folwe; z{J6Iyzq|QyWuTY$w~*0zhsV3ld3Mg{^y$;%4DX#8t)6Xz+uvDMb+&4}GiZ7SOaFc| zSQ=b^X0SH#`{CdBf7X=%0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&w zb%DD{j`ks^x(~W@Ka<_ds(yY?u6D0|ONN$L?dTrw-d;@RySusvhpIMzP40BZJ||mO zR9*g*T6j^#0wG-5=d`-6O+Qm)<9{-Rtj?ovW+% zbgy)$-zFm?Rr|VUy3=oxm)-r{Lu;z;z3%xi$e!>?ba(M#vd}%%UF!eV`3Mjo zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk o1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ;Qs`E0S98F761SM literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream new file mode 100644 index 0000000000000000000000000000000000000000..64fb36c0cdb60248e71ad76ac345ecf3bbfc3252 GIT binary patch literal 32768 zcmeI#!A=`75C-7BP;2!O3ZW7xQ4yg<>Y=K$o+j4Xp49fD@b(?=8ikgt&7u0a5DsWE z-;RIJlKRGO@|4sA$5CB!$Q1HJwAqHe%2VcOwM%N?Nbg6^&IXm@puCn3_3web+G%oT zl7AVUK5%^bWuMA{S9GW+@1jWsx-)et!B_Eofs@lx8%*2-Bqa8{W-Mo{(f>kQ`<`otzF9~Eb zs|)7w+|L^x-aAT@%hKVGP94@^Yo6mT<8{r0cK4FC(#Nh-A6KV&rawxF_DQe|!`h~N zb&{PRNv=wru~RGcvMBpUWas8EXudVPdOor>P<=+t^ZQlANwIlFS=FUQG)-U4<=SmN z8ZQ}F({klXGu)|}jm`)1adRT4BYP#0AkU?1_I&3+rWC5#(|nRC zOg^bg9Zh+akan6+z&~qnd10K7jO`Qxb<{Q-_PoSeujQbuaU#}y6J4Ikb$KXj>uuR@ zes{up-r&|0OxfZ#I_Q0$D^*^=N#Fng literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len new file mode 100644 index 0000000000000000000000000000000000000000..a8a65c788a049fa13437cfd9e8f407982b2825e6 GIT binary patch literal 8 McmZQz00Ds*004vlZ2$lO literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len new file mode 100644 index 0000000000000000000000000000000000000000..b3155f95730bcd91e447627020d273d6a58689c7 GIT binary patch literal 8 McmZQz0D(pa00Bw>!T zIBRn7-_>@i{9j^o>+32OX*8To$$jom@yYN*YqQk6tKlxX2S@@pGINI>G0` z?U6JE7s=4_B1_VOX^r0tZJ)?d|W zg&D|0p68(YM&TlgOO^|6YzF&x?}oR6Sug4{3(B#X#RAuYu}V~N`K(3*rr21r;6D@6 zT!O01__97Taxe{6q_$wL3;0@%)9?;FRMdpk8ws`@r(fIyC*j3js>)N*}ALCQVaj_`pug9L%7T>tZ z6{NVI%{=l)^&$6XW>7{#J?MOeo6@5Zy-RtwxXCfQQX~pTj*s2Z4r}%=v z{2xrY=j&z*yPb^;T`GcnYglb$8AM!tU1_P`uq7&w`^RoHCiK?}$H$Yh&&qMN+fB#; z8?qcTfh_7eEMfZ%gklXgUcC0P{_#!H(SVP22m5ay)P$#jTWod>txhABkUb`F_7RGT zas@3RgO^nY-K?MgN&Cx45SH@FsK-|jDPamld?@8;rGU0XTuwpTBFuG)XhaxjUsB7S zNXihe)6%X)6*@qU>a+X%PIN`?W@|d{#QR%ZHndx;&t@0rvn@9s(Tl<4ESi!>HxPd} z@>Q}Zs)qPHB2;+)swkX_!m_GfMK8(SUNQ^Bo=;?(VOH!bTh&n5A@mEqMOtOoW8So0 zYk5~cj_4(IkKv@RM1hy;Cu0ao&%^)uPW0|Z(|usgr40M}#YUezkj)^C-{0tS4^BF6 z|EktrO7rj)$poYrl~g5037RXX_2pjW4LMHmhd65Y{kkLe=6)45Vs9SQ;?0A~8%|qm zh*Kj{sJ9w?3N=>)QeE{BVz&hiH>NzkMVi3o=krNVPI#dCzwT0=rz|1YCXCNFy4F_a z05@Q+Y>!(=E2)MHN;xpj6|wyNF6m6bi<`bpQ_$M?YRVCWhifxlSQVz9u{9KARQ8@Xa)+X5AlL9h_yA*8S-J&cZ5Vq7wgQ@wQ4(~1Df!Hcs-0yVHTc;kC z@KAXT_2H9l(_=oPtKK!tlkUNwb9~nGxP+63HQcqCGwA|aJ9~3C+$z=eETW(ChyL4> zB9{x<|JzPPnB>r++>qVfC28Qo%@=3s^fO9_>kI0N^4P|gRL3=mE-!f)!q$<}F5YKy j1L&3Gguiwo!b^pCaE>R#7}zo1U&6bMgX*s>PDuX&E*>y4 literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i new file mode 100644 index 0000000000000000000000000000000000000000..d8b968522fbcceebb2dd7bf4ecb83257c7d8bd0a GIT binary patch literal 32768 zcmeI(%}Z2a6vy#{63iwTq{RdUrWKPASzt_&k&$5_7&U^msnDohQuHPikA;wJvM3ma zU@9E7vDIz9|=5KG$)c52%1%w@1AvrUJShYatM5fq1t_&zX;{UYDFOB6oK7 zS9`5rXx&epH(E2?vd}($ou5?SzrPAqe$8ht0tna_IA=uOZ|^AB?;Nd;@6>7Aw~3x; zrHWpfD|(&&bX9GRUNRDeNg$=~mv%3^{VYs7&$ery5xLwwSTox(oPH_05J14TK&=tU%ELz6ed&h)0`>)r5qbW$li%gor==qT2q1s}0tf_5Aa6vmZlnhFUl|Duok@O`uUy@~K!(S=&Utpu`<%|{(Yy7*vX;o(i`de^lAF&Yt>x3C*829wO3!NcBjYE<7r=dA-ywObvxaej;60a zSB zcB<+`dOp39u1%k$cRy53r32~e?$%yRR_#iM(xd6j`>K)jQhGD(Psh@S@A6(cn6B(; z?af5hru1~WH(imQO0SLoW{jjEK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ KfB=DiE$|D~)Xgve literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream new file mode 100644 index 0000000000000000000000000000000000000000..e64763e3641013fe082591324289367e1f9fa5c8 GIT binary patch literal 4096 zcmeHH$!;4l4DF%lHx%7>w1?`{A4q5H!ofH(yfi>>vc!%BOQNC0u>U?1tOU_iwsYul zbmikC`5vif7v8PVJe^~WuNW$_q#(K1E#cHrCaJY#j9UTkyFqY50a;k6y`fH^{%{o0 zAfvLT4!)d+%meEgrU-d^lxYG+AU|H|4{G4CnMm_8qXF%eB^5P%zTb4Z$YW$SYJLx< z?@pwXU)N3j=@eknT+ByTi}B}EpbFK7>LBmy0%{a{ZG;l;M;2Y9lR^^?6524SC095F zhK3K(Yd+X9*hI(3>7*bMUD9B1qRDOfr$$%>lh2zVBM0h6xK$NeY0>PTm&!&^Zt8>V z8JMkL9n&Ag$5hi6OfFH1UvAZms*Qw?rLxtXya&wpM_|Z(PJR=qUL&j<>>Owt6#iD? z8&kIe6>f&v>kS-^#};S*iMUR)7rSpj^N30F=i8k6nR&**+G1=-h4cnql)9XP_0ko+ zicaUNpK2|%*bRk*cs}`W(gA!eRlLh4Q)s=UCNkxB++iWLFu+_`siMyJe6zh;q7r$9fDZv$q%rPSyt z#ro(rx#HqpmzJM%;Iro6!%qzr@1oAh=m7ko|86Mg9iX=@ztZp<`pas*!F0m(xhZ2X zjM@#Y!$JY$A!og$lS3AAP!B}P za78AO`wPON$33TT)||+&gItrWRb^;Vui|F?A7HFNZ~X_$-Mrp>Kh+N*h4X@841hon z?SoYnREywD&4sZz0)^D;xjlsqgrl!&-V;T@^z;#1uq*xg#BMWprst?gs9Kg#4j9;6 znS6J|&Shmjr>KGuF_39oA$>*ET(Uf=Kf=5PMq8Oni0tlb4+8Z|h`B-VSPjtoK*%-g z{x*=ic(w-73OkOoZ=Y4N18nVdCsk+Ka*A6A0yXpI6951J literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i new file mode 100644 index 0000000000000000000000000000000000000000..56bab89b950b557799390d2ffb3c30f11f801743 GIT binary patch literal 32768 zcmeI)T}V@57zgmjyhsXjur3VAR$#dHrrsL@5tGU}=DW*ej9+0Nc`&VM($_nh~A{?G56 zxmS_V5-KKnlrYiB*n&Ub;sF5&m_(qKiQ-$kc`i*+xA1t0(c2q+?O zi-{_4w1yRlV|a}B(*LXt(>;b4MnMQ<5$I#0`7LkXWjV#xhZ5p*cH@}a)(B{x0>_AM zmu~Uro1$FmJl%7<jC2CR*Dz^Q+c*`99wv{q)U=jOM!z)`tKDAOHafKmY=%0)E+t zbiHuSP968i`2MmYU+OrX+e@IFi8{l}PS~sK^lm%k^)Qg|UP?b=%!rGL4nA4A!kB92 zsge|z@a2V_swD1^JfqRXYgO_f2L$XS;Af)c(an{1>KVO400Iy&QlLck!{0Z3+h=4= z)Pev6AOL~f2{03l`_Amm-HKQV0_q7oV4{&o-A?tAArS-$FVMq8&Wbl5CX&?1{{GYP zpDh#5^?vP^^&`CvNxkb}J_H~D0SH)ApjO^@?hpF5TC+RtU3r-(+PH0=_L-Og0SG_< z0#*{JVWNxf2K*n8l`d)ldTEw@R&b500F_bF4gwA)S{>qkJM@YkApn7Y0v;wh{F!a@ zxiq-$#tKx+{k3Ch@Vv2AQ7zX3ALTku^&a?<>vgdn1R!92fhLxHM(>POR_nA``r75J z`uo|OR_hJ@KmY;|fPnb~>gDgn$tjOR=1Y#mW)Qf-MCZotoiamKWVF73SAO2jZEXx# zzf*Lmfs zY!HBeNd=hbPU(eqlcv`nTlP8Y+8*NfJpGbcS7;Jv_qF1ItS4nS*e&y(ca_`s{>)&4 zAqYSK0uX=z1STiol6^&}f9UGuW@8ovAfQEHkmd8L1MADQ%)z-3fPk6;EbpK3k!izf Yrb8;T3%p{Y-M_Bm{xbW8{LlQq0cFgMpa1{> literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len new file mode 100644 index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29 GIT binary patch literal 8 McmZQz0D%Su009U9fdBvi literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab new file mode 100644 index 0000000000000000000000000000000000000000..ff97d1b01f7463ac580636bd3c6379ed90086b51 GIT binary patch literal 65536 zcmeIuu?c`c3)uw6@foZ)B?N z|5X2-xB8Un_s>QpK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk;|p97 zG5(bOmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#3c eX8;05Am(K7WpHGOV2Ee%Veka9JsCnkQX&8*Dis9) literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i new file mode 100644 index 0000000000000000000000000000000000000000..c83b7e08403a62cc1bd8fa245717ab58724c7e59 GIT binary patch literal 32768 zcmeIu0Sy2k3Jg{ zZ^>FZp6;R#za~fNYI>e_r?=>dFUfm4l~y+^<;~}$7u`Sy(|&XcJ^LxCr!(nJ`tf6O zims>kXiwUvqLgDFlKylYok$zrCyVF;x{0=<$LPU#$yGX*ex`TcCOw*$vYd{fo#{e) z;7ziF4xtz6>DS3~I*nGh;CWvqgXm^Do(`mS^ukNtpU$R-=%*LlPq)w)w3c>lS<1QR z$w)e#&Zmvfk~MTGJwz+%1-kcXa-WW(p*I_oE|sM$qeEy1I+gB!lB}S^=zeIrQoMWFuWe&(PkqvNay}lF4)y z-A%vUWu0!Jx9I>HdhSlrw+(J|0)5tyY^AH{aau!f&;z%VuXHr+-nNu$w~{fmj`Ev0 z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apuj&B F_zAm#Pl*5k literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream new file mode 100644 index 0000000000000000000000000000000000000000..405d891a7de8d39633c3e9847cf58a983be31ffe GIT binary patch literal 4096 zcmeHJOK;ma5Z*(vKyO8{SQLG2yUV@~ts*Bt&xs#_Yq<$*rvZAS#i>F>;&@3au>XCB zF%yI`Z6`hTkQ@?+^UXKIZyxlY`?Wno{a}I}e7JwyAA`OC{pk7=tGHAwecU{V9ku>i zLA6*KJ8Z4;?XKc>V?p*-aeFNNdnGa*t~+kU(Yx{EXu#I<9IIr?p%k?$62UFcOKwau z#0v?p))>cJi7Czp_T4ssm;H4U2Ub>)oEYfTnp=tL-?fMgb6$41g}2)w6Jp)M&fuVCQuuz8CN9liwLUka?NBV?OtF#M_Wpj2q>YTo0{Y+jvz-ZdRQybo#!xf6??zg ziA3U4ZeUcx{7hXaMp zal_lK6qz@g=Z1aA6)!-Cy?(>){RcKIhDUt4sK%EU_%D`N`>K#j%*R_`*tJhIqf8px zom)_bYWX3?H{|vVDw@vR9L-=krY5S+0phv8T{Qa)lyDfYP&haK{^L5&!I-G6$7NY- zcpA%c1g0)+w3@C}!XfjqPL!PYWC?Ci!v)v?M0@N>ZzmZ}gyE83SMp@n5o-4?wRYbVfgJ@@sR|9n>mzxIF8 zukk3AyqXH0WS4&iwiP7PFfyrrfYxxigPHli<{DVq-r`~>cpwX!-LZ87Q}%_Dwib}? z?D(TJl(-ods+nCdMT?SZMBg)ZH%0_EcfvDsg*0cHr3V{*3b1Wn=G1U*`7Xs^^fF$a zz@g@XE}Gq$!mUJ~bdzj&2eN&IYEfZrdbP@3f-9*tmQcy(sFHSVELO)F1vPhL^p^;4 zYpk8X=3bg`P-$4GjI_&Vq!vA3ldDey8@?_-XmriO5HfL7JOWZt9|rf1LYO9`^Po|M zgN6HjVkl$}b(iO7?thkU40Wod1sy)#er=qi0D6DhsI11aT=U#{REJ|2CnWhIra3{P cTiG)VQ5Cp_#xM6j?tktTxL4p_f!|MopTBoAFaQ7m literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len new file mode 100644 index 0000000000000000000000000000000000000000..d43f4d11d97a07ee7716e69fa82130792b9a4dcf GIT binary patch literal 8 McmZQz00Hh)004skaR2}S literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len new file mode 100644 index 0000000000000000000000000000000000000000..46eb98bf025aac853a88d494b80031592fa8000a GIT binary patch literal 8 McmZQz0D-0%00E={8vppj7QhlQZz?r6pyYjCYv&bd=6lCd;6?r3lGhEOGd;i3@f-T{)x{j+1ICYC z9vP#r#<&{K$CyjTocNad(W++GHOfGS)V~b{lVufkuTau5R)Cg_ya&HgKvOoWnk69o zF!Vm@6Nu*KaaDF{WIQV_-^Eu(wYv`GjU5+d)2G(kEECAJl`-gW!6BS92QoB}gfh=d zxL)O5`|w%Zq}nT!@czMa@hB~!KuNEt(>3^&!%qzPp}q^b@gk$&2SA`MR5uk1N`r3O z65of$5lBMSZr zyiY-SA)=?YvzhcUQMWx!QT-O?O);3loI&6jUP-8+ehM+?2o8&QJPd?fQK+R&pdqR! z>28VP*m1}e>01JOM7?$-y%{^arvtM}yFQ=>Q;vO``^b}egFMfuIZv07|InT9m3ob- zcSW5G=-20M-Og72FRVa1cHkQWdOCc_Wc(5F%9J%a>Wz+)P_hoz6!b}-GWn}WhLbKI z4}sBBw;^pA5}nx-MwxQ3EdsMuE>2vRxX)aUJ$Bs>0yOmDSvKVcksX9}(UUU8m{J+?nV4pD$K>~bRk5(q%RyIG`bUu=GWVaE=8wutP_$>0U-*co7A z5(qtkR=gjTXMdF)`pko8tbne{2{DHU_j2!O3G@%&o^<}5!fSZldG?EW?_SfAfIoq2 zN+f>q-tYa7`S15&y!H2WpZOotX+IMEKSzF@t&?VIH6~D^M6PW4FWShn1AeuiOxS1S z$MLrW(r`ciJS*cj@*n{_2o$5gP9{w3vm-WRk^l*i00|fq$isc{u%?-9fjoPaNMmZ| zu0Z2%Ii7{}WaqP*L&54vLYzDCJ==nf!}%oOPe9>1^F+KF>3@v-B;XbTh3L=tS#=NG zqK7)(5=c@a^%vt#B*Qkqk_!ot011!)34{ZIdL27B@)Z%0fUOcz{xX3f!Ne#?R z0wkaZfm%H872P`0qK8_l43C<}TfDR%bN&@aT?qkJ)+jCjlo2 z6r*3G(mt=VI(H)C{+sHnvN~?K#4A@K3zPr660&-5KKg(8`R|bBVC`p&5KjHV4>kq%C2SUKKdiWPOM|{0SNZv`OHYq!S1~;O zP)F_Is5u4wmU#X8H{nAORAvpFkF#*SllJe`$XvW*~v^Cy2fRF$mOO}ABgE0svoqA9nmipMx4Fc^V)TyIm)4R0UJhhrpQM8JbSnt$+6myw@U z<31&lelzZbf?WV>Rb0j)0TLhq68Ja*$$0LlDR}(t$Ia%fP!p)cy1jDj*9D=@%X}n2 z0wh2JLz6%?)}77gtD3a0UWuFj| zp4ZzY)$n&C(r|rtH(#pOrZ5V1gg_qp=|<`P3cHh+BF~+psejm=hw;r3h*lzxX51e5 z{2J%!{*#7ob5ZDRmOv}G|MkPo%Vy^}?cWUD2jUXeI<3QO{&K8`7iM@L8qM>dzN$;< z{~P&noCN#{)GGWRq_fip-beihL%5%WKJPg->Tn2CYL%)G>)Y0i4`*s6dI*cnK|i-; O_MINW2v~X;5_k>O3 zGL!!L&Zufzwd(7%W%}pvOiomPKGXN+@5S){XI}{rAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!Cun3p`qD(_HeNF49}NPA};uJ*T_$lwQ+g`b_s}Vh9i*K!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly lK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWY4iyZ|A&C$azl literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream new file mode 100644 index 0000000000000000000000000000000000000000..9c2728d424ce833363b359cf4e0d790cab338377 GIT binary patch literal 4096 zcmeIuOA5j;5C&kk-a$ln?xIH!bRlse)C){9LkZ?llBx9g#)4p_Cy>b|fz0FQTOMzh zhVqm0#-^YQkjFl@3W33TC`C08(WF81Zc^|_>|Inyo?2ik>Qp-n6w{fJ4D3?;inf|GcnAhTUB~M;cb!$o)NP#~W8Xh7 d%?mjqAOa#F0wN#+A|L`HAOa#F0wVCI0xtnrWrP3# literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len new file mode 100644 index 0000000000000000000000000000000000000000..f4c8cfc8ce12dd8c7d3138da29fdfd38746215ff GIT binary patch literal 8 McmZQz00BlG000&M4gdfE literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.len new file mode 100644 index 0000000000000000000000000000000000000000..ae494197337e7613fa74806ac6352f9fe880ca17 GIT binary patch literal 8 McmZQz0D%Sv00BqOmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#2> IWMIUK09gZWQI8*k;Q&n&JQ{~-Qd7wRFlZFz2;~a9 z0>th&`k$G+FIAr65FpS>U{aFHXZ_JC77-vo;En>*l6*Dq%^kn+Gywtw7Z{i1HQU9& z8O$d@fB*pk1PBly&rWa$3AV7cs0RjXF5FkK+009C72oNAZfItU=mp3Zc*<2n{iVprOHVXb7Uf!NoQQdqD`oBFxo>hIABL zk}M;hq(Ukm^`W9n3*URyGNUBy>iUCj2GCz4y+kB%oR+b6zDo@&p2+w<)M z?T+@-W65m0w7od#(d3pJ#@O;rvZ6hFr03e_zD}NRXTMBdYj6KN+1z430cs(qwg+wOlSd8u91?rc}?sf!^%fB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ lfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D=D`@Gq1t=v4p! literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream new file mode 100644 index 0000000000000000000000000000000000000000..a3b25390668a103d0e4ffe418e486a640a029717 GIT binary patch literal 4096 zcmeHHU5^qm6!pQF_~NtiTNjN!xTA@G02weW!!7~VO?)w>y$%g+FKIgj{=F@f4IK-+ z@p*U|l6!i3d(OS*QM$2!Y1AHqY^J! zxa(T+b&m`1iy8-84UnAi{pr>i%1RLJnc~E#v9xlofm%0oNu6)`CL1|J!D+$OB6gU8 zvAUwR(p;4cT=WJzG8b3|)qT-BvA#q)9_PM|?^q*2t zuIrkoJ4C3}<|(TA2#FnVDmVe$k}kzInWp=H0~^Q2ALohL7>CTfJ!2pY^hwB#<`#6E zroqPrGH`*|L1i@xaU_2NDkm7<6O&x98Fi54ngoU+suJ&@3ETGMe8>Jo literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len new file mode 100644 index 0000000000000000000000000000000000000000..ae4d3fca102917b923e7124f626e00a5d459e0fc GIT binary patch literal 8 McmZQz00H*h007Yd!vFvP literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len new file mode 100644 index 0000000000000000000000000000000000000000..75a15fe067ac93e8e5bb00b9267dc361bb3c5d66 GIT binary patch literal 8 McmZQz0D;CE00H6wS^xk5 literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at new file mode 100644 index 0000000000000000000000000000000000000000..7b1138afa87d918c16610625860cb6aa0f074409 GIT binary patch literal 18673 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 bBA)GhWHz7waUQLh{p!elZDic0u!8tsbBpCb literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i new file mode 100644 index 0000000000000000000000000000000000000000..8a98cc2dd02f95c08d2e704abea89648d5c38639 GIT binary patch literal 32768 zcmeI*Ye-XJ7zgkN43RFl#AJ}jx}gx_J|qfONTaYoGl&p_GKi4MGH4`yh}S4vVjvM} z-Y~i#i8cI?8eOy`C5l-vP(jo_%#bv@fP#rV5#kWXZs)e0zh69i&-*@?-+A4c6O}S3 zg7_m!5S0xi{yW461R&r+pji-2RwbPFa2mr9fB*y(6DTYts>wfb~MC5W~ix^u;S%>B58&yT*pu-Sbql#VO8 z{yp?)XDHQ-TD=Px`MSQkI%DuQvzX^~Y>cn+HV^0j3)uL6@iRC39Xuc)hk%{;*W<)Z zb8^H+Ob9>#0ub;nFfE8yIn%~G%@lmT-;z_|>AY6PEBSs>{=L0UEA^lb2)GMG@%}VM zEUa-K!!ZQ3A}}lX{hy59L9Nt-Iv@Z62tWV=5C~s^TtO6l*)b8m9ilS`KmY>T63FED zBdk3QBigD8)yO4a5=03LR@vTvs^R?g7aF!S{~8hfTl@x(|70SG_<0=g7P z=lf1+XRA|d&G&O%e?B>8e6C9nwXC~s^?AO;6N|at@$0WoNE{a7AfTv#k@xYfOYP%| zCe>iFbix0hVXNbS21`RpVJOhWUw1CDc>TW-{k$)y242|1kN_=7DA2_F=}l#IlY}8x z4AsYZJ~moDuXqxJstFhb(QxVq{QO$sD^SSp-)_8psc_n$(-m;tcef;-4?2*-0Zjb- z^E}lwq;OiK(}_T);J<^^wnO#j(GIR-x@B#>PT2i!vzeawK!3ksp0M4j8rXDolb`B%y6~w zo8fABtxn`}MsNAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5;& z%`ULi-IsF6!|C&M`FHn`k*fLhX1YK9l3rZvp50P4_|^S7olZ}VR=r*AzL$Rf**&tg z>RLLN9{bV#GJW^G`{=f+N9o=4O1he!OXs#%O{K5W(e%Vv)rW8057Ni!_;}Tw^lExJ zeV?99&+n+(mp)BbzIGqnS@kBpojy$0(i`dguBr>^QaYWU**>ry)oi+$9#0QVR!ye2(oci#LHZ)y?ElvJ2oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N X0t5&UAV7cs0RjXF5FkL{{{;R3CPAjx literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream new file mode 100644 index 0000000000000000000000000000000000000000..6e9870be293196fc1228b95aa7e1681732a43713 GIT binary patch literal 32768 zcmeI#!EO^V5XNy{2rM3fHbrWch^i@6;(&10Lu##e9oF6|eS2n;MQMTF>>kiRmuwHs zr}=s8@mljGhOv`m?&8pz^VnzU^WEUH@3$t8IS$^2WSTh0+cxIldy|I7bXFhcznj>Z zjg{a={TJ!SE}3&XxZB5_yleBf(g}0wWtL8VzNz%{R}bCVcDpc@@V!#TT5J%f0r!;x z?(U^O3$baZwMaFBe)u5iG3i>EkNS8c*2$njxpYNNQXa-8kApU*lP1`~W*_@x*0y(> zxYy87I&^L|CqcG0>n2&)Y&SMlX^LRGjk9KX_|j^mQZ>`YS$L*;(#SgcqIm_7Cu+ZQd3-r&RTdnX_s+xm}9|KRTx|YGmX#y2L zI-jO|jlH;Ok>-+$&+Ox+<8r!nEPdy*7F2uyy*LXN^K_`u6n};4)|$p^@x40-Eq%%t zd%XfC9j%%ZOP>*Q&dTO{>2!cM>C;Z;Nv?TarMyn>Kwhgki?Kb;zMqxTmeRW^ab!TQS_0Any^V*pkA+Rpgk3^^>7rg5<`-cpqGN$ovaA$k_yQ+ zq~Fv_kNF4rA^9U2T1;$m*Xy_!TjG54&^*4Gh&%$8f$B^kl`88DrRto3(p(!5<`L72 zFDv?JZs!~Tirn1>)1@~HHbUI3&4JMs7$kEfJPul<| z$-!*&lDC6%$;Fzld*aDNVseG%`>==VsAk26Cx3-+9I^fmY;plj!kTIc4Rl zfcs6-58k(!-#-FFFLZ+Rx?rYNnu6AT>YZ%Jcu^_%p~=q#bXAzw#80|YJQaLBmNL*rRjH{IA~Q(wM>2z5rK2em z*<7xV%^x>ape5si#{W~V`{mBIcK?(zs|qN|z88QiYz777*xNdKBDZrrl$FQ^>l9Y@ z2Q=36LaEOTn==i^CUE!mbK>_&!OD5YqU8MFvFUoj1VYNiOHc~Vd4lR!6;qh=-Zd&_ zCJ%X@gPIy!1x#NqxT!LTcX!=W>`z$e7Rr^`P=SfSLSpLoT0O!Vc`tL8nUH1yipGbn zIysmgD^eT+o7`$hrdc)rU`RaJ~*7 zXk35lep5qrY25VKtt;=QJP<@88jKrlc zan?hxIt>7q>Yy!l$Q@77wZ&k4z6s-6P5&f5%^;WJ0Amxaa88h#X74}MG;aqia}nZL zo^iNG{Qg2Q7+ykjs-a(PDf)h}H!fomiR08qrH91dSB;<nGMRCx)Yoo+Z$_SkF123+(cxjsT6ev@4H11{(#z^z|^TQuMU*pDLAmKsF6E< zBaORz%#bHbq`y=@U4h$@VM3g}Ln)VzM<{7Lpb}(Yi*ju8J!!npY{)yr=l-iVw!LYk z_;~#GaH^%GU~4I&UZssJPZaLp)Z7X$wk^gVC? z4+4%0Ts9($a_KvcGdLUH==DEY=$dpEfZzxqfPiBH%|_(&aQa$QVy86E=!@~`sN{)S zj^}!PYFdsq&z7rQ*Ei;3%Vt~WcrXQGJt7bLPD}-JI;KJ(*aC5VetOS*Z1Xy0rxCfm zW1z5BjY_62?#k@wp>3ic~UtKuGY+WKvx zH(IHpm!@B@)1R*DP0>q6qA&>@*ZXkS(pyi%H1kZe9?~3_dWLFeTH_c3wgi&;{jHe4 z+hVI8br3)R0owv!jYw7=G}*38Jp>T2FYw8TJbTm0dpY)LsfYjq2q1s}0s#|9=T9jf4Ab`aaCLK#3FUw0?2#>2)Qx zvFuTxN40diAJK=Dx5&0(>R7i?+RQ*oI&jlqHzg#V0@EU*&~oVf3o}T>`XCv zhRe&iWJc}vok1ywQr2yq)=c~CpUH{Ro^IOSWZl`JRfdFF4#^zZCcavS?XR literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len new file mode 100644 index 0000000000000000000000000000000000000000..c2d0b7ddb4291538af1d053b9966ed3885cef3df GIT binary patch literal 8 LcmZQz0E2e`0QLay literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.len new file mode 100644 index 0000000000000000000000000000000000000000..3e822dd800c530e797c2ef209ce7ee551c547e37 GIT binary patch literal 8 McmZQz0D%S%00B?{$p8QV literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.values.at b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.values.at new file mode 100644 index 0000000000000000000000000000000000000000..a5f03ad0c9ca512eaeb7b464e3a90c33e4a9909d GIT binary patch literal 647 zcmaKqOK-w35QP0d+C$Wr+KaigQZGGJgg~l55dnJM*sEa0@kV|~&|lx6hC@)4v%j64 zne~J%5G2}YgMzG#60*@6ty9jU@e6Q=B{X}`0dr3lN>uDlP|XWKErTgJnov7F1uM6w z26>)l``IQML+0OE{4fTrv(Ih1+AZJNO%JQcYh`#Igh1y8-x5$dSp2w}?3?Vn>r{6} z9TTPToZ^=~4=uhRe1m1sV9)r|C>Se?qV4VUGK%G=x*)AYrc5=z>bJ93k;FFpmn=jK zbU!55AxknPwao2k2XE|kNJFB=5R}P%v_K6xeu0X2SURSPUKta2R(&kF0;{ RE>7yP{!#ugZFiMzKYxip?BM_a literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i new file mode 100644 index 0000000000000000000000000000000000000000..dce89dcd2596ee1aef7bf842a746c0a08e610e0e GIT binary patch literal 32768 zcmeIuuS$ba90uSQW^iF*65EW!WHcyv69$uYyMiH>(-yT1+0q7rVD&z{0lU%VHH}Lj z8BTm009C72oNAZfB*pk1PBlyu!q1|N!|x{<2_21>>yHm`s2G s0RjXF5FkK+009DB7C0`+&-!ZF<&3fsAV7cs0RjXF5FkK+!2b#S0;|6lXaE2J literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i.len new file mode 100644 index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29 GIT binary patch literal 8 McmZQz0D%Su009U9fdBvi literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab new file mode 100644 index 0000000000000000000000000000000000000000..fc1ae04109d165676819fb90bb8c96f330b4c806 GIT binary patch literal 65536 zcmeIuF-`(O7>3~=VnSo!0-iuRYZE$R!5y@M!V6eZU}NPO>^K35-oeTXSWo|Sy{%>*m{cYghTnw{(_n(uZ`JKBsr- zdwP@Z)5~-`s5<<#cAb8u^K_T4(rx;hzNEYKG5t;#>BX>Wn&vZx009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ ffB*pk1PBlyK!5-N0t5&UAV7cs0RjXFoQ=RQz1=}d literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream new file mode 100644 index 0000000000000000000000000000000000000000..43ccbea46f7b9af9c2da784a6973915c825d1891 GIT binary patch literal 4096 zcmeIv&q~BF5C(AHV=tm2ddbNbkj+*q-BsFMJ*UYKL(|NXKd^m!yAThBlDjau&X+I4 zFB^#?>jhYqoMzzC7}!>Lb)3#{SD3M`ZoYQyZ7K5h(eQ^-;Inx>)`!#nWf2-MTH}}k z3tB`7?0_vu^s2(-)b1kT91S{FzQjcoy$HZ_&2o|aMjc`NHt}aWzoXGlo3+j^NeLmW z&MIMS@~~vc;6M2NkmwwG4OgG|g)U$_cCxQ18B2VGhhw&+l1PmyyRzMHrEIkL z)eg6CbCT-VGB>LG(Cb1ay39fB*pk1PBlyK!5-N0t7k;tfq*| z&7Z{%+k^@9MPMUEJXOw$eL2h_1PBlyK!5-N0t5&UXd|$nBJOJC>o!}22*h0DJ$bLz zUQiGqK!5-N0tALlU_C|rZhapP+g#=$K!Cug2rQ(C`rgICsLX3l0t5&UXckyX5ryLG zNAs#X0t5&UAV44sf!P#MUE7(@qPCg@2oNAZfB*pk1PBlyK%kYtOo}-9O3$t0)(H?G zu$&^s%g28t2oNC9wLofoXIxFKbe)&;go(ynyM>Z}bLRXxX^#K_0t5&UAV7cs0Rp`W zlvBj%eZACczB~d12oNAZfB*pk1PBlyK!5-N0$B=dr-<|0hnp;WP@4b&0t5&Qn!r(t S__7~+Fl6|AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!CtT z7x*v?!=)Z_wSC{dZ5OAKSM8Jbc{?|qJZo>YPus8UhqjsU)J)0bEZ?*^8&+WeU^p0e2`=;H~&hJdd?frJ9ogF9B?X~vT?_v1V{%B9k zCEwc@?YDOSuH;L*(f_UU5gfO*uRQEo#>caO)`g9*`vi(-2A^Bjni>mQK-nBkC+p8EF)#>~&{oMFY zZL~NuD8*2&AwvqR3I{Q9T(w8Wqyg$``zmb^2(4-+`3L}lvK_~0`sMfkS z8^0^5rgrM7-$MJ6vYjbqX=A$FEY5hZP|TjMIPuDpL!+iqITrGio^-kS7z4N`g3Et$ZwnW70D|z!Czm+(+dHT+2)4n#FW@@9= zH|kU{w>MoB>&J|^;Z1QR;y*c;3UFlwL$Li>2 zjx2FU^;1J` z@Tw1ZQ=`2YV)EU;xv=s@9LImus&Ce-LOhg3_4#$$thHz-`=R2DF9Z-k009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ c1Q0*~0R#|0009ILKmY**5I_I{1paSh($ literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len new file mode 100644 index 0000000000000000000000000000000000000000..b3155f95730bcd91e447627020d273d6a58689c7 GIT binary patch literal 8 McmZQz0D(pa00Bw>!TS|UJKW_S b_j$lW9`TqbJmneBS@D9Gyy7))c+0yV#1s{< literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i new file mode 100644 index 0000000000000000000000000000000000000000..ea2332f0e9865c3fc5ad466893faddb853d24bc9 GIT binary patch literal 32768 zcmeI&&r8#B9LMoDim*#C!oz|B(~2cT78ENgGBgYXqb69Fii)}=MZbjNV6gd46f$yG9o7nJ=3n{CpQ8JAmEz7b0hL)G<_{9xzA~y@fVXbQOOgv z9Cdnq8rqMxmCE&5kFU?gmXtcq^T8B&tk><~z===6+>Wgf2)01Vi1eNL*y(l4L9M^N zW2nJv{e0_EdVgTNajav$ef&Cqw-NdGyHM}feC8s6fPH~sBl3RRk%Ils(dzh8owj_R z>WfyY=%s1W_u0Qa^&6v?j6`7)=r$rdYi~Ub)6TQ)+OIh-_l`8qc8uo`uq7~RM2h*l z?Y8>S2LS{Suq}|(&zD(w&}zFc{SZLFzCg@~JbTm4|8nfp(h&g!5I_I{1Og_o-H23Q zINuVmwL-T}oqpdNyfX77bc?ev0tg_000IagfB*tM3N#s!s|O}l`nUq45hyFrW<;9b zP982>NWp>#6!m&6N;UskkYPR!$!pHs&GcR$S73Aq1rF-#=4br%+7Pbp%gPD$+Isy| z)|cT7MF0V-0>_QWtJZxJR-4ic0R#|0009ILKw!=Szl_M(vVjkCZcygLxb`pZIlZP# z8HYUzd{fUAsr#!umPf8EsrgrDMjk~j7=aK#009ILa7ZAg|KCmQ?_B3lWTIA3V9JPG z{CcUXf+H%@`kn4QlDq&ZEU6EOOEI-BV_3~$yV(9n>|z_+P&ol+DCjhL%&7G`(wI@|a|&q`Dx*~>j8f?c#9nOT z@%%HAaR|m-Z?W#R*83ITT$2}`j)uh+(1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72>km3FOy94nz!3^ z#P>yQN+Ek!)=rwcFZr?e_NB_hd(Vy&bi0 zza=}{d+n}v)b4H!TUSJb;gtckW4hdE?T?_1CC}XjSW=TvXIY@6m%F&i)L*Gp7DURXf z1IeG{FB`Zfw3N>7sN-bMt~j0DQpzqDisc&fW`WxW^aCvmCtTA{fQ@-zKLpC=kyCFj zIM!z$lPfN+O&R1thdvwmL;BEj@h+O2IulSX+V_rwSs{5l$WPk6o-N4}OG-P}(Z{|# z0sK&6ean=DumdPl6D;MDhOP`r(qXCdn6NmG*(@>I74L=n3}C0`o@Q}|EF1^0R^rS> zBA0uqe3sahQrSYX|@ zqhrn;deLH)hDM9MWzB}e_z=_z;A!gYc?>IyW> zdyjjL<~FgFbu5qpAWt66yW9Sb^5C_m(dj_{VprW^z-koiG>Z9fl*FA^}N6UK^aP>xJZ|j?SS9j`g){kXWck8(B)k%F@r}bSus{8f09@LY1SPcOJ1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly hK!5-N0t5&UAV7cs0RjXF5FkK+009C72>jmye*t2XCm#R+ literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len new file mode 100644 index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29 GIT binary patch literal 8 McmZQz0D%Su009U9fdBvi literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab new file mode 100644 index 0000000000000000000000000000000000000000..65cfa61e89f6292c22eff3b9b48629bfad6fc532 GIT binary patch literal 65536 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 b1ww&PAQT7%LV-{q6bJ=Efl%PDRp9>tzPX1! literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream new file mode 100644 index 0000000000000000000000000000000000000000..11ca7a41b038a01f289b82de55663dc9c2b376f7 GIT binary patch literal 32768 zcmeI(`@fG>+6VCO9^0l6IW)>d zcG{1U5Q%8yPz)wRi5iC@Y*Vw|YtQ%j`S}BGzud3;u&#AopX+md*0t7m>svOn==JIPe{<&3CFU(y!Kht*&&W@~^JF)p?g)9Epci@pf9?vM%WXk_k zd8Jw^{OgtR&ME%zqw(6#2da$PKg9DB+dmuKcEQBn?DFGZB~QNRzR-p-O}zi%x=)Ty zzw70S&BqMp%Nulzc?ozCSo( z%SO+)HECB${44rT+x1e1J!j41{k>(^K5V`cn+w&1L(cOh7VvAuubF>Xcd*y2&8cfP zL>wy}>N;Uj^}VTTJI=}j|BbIy{=~QNcZJ*79V;8cCvVs2-;AI5X6d)@AGd&i&$hYe zYvWQG^Sh_<=YQedzk8(I)`KhI;QcFG=j|Br{K&sQQ}LZ;?1($&H^dD``Qo1|zu9k6 zZ)=}a#^f${mpS;}+IiV+n)Ex}H5G7~HKyrMb~YCK_F_Ep{p_>V58(|y!RZfQcC5#~ zyzp~;wSA?;HMdRo<^23%O_{^KV;62&y_PJJcX+y&_ZU}p;k@%7f2>EU%F%4&TDHDz zQ@ihOxrH5e`RP0Sz=PH!iw=+vJiRwBdu0~9{RH0Tw7Yr*KWgqSz2o`I&i(p8?dyj=eya1d7cc7A|Bcb3 zu9s)LaxXslfs?$uha3Od5$Bhqp4!BIu?t&#CST&HFtXpL_$bf(mmWCDPrEiV%F9EW zs#Cj}cVv(6n~UFfu6X4;cFZ@Z<8PjCFF zJ%2K8J=%bO&FgJ=SH6s6_x8>s@8=&}J%_XJYqV%|#(Q-f@v7W!CLJmKT8EOJuWVba z+{WT#+w*5$x0%(~mi@U@R__Np^s2ov13%zl9G>t;z49NgYx>hFeax&U@M6 zA3xQrc}Ki3aE$l-Qzr|rJa1vV4}9Sd9Wzh8ndRT}o*i|+VFsR@C{D%(syv@ z58PeF={^6%U%Oal-qvGlcEA7J3+MTMz;8F6t9-WkqUZkce0}+*cW{vJn72@uA55#i zvun<4v7X@)>owHpUB^1j&wBCNLFQR8EayW!$Sl#Y8NcN1oyl#w=1y!Dbr{a###eUf zM2Bi?-lSu`FSUGO3-v-5_?xP6WCgrZjk6-Y-GEqr;9OPLHEq_)ySSxFDGSw#AFoDLlQ0gZSvB@t(sE zj>bK7VU4Dqt3&y^X4(4YC$1RqIX>_wRrA()-pjkV;Ne~!$7{%oEBox>v-!T5+H_-y zbGNOGx*zHU@7NE#-|oG<@PnPq&izKvZSfwe*D>lS{bRTEkUp~tzWaCr{LJqj|Jd8| z(Xo2It2h4b$x#=sIvRE1y^0H((m!=vvhBlfx%yuHu!9G1rPrh9<~QSqby&XCGrbnS z`uClB||@HNM;Rd-^i%i3JzqJ087N zXhyA1%DwYfx+)LysgC%i-wsjqfzHPHLSB7GC(UDhjCly_7Twl& zc@9@sJpFh|ol}DrSDWEIo%CFN45)SKY)l_;L!3A0o-4la zJ9YUzMTcEEyBD0`OP}KNP_O)fr~FnaRJ78Fe|X zW8pdb>QH^lr+E0$?QcUXjt@BDnS8=8;!yXk9QnhC=ugN`!910=+}Zc-W$FO_S$ABr zG%v61arTPrp8iuR==lrdTMo=jmG3zG)!z@+uZhd|=C?k_x@+{zOSvnGUJkD~F7Q)+ z#M|`Rb%W>@9&B1zwjJI)I^e0A;t$Zb&L4Pp5&6O^eJT6;E$fAG?&%GDZl3Y`6BRqJ zxk}x!?>l+J198cNxTCKBcfIpIl~HUUzOkdwv(LK1d)O6!nXYbq zhtKR-SL8*1OuwG5HS7Glj(v8oeE9CfOLJT9ey!5%6MsFOhcEP5e(6!v&!B&Be{RXL z>k4q|Q;l8zdM`ie`HXvU!t%Osl6T{-*_ks({BWli;^hy05XbuIcP=xp^~*TxDZAqE z-F?&FD(X3%i~J4v;=ercTYaSM88_g~n^()%&EIS&lFp;&MSdAN7>;zuRo%S0Wb0*9 zTkM<1KRP2H^2BfbSURuxNGHXKr|I{2Q>Jd?nBPwAc7H8?>w$hr{df8IliwQ$w;S%A zUrL@fAN*?-akpGoH0!xXv+q$4{G-pF8z1jesXx>@)8Sd~&5JMMw7!|gm0xs<-|C%y z-8cXIb9kr!aBsYP{rq|JwZ5}2p~DY+T&1*p;D>qG5tq7V*E*T@OWmj=`hz$8ly`RV zME*QiFV<)8SNxJ)=)qGR&(cfr)1T;n#?U!%r(?c@yZGpHfj*VksV?P}KlIc5n;Jfr z=X-p8Y1JE})UEkF?^I{~Bz#a`;uR;mfBI@j!y(l#8qS`)iHALQ2L4*B3BT!v=hg+| z^!fOa(faAq>RJ84$$RFT>f^LdeKE!kTx;|Uzn|!!uFZOHr z_Rh@q#(55R@yIi~);IR71FrT#@#0SNvrUpY=m=-cUE}svF2{;2&;)sKBAzT}V1xJaGrAK{FL?8ryF2LB?D0{-lMm2s{O{pKIs z*fAd-yWY3GbNz`I-1q3=={x5ws$8fzosanqe2w#sI(-8^iPv-WZXWv)=LYnWpVk%Y z0^G%k5AxwTJNA3VEqH18DLhVPytzYMc;S8RJ4#Ns-{sf0zw6l*A3T>YapJ3a=oUM_ zJJxZTxag$k&;6<}7vmaDAErO9U*`NfBUH#x>^~!H`XnynYZ&c%Ez0!5BkG^j{OTB!U+%UN8QKuAmAad{Ba-aG@N^M?f<{a<&R$R`}@J)Kgz!K8*bs8 zszW?i2z?7ZrR(gAn;ms+-QW-0>8d(`d*o;6N7#j%al^7F^x!xA;cUO{JzW#G^DO-U z9dd7;^m(Q4)Qvd2ca8h;pqp6@{`fHcwO$$L{Kt7(DkEc48V@*&+j;}{v>kpL$A0i@ z8^7qts1JX08V>A?&&0)k5y?}(Y}J;@U@SD2mbOyUf9zQickLJO@8o0o$-@S!^wVGUBD4ux8C%4 z>__m*y*#n64`c`K#@k13+%otZ_{f+2iv5Z8%)E3j%@g(m|99x8>5qO3{_N-zeSf@a zP6K`S`NK9`tltuk=jU!OGao_J}nRY+JE_|MeyTqj5p{KJm$4J^DBPP zbN)Er5mzeovG(2eF>s($?9vZ@;+uPT@q=A?&?m4jPu^P>yr)m*uYc99gY-hZ;In;` z@Al7aUvMrI`b*>GNBnrnALl{V3wd>qFLZ*A8PC4&t;hIEPxy&%?5SJh#3TQ3k~elH zEIl(>9O9QBcAT5Ai$A`XN8ihb_s&P?4}CIDo#H>ebuT}@lLzy|#dCTK5B;0E#b4v} zufD^xIB(#WYi5PbNBs_B|6x2l;V2*c(O;_reIvW_;<@Bus@m8GT({I5qf9#J{tkd#q9Gu0CKkS>oAfBZq z>9_M=`zLyU7k)P|zjHwQtzEYbjC~Y+H6AXm;xezkgN{3Y<_|sKpFEgXoN&OGC2MlN z)IaHW?KAnO&x?5ox+7ltU>x0%NAa4+x**@rwwaJ4FZwq;p^Nw+Z}_=&UgP*Xi98#p z?%Bfw_IzhP{>qcO^WJkhArJh=KjUw#{lPHj?05$s@kM`vuF;F(-TNNr7u^((eQU%a z#Gyarcl58I=lh54z;4-sOYtz*{{0iu?Pp9)zF?M_Ug}bCw7T?u1|Ijj(6r)@2>R1Jl4-oX8n4<{*hnKC*@5UHrx3D z9TZ3ABe#{Z&Z|fKv;Xy+?nVFob{_u8i|5uu_MOwgl`h8b!#>^BdRj2<$O=4o_udb> z;&H7NUE=xp%m3V4L?5Pa)i=zk(!CB{qHpkaZU!HDkWb%vP7nF#J6Cy3^V2>3gkR=o z<6F4G!}z$agnX(W_tp=;>(G-lFJ1A6y{N|lx5Jk{`7S$Mf1VQez0MEuIdk~7)qelW z-E#U>`iKww({GFabmb|xh!dJh?!w>KA)co)@zq<2Y-to^m z;@-UeUZGi&!j;%nUt-K$zPgtDttzpoe){}I9_TjS>g#-u&++`0t_D2ton3n2%0KwY zKY#KkzIq|N^u7F+uc(J%{Szk~`MY|?$wg0GyC>r4d;EhhU1!()F}^Ubd%ypv3;xHy zCkQ%B5BAMJZ6l z%A@mbI!>o5bp7Zs{xoRS`(=66NAbH!vDYimpSVvB{@6F*2^|xkel4#5Vc%zcbv{qO z;SFE>Wq(=GjYGZHr^h&guE^&nr4Oue9;C13f7XF_e<^gV@?G(FozTC-MZYZ{@K)c} zOY4gH@xXlg6?ota-29$S&+sMgL&ClW@Az%JK41SRkN9aFkq^ArXVEk3kN$?gQ*xUZ zQU`GHJzc-I$!oi;AI4cPtb5i+{D|vU_>SN5wY<^(XP*9eK}&ka9lI4>~5#)>+Dyt41Y$5j232b}lNM|SBh-2EMx{ewP49s9k-K8%0tsFPSPp-)Ql zhCk{NPV^4We&>tpXxLxF&H1$F^2e{UYd;-gU#tH3@ArD=Sd&|wsWbDt!msKFe5bCA zlLvU=F?;x_p5V=YI7I)$dW`>g9PtkM*H7u+d=C%y=sN!TJ&Rt%^TnY5)-~hwb-vf1 z&@K1TUikYVak1|`o{1mNT;as;RNbR*!dpI!>)xgJ9rD`Y-|LF1e|dyw{$uwqQ#blO z_L_WqMg03Jb;D2Vi|6u!xAx=W#|O{x&%AWjJoFI`&K2c}KKkBypMAhvZ*2RAIxe(# zR`!C0XwcG$Jv#C)exE&VPezwE=^cl=ie`e@Icb6R&j=Qsb&FMsfWzj62> zk9d^+9Ty(8YfbE9`B{b!9X6^uav(VSeBPz4qMip7~)tV#huE`XKqhH{-2O@}I9_csJ&;5Ow`en!Z$iH%ry*>xu#1r|LO5LJ9=(V_< zGdY*UZ#c;t|LouS4KG*cx%A=Cq0aTh>wE}a>cqYVPW+_f=CPj0Gyd|29`c7?iCZ7S zuDtlpIfeREN9L!S?78=z?iW36@s1t*^j>{i_tYml z@`xwy&0`%gUR_4K!a86aeu{%0>8tR~^SEw=y23NKxH|W8E{LCWKH3R(UF{3`i*Nj* zi*TWP?&EqC)-m<$+yy_)lexX*=srK)c`bc~gL4ddH6J~Khbz4B!gGAU8{gxFtKS9i zRGuP#L*C#}__cby>5bpf^r3Ox34Zu{GXB=xHLbO{@ubtLiWlh1r@9kIEjeTc`Z*`Ye2b}-tzxa(h)amqdpz^rc@n$E$-DT>+vWP4yPfyjcRH7&$L#oCKY^d_?HgDB^7?mpVBPok zkN&Qgeu$Uu(qa5a`x)1_zz=<>zZWx(|K@Fa@}jt3q`U0Xd3N|`JigEa=Wf;o`k+5j z=iW1a#};MMb$A`htx z@%qlZ?Bg5$;g@qEfA0nd`sz7dbyZi9x51wG^pD@><)1vc>i=VW!9VzmKl&B&&mTIO z=C|?I9Xdjn@acy3Cnj4T#BChDdai$9-#&r;8^_Iv`*S#3U)W_29_-6|IzD#zB@XKk zUKywSoG*B;|8%9p(ci1zUZ>8T58#dezi{T+*KZZ4_kM@;_qzNxkGvUgettS{)IZ@n z9O!|46TS33{>5{su-?VLANxF2++pxg1>A?U6;W;dQYgnPKNqki~9@5HTs zUb^9-_2TgN4%Rz<;S=2WSHS;|CqzHPzEOPY_o3sx!+N>2Wc)jcurFc{FJ0kly#0_q zZ{N`xC)J-m)79T+$s=C*j(>DU{^Xq>{GwC*bq^Q&uQdN%hhNY+{*Ep;$-e}F1c3yB z1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB z1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB w1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB1c3yB{|^HH0jo{6#sB~S literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len new file mode 100644 index 0000000000000000000000000000000000000000..c59a802042d39e4d864c05d6444f1490915782be GIT binary patch literal 8 McmZQz00CnM006E4bN~PV literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len new file mode 100644 index 0000000000000000000000000000000000000000..8b704bc421781284a1b22aa53f94aa035acfc741 GIT binary patch literal 8 McmZQz0D;X800FK5^Z)<= literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at new file mode 100644 index 0000000000000000000000000000000000000000..5e04b8e4fd0a8dd86beaa17f0d61e638f7b01719 GIT binary patch literal 11033 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 literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i new file mode 100644 index 0000000000000000000000000000000000000000..be464ad444c81fa96235384c8f7bdba94471baa8 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len new file mode 100644 index 0000000000000000000000000000000000000000..131e265740f37d77b7c4a3676d2a7704ca3e4a29 GIT binary patch literal 8 McmZQz0D%Su009U9fdBvi literal 0 HcmV?d00001 diff --git a/core-kotlin/build/kotlin/compileKotlin/data-container-format-version.txt b/core-kotlin/build/kotlin/compileKotlin/data-container-format-version.txt new file mode 100644 index 0000000000..b01b80f991 --- /dev/null +++ b/core-kotlin/build/kotlin/compileKotlin/data-container-format-version.txt @@ -0,0 +1 @@ +2011001 \ No newline at end of file diff --git a/core-kotlin/build/kotlin/compileKotlin/format-version.txt b/core-kotlin/build/kotlin/compileKotlin/format-version.txt new file mode 100644 index 0000000000..2408adbb9f --- /dev/null +++ b/core-kotlin/build/kotlin/compileKotlin/format-version.txt @@ -0,0 +1 @@ +8011001 \ No newline at end of file diff --git a/core-kotlin/build/kotlin/compileKotlin/gradle-format-version.txt b/core-kotlin/build/kotlin/compileKotlin/gradle-format-version.txt new file mode 100644 index 0000000000..7289c6bdc4 --- /dev/null +++ b/core-kotlin/build/kotlin/compileKotlin/gradle-format-version.txt @@ -0,0 +1 @@ +4011001 \ No newline at end of file diff --git a/core-kotlin/build/kotlin/compileKotlin/last-build.bin b/core-kotlin/build/kotlin/compileKotlin/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..baf638a29b8c82e55dfbf2bbe5906ade6154ba63 GIT binary patch literal 81 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

<5G2M1WZP5 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/core-kotlin/gradlew.bat b/core-kotlin/gradlew.bat new file mode 100755 index 0000000000..e95643d6a2 --- /dev/null +++ b/core-kotlin/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/core-kotlin/kotlin-ktor/.gitignore b/core-kotlin/kotlin-ktor/.gitignore new file mode 100644 index 0000000000..0c017e8f8c --- /dev/null +++ b/core-kotlin/kotlin-ktor/.gitignore @@ -0,0 +1,14 @@ +/bin/ + +#ignore gradle +.gradle/ + + +#ignore build and generated files +build/ +node/ +out/ + +#ignore installed node modules and package lock file +node_modules/ +package-lock.json diff --git a/core-kotlin/kotlin-ktor/build.gradle b/core-kotlin/kotlin-ktor/build.gradle new file mode 100755 index 0000000000..5c8f523cf1 --- /dev/null +++ b/core-kotlin/kotlin-ktor/build.gradle @@ -0,0 +1,47 @@ + + +group 'com.baeldung.ktor' +version '1.0-SNAPSHOT' + + +buildscript { + ext.kotlin_version = '1.2.41' + ext.ktor_version = '0.9.2' + + repositories { + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +apply plugin: 'java' +apply plugin: 'kotlin' +apply plugin: 'application' + +mainClassName = 'APIServer.kt' + +sourceCompatibility = 1.8 +compileKotlin { kotlinOptions.jvmTarget = "1.8" } +compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } + +kotlin { experimental { coroutines "enable" } } + +repositories { + mavenCentral() + jcenter() + maven { url "https://dl.bintray.com/kotlin/ktor" } +} + +dependencies { + compile "io.ktor:ktor-server-netty:$ktor_version" + compile "ch.qos.logback:logback-classic:1.2.1" + compile "io.ktor:ktor-gson:$ktor_version" + testCompile group: 'junit', name: 'junit', version: '4.12' + +} +task runServer(type: JavaExec) { + main = 'APIServer' + classpath = sourceSets.main.runtimeClasspath +} \ No newline at end of file diff --git a/core-kotlin/kotlin-ktor/gradle/wrapper/gradle-wrapper.jar b/core-kotlin/kotlin-ktor/gradle/wrapper/gradle-wrapper.jar new file mode 100755 index 0000000000000000000000000000000000000000..01b8bf6b1f99cad9213fc495b33ad5bbab8efd20 GIT binary patch literal 54329 zcmagFV|ZrKvM!pAZQHhO+qP}9lTNj?q^^Y^VFp)SH8qbSJ)2BQ2giqeFT zAwqu@)c?v~^Z#E_K}1nTQbJ9gQ9<%vVRAxVj)8FwL5_iTdUB>&m3fhE=kRWl;g`&m z!W5kh{WsV%fO*%je&j+Lv4xxK~zsEYQls$Q-p&dwID|A)!7uWtJF-=Tm1{V@#x*+kUI$=%KUuf2ka zjiZ{oiL1MXE2EjciJM!jrjFNwCh`~hL>iemrqwqnX?T*MX;U>>8yRcZb{Oy+VKZos zLiFKYPw=LcaaQt8tj=eoo3-@bG_342HQ%?jpgAE?KCLEHC+DmjxAfJ%Og^$dpC8Xw zAcp-)tfJm}BPNq_+6m4gBgBm3+CvmL>4|$2N$^Bz7W(}fz1?U-u;nE`+9`KCLuqg} zwNstNM!J4Uw|78&Y9~9>MLf56to!@qGkJw5Thx%zkzj%Ek9Nn1QA@8NBXbwyWC>9H z#EPwjMNYPigE>*Ofz)HfTF&%PFj$U6mCe-AFw$U%-L?~-+nSXHHKkdgC5KJRTF}`G zE_HNdrE}S0zf4j{r_f-V2imSqW?}3w-4=f@o@-q+cZgaAbZ((hn))@|eWWhcT2pLpTpL!;_5*vM=sRL8 zqU##{U#lJKuyqW^X$ETU5ETeEVzhU|1m1750#f}38_5N9)B_2|v@1hUu=Kt7-@dhA zq_`OMgW01n`%1dB*}C)qxC8q;?zPeF_r;>}%JYmlER_1CUbKa07+=TV45~symC*g8 zW-8(gag#cAOuM0B1xG8eTp5HGVLE}+gYTmK=`XVVV*U!>H`~j4+ROIQ+NkN$LY>h4 zqpwdeE_@AX@PL};e5vTn`Ro(EjHVf$;^oiA%@IBQq>R7_D>m2D4OwwEepkg}R_k*M zM-o;+P27087eb+%*+6vWFCo9UEGw>t&WI17Pe7QVuoAoGHdJ(TEQNlJOqnjZ8adCb zI`}op16D@v7UOEo%8E-~m?c8FL1utPYlg@m$q@q7%mQ4?OK1h%ODjTjFvqd!C z-PI?8qX8{a@6d&Lb_X+hKxCImb*3GFemm?W_du5_&EqRq!+H?5#xiX#w$eLti-?E$;Dhu`{R(o>LzM4CjO>ICf z&DMfES#FW7npnbcuqREgjPQM#gs6h>`av_oEWwOJZ2i2|D|0~pYd#WazE2Bbsa}X@ zu;(9fi~%!VcjK6)?_wMAW-YXJAR{QHxrD5g(ou9mR6LPSA4BRG1QSZT6A?kelP_g- zH(JQjLc!`H4N=oLw=f3{+WmPA*s8QEeEUf6Vg}@!xwnsnR0bl~^2GSa5vb!Yl&4!> zWb|KQUsC$lT=3A|7vM9+d;mq=@L%uWKwXiO9}a~gP4s_4Yohc!fKEgV7WbVo>2ITbE*i`a|V!^p@~^<={#?Gz57 zyPWeM2@p>D*FW#W5Q`1`#5NW62XduP1XNO(bhg&cX`-LYZa|m-**bu|>}S;3)eP8_ zpNTnTfm8 ze+7wDH3KJ95p)5tlwk`S7mbD`SqHnYD*6`;gpp8VdHDz%RR_~I_Ar>5)vE-Pgu7^Y z|9Px+>pi3!DV%E%4N;ii0U3VBd2ZJNUY1YC^-e+{DYq+l@cGtmu(H#Oh%ibUBOd?C z{y5jW3v=0eV0r@qMLgv1JjZC|cZ9l9Q)k1lLgm))UR@#FrJd>w^`+iy$c9F@ic-|q zVHe@S2UAnc5VY_U4253QJxm&Ip!XKP8WNcnx9^cQ;KH6PlW8%pSihSH2(@{2m_o+m zr((MvBja2ctg0d0&U5XTD;5?d?h%JcRJp{_1BQW1xu&BrA3(a4Fh9hon-ly$pyeHq zG&;6q?m%NJ36K1Sq_=fdP(4f{Hop;_G_(i?sPzvB zDM}>*(uOsY0I1j^{$yn3#U(;B*g4cy$-1DTOkh3P!LQ;lJlP%jY8}Nya=h8$XD~%Y zbV&HJ%eCD9nui-0cw!+n`V~p6VCRqh5fRX z8`GbdZ@73r7~myQLBW%db;+BI?c-a>Y)m-FW~M=1^|<21_Sh9RT3iGbO{o-hpN%d6 z7%++#WekoBOP^d0$$|5npPe>u3PLvX_gjH2x(?{&z{jJ2tAOWTznPxv-pAv<*V7r$ z6&glt>7CAClWz6FEi3bToz-soY^{ScrjwVPV51=>n->c(NJngMj6TyHty`bfkF1hc zkJS%A@cL~QV0-aK4>Id!9dh7>0IV;1J9(myDO+gv76L3NLMUm9XyPauvNu$S<)-|F zZS}(kK_WnB)Cl`U?jsdYfAV4nrgzIF@+%1U8$poW&h^c6>kCx3;||fS1_7JvQT~CV zQ8Js+!p)3oW>Df(-}uqC`Tcd%E7GdJ0p}kYj5j8NKMp(KUs9u7?jQ94C)}0rba($~ zqyBx$(1ae^HEDG`Zc@-rXk1cqc7v0wibOR4qpgRDt#>-*8N3P;uKV0CgJE2SP>#8h z=+;i_CGlv+B^+$5a}SicVaSeaNn29K`C&=}`=#Nj&WJP9Xhz4mVa<+yP6hkrq1vo= z1rX4qg8dc4pmEvq%NAkpMK>mf2g?tg_1k2%v}<3`$6~Wlq@ItJ*PhHPoEh1Yi>v57 z4k0JMO)*=S`tKvR5gb-(VTEo>5Y>DZJZzgR+j6{Y`kd|jCVrg!>2hVjz({kZR z`dLlKhoqT!aI8=S+fVp(5*Dn6RrbpyO~0+?fy;bm$0jmTN|t5i6rxqr4=O}dY+ROd zo9Et|x}!u*xi~>-y>!M^+f&jc;IAsGiM_^}+4|pHRn{LThFFpD{bZ|TA*wcGm}XV^ zr*C6~@^5X-*R%FrHIgo-hJTBcyQ|3QEj+cSqp#>&t`ZzB?cXM6S(lRQw$I2?m5=wd z78ki`R?%;o%VUhXH?Z#(uwAn9$m`npJ=cA+lHGk@T7qq_M6Zoy1Lm9E0UUysN)I_x zW__OAqvku^>`J&CB=ie@yNWsaFmem}#L3T(x?a`oZ+$;3O-icj2(5z72Hnj=9Z0w% z<2#q-R=>hig*(t0^v)eGq2DHC%GymE-_j1WwBVGoU=GORGjtaqr0BNigOCqyt;O(S zKG+DoBsZU~okF<7ahjS}bzwXxbAxFfQAk&O@>LsZMsZ`?N?|CDWM(vOm%B3CBPC3o z%2t@%H$fwur}SSnckUm0-k)mOtht`?nwsDz=2#v=RBPGg39i#%odKq{K^;bTD!6A9 zskz$}t)sU^=a#jLZP@I=bPo?f-L}wpMs{Tc!m7-bi!Ldqj3EA~V;4(dltJmTXqH0r z%HAWKGutEc9vOo3P6Q;JdC^YTnby->VZ6&X8f{obffZ??1(cm&L2h7q)*w**+sE6dG*;(H|_Q!WxU{g)CeoT z(KY&bv!Usc|m+Fqfmk;h&RNF|LWuNZ!+DdX*L=s-=_iH=@i` z?Z+Okq^cFO4}_n|G*!)Wl_i%qiMBaH8(WuXtgI7EO=M>=i_+;MDjf3aY~6S9w0K zUuDO7O5Ta6+k40~xh~)D{=L&?Y0?c$s9cw*Ufe18)zzk%#ZY>Tr^|e%8KPb0ht`b( zuP@8#Ox@nQIqz9}AbW0RzE`Cf>39bOWz5N3qzS}ocxI=o$W|(nD~@EhW13Rj5nAp; zu2obEJa=kGC*#3=MkdkWy_%RKcN=?g$7!AZ8vBYKr$ePY(8aIQ&yRPlQ=mudv#q$q z4%WzAx=B{i)UdLFx4os?rZp6poShD7Vc&mSD@RdBJ=_m^&OlkEE1DFU@csgKcBifJ zz4N7+XEJhYzzO=86 z#%eBQZ$Nsf2+X0XPHUNmg#(sNt^NW1Y0|M(${e<0kW6f2q5M!2YE|hSEQ*X-%qo(V zHaFwyGZ0on=I{=fhe<=zo{=Og-_(to3?cvL4m6PymtNsdDINsBh8m>a%!5o3s(en) z=1I z6O+YNertC|OFNqd6P=$gMyvmfa`w~p9*gKDESFqNBy(~Zw3TFDYh}$iudn)9HxPBi zdokK@o~nu?%imcURr5Y~?6oo_JBe}t|pU5qjai|#JDyG=i^V~7+a{dEnO<(y>ahND#_X_fcEBNiZ)uc&%1HVtx8Ts z*H_Btvx^IhkfOB#{szN*n6;y05A>3eARDXslaE>tnLa>+`V&cgho?ED+&vv5KJszf zG4@G;7i;4_bVvZ>!mli3j7~tPgybF5|J6=Lt`u$D%X0l}#iY9nOXH@(%FFJLtzb%p zzHfABnSs;v-9(&nzbZytLiqqDIWzn>JQDk#JULcE5CyPq_m#4QV!}3421haQ+LcfO*>r;rg6K|r#5Sh|y@h1ao%Cl)t*u`4 zMTP!deC?aL7uTxm5^nUv#q2vS-5QbBKP|drbDXS%erB>fYM84Kpk^au99-BQBZR z7CDynflrIAi&ahza+kUryju5LR_}-Z27g)jqOc(!Lx9y)e z{cYc&_r947s9pteaa4}dc|!$$N9+M38sUr7h(%@Ehq`4HJtTpA>B8CLNO__@%(F5d z`SmX5jbux6i#qc}xOhumzbAELh*Mfr2SW99=WNOZRZgoCU4A2|4i|ZVFQt6qEhH#B zK_9G;&h*LO6tB`5dXRSBF0hq0tk{2q__aCKXYkP#9n^)@cq}`&Lo)1KM{W+>5mSed zKp~=}$p7>~nK@va`vN{mYzWN1(tE=u2BZhga5(VtPKk(*TvE&zmn5vSbjo zZLVobTl%;t@6;4SsZ>5+U-XEGUZGG;+~|V(pE&qqrp_f~{_1h@5ZrNETqe{bt9ioZ z#Qn~gWCH!t#Ha^n&fT2?{`}D@s4?9kXj;E;lWV9Zw8_4yM0Qg-6YSsKgvQ*fF{#Pq z{=(nyV>#*`RloBVCs;Lp*R1PBIQOY=EK4CQa*BD0MsYcg=opP?8;xYQDSAJBeJpw5 zPBc_Ft9?;<0?pBhCmOtWU*pN*;CkjJ_}qVic`}V@$TwFi15!mF1*m2wVX+>5p%(+R zQ~JUW*zWkalde{90@2v+oVlkxOZFihE&ZJ){c?hX3L2@R7jk*xjYtHi=}qb+4B(XJ z$gYcNudR~4Kz_WRq8eS((>ALWCO)&R-MXE+YxDn9V#X{_H@j616<|P(8h(7z?q*r+ zmpqR#7+g$cT@e&(%_|ipI&A%9+47%30TLY(yuf&*knx1wNx|%*H^;YB%ftt%5>QM= z^i;*6_KTSRzQm%qz*>cK&EISvF^ovbS4|R%)zKhTH_2K>jP3mBGn5{95&G9^a#4|K zv+!>fIsR8z{^x4)FIr*cYT@Q4Z{y}};rLHL+atCgHbfX*;+k&37DIgENn&=k(*lKD zG;uL-KAdLn*JQ?@r6Q!0V$xXP=J2i~;_+i3|F;_En;oAMG|I-RX#FwnmU&G}w`7R{ z788CrR-g1DW4h_`&$Z`ctN~{A)Hv_-Bl!%+pfif8wN32rMD zJDs$eVWBYQx1&2sCdB0!vU5~uf)=vy*{}t{2VBpcz<+~h0wb7F3?V^44*&83Z2#F` z32!rd4>uc63rQP$3lTH3zb-47IGR}f)8kZ4JvX#toIpXH`L%NnPDE~$QI1)0)|HS4 zVcITo$$oWWwCN@E-5h>N?Hua!N9CYb6f8vTFd>h3q5Jg-lCI6y%vu{Z_Uf z$MU{{^o~;nD_@m2|E{J)q;|BK7rx%`m``+OqZAqAVj-Dy+pD4-S3xK?($>wn5bi90CFAQ+ACd;&m6DQB8_o zjAq^=eUYc1o{#+p+ zn;K<)Pn*4u742P!;H^E3^Qu%2dM{2slouc$AN_3V^M7H_KY3H)#n7qd5_p~Za7zAj|s9{l)RdbV9e||_67`#Tu*c<8!I=zb@ z(MSvQ9;Wrkq6d)!9afh+G`!f$Ip!F<4ADdc*OY-y7BZMsau%y?EN6*hW4mOF%Q~bw z2==Z3^~?q<1GTeS>xGN-?CHZ7a#M4kDL zQxQr~1ZMzCSKFK5+32C%+C1kE#(2L=15AR!er7GKbp?Xd1qkkGipx5Q~FI-6zt< z*PTpeVI)Ngnnyaz5noIIgNZtb4bQdKG{Bs~&tf)?nM$a;7>r36djllw%hQxeCXeW^ z(i6@TEIuxD<2ulwLTt|&gZP%Ei+l!(%p5Yij6U(H#HMkqM8U$@OKB|5@vUiuY^d6X zW}fP3;Kps6051OEO(|JzmVU6SX(8q>*yf*x5QoxDK={PH^F?!VCzES_Qs>()_y|jg6LJlJWp;L zKM*g5DK7>W_*uv}{0WUB0>MHZ#oJZmO!b3MjEc}VhsLD~;E-qNNd?x7Q6~v zR=0$u>Zc2Xr}>x_5$-s#l!oz6I>W?lw;m9Ae{Tf9eMX;TI-Wf_mZ6sVrMnY#F}cDd z%CV*}fDsXUF7Vbw>PuDaGhu631+3|{xp<@Kl|%WxU+vuLlcrklMC!Aq+7n~I3cmQ! z`e3cA!XUEGdEPSu``&lZEKD1IKO(-VGvcnSc153m(i!8ohi`)N2n>U_BemYJ`uY>8B*Epj!oXRLV}XK}>D*^DHQ7?NY*&LJ9VSo`Ogi9J zGa;clWI8vIQqkngv2>xKd91K>?0`Sw;E&TMg&6dcd20|FcTsnUT7Yn{oI5V4@Ow~m zz#k~8TM!A9L7T!|colrC0P2WKZW7PNj_X4MfESbt<-soq*0LzShZ}fyUx!(xIIDwx zRHt^_GAWe0-Vm~bDZ(}XG%E+`XhKpPlMBo*5q_z$BGxYef8O!ToS8aT8pmjbPq)nV z%x*PF5ZuSHRJqJ!`5<4xC*xb2vC?7u1iljB_*iUGl6+yPyjn?F?GOF2_KW&gOkJ?w z3e^qc-te;zez`H$rsUCE0<@7PKGW?7sT1SPYWId|FJ8H`uEdNu4YJjre`8F*D}6Wh z|FQ`xf7yiphHIAkU&OYCn}w^ilY@o4larl?^M7&8YI;hzBIsX|i3UrLsx{QDKwCX< zy;a>yjfJ6!sz`NcVi+a!Fqk^VE^{6G53L?@Tif|j!3QZ0fk9QeUq8CWI;OmO-Hs+F zuZ4sHLA3{}LR2Qlyo+{d@?;`tpp6YB^BMoJt?&MHFY!JQwoa0nTSD+#Ku^4b{5SZVFwU9<~APYbaLO zu~Z)nS#dxI-5lmS-Bnw!(u15by(80LlC@|ynj{TzW)XcspC*}z0~8VRZq>#Z49G`I zgl|C#H&=}n-ajxfo{=pxPV(L*7g}gHET9b*s=cGV7VFa<;Htgjk>KyW@S!|z`lR1( zGSYkEl&@-bZ*d2WQ~hw3NpP=YNHF^XC{TMG$Gn+{b6pZn+5=<()>C!N^jncl0w6BJ zdHdnmSEGK5BlMeZD!v4t5m7ct7{k~$1Ie3GLFoHjAH*b?++s<|=yTF+^I&jT#zuMx z)MLhU+;LFk8bse|_{j+d*a=&cm2}M?*arjBPnfPgLwv)86D$6L zLJ0wPul7IenMvVAK$z^q5<^!)7aI|<&GGEbOr=E;UmGOIa}yO~EIr5xWU_(ol$&fa zR5E(2vB?S3EvJglTXdU#@qfDbCYs#82Yo^aZN6`{Ex#M)easBTe_J8utXu(fY1j|R z9o(sQbj$bKU{IjyhosYahY{63>}$9_+hWxB3j}VQkJ@2$D@vpeRSldU?&7I;qd2MF zSYmJ>zA(@N_iK}m*AMPIJG#Y&1KR)6`LJ83qg~`Do3v^B0>fU&wUx(qefuTgzFED{sJ65!iw{F2}1fQ3= ziFIP{kezQxmlx-!yo+sC4PEtG#K=5VM9YIN0z9~c4XTX?*4e@m;hFM!zVo>A`#566 z>f&3g94lJ{r)QJ5m7Xe3SLau_lOpL;A($wsjHR`;xTXgIiZ#o&vt~ zGR6KdU$FFbLfZCC3AEu$b`tj!9XgOGLSV=QPIYW zjI!hSP#?8pn0@ezuenOzoka8!8~jXTbiJ6+ZuItsWW03uzASFyn*zV2kIgPFR$Yzm zE<$cZlF>R8?Nr2_i?KiripBc+TGgJvG@vRTY2o?(_Di}D30!k&CT`>+7ry2!!iC*X z<@=U0_C#16=PN7bB39w+zPwDOHX}h20Ap);dx}kjXX0-QkRk=cr};GYsjSvyLZa-t zzHONWddi*)RDUH@RTAsGB_#&O+QJaaL+H<<9LLSE+nB@eGF1fALwjVOl8X_sdOYme z0lk!X=S(@25=TZHR7LlPp}fY~yNeThMIjD}pd9+q=j<_inh0$>mIzWVY+Z9p<{D^#0Xk+b_@eNSiR8;KzSZ#7lUsk~NGMcB8C2c=m2l5paHPq`q{S(kdA7Z1a zyfk2Y;w?^t`?@yC5Pz9&pzo}Hc#}mLgDmhKV|PJ3lKOY(Km@Fi2AV~CuET*YfUi}u zfInZnqDX(<#vaS<^fszuR=l)AbqG{}9{rnyx?PbZz3Pyu!eSJK`uwkJU!ORQXy4x83r!PNgOyD33}}L=>xX_93l6njNTuqL8J{l%*3FVn3MG4&Fv*`lBXZ z?=;kn6HTT^#SrPX-N)4EZiIZI!0ByXTWy;;J-Tht{jq1mjh`DSy7yGjHxIaY%*sTx zuy9#9CqE#qi>1misx=KRWm=qx4rk|}vd+LMY3M`ow8)}m$3Ggv&)Ri*ON+}<^P%T5 z_7JPVPfdM=Pv-oH<tecoE}(0O7|YZc*d8`Uv_M*3Rzv7$yZnJE6N_W=AQ3_BgU_TjA_T?a)U1csCmJ&YqMp-lJe`y6>N zt++Bi;ZMOD%%1c&-Q;bKsYg!SmS^#J@8UFY|G3!rtyaTFb!5@e(@l?1t(87ln8rG? z--$1)YC~vWnXiW3GXm`FNSyzu!m$qT=Eldf$sMl#PEfGmzQs^oUd=GIQfj(X=}dw+ zT*oa0*oS%@cLgvB&PKIQ=Ok?>x#c#dC#sQifgMwtAG^l3D9nIg(Zqi;D%807TtUUCL3_;kjyte#cAg?S%e4S2W>9^A(uy8Ss0Tc++ZTjJw1 z&Em2g!3lo@LlDyri(P^I8BPpn$RE7n*q9Q-c^>rfOMM6Pd5671I=ZBjAvpj8oIi$! zl0exNl(>NIiQpX~FRS9UgK|0l#s@#)p4?^?XAz}Gjb1?4Qe4?j&cL$C8u}n)?A@YC zfmbSM`Hl5pQFwv$CQBF=_$Sq zxsV?BHI5bGZTk?B6B&KLdIN-40S426X3j_|ceLla*M3}3gx3(_7MVY1++4mzhH#7# zD>2gTHy*%i$~}mqc#gK83288SKp@y3wz1L_e8fF$Rb}ex+`(h)j}%~Ld^3DUZkgez zOUNy^%>>HHE|-y$V@B}-M|_{h!vXpk01xaD%{l{oQ|~+^>rR*rv9iQen5t?{BHg|% zR`;S|KtUb!X<22RTBA4AAUM6#M?=w5VY-hEV)b`!y1^mPNEoy2K)a>OyA?Q~Q*&(O zRzQI~y_W=IPi?-OJX*&&8dvY0zWM2%yXdFI!D-n@6FsG)pEYdJbuA`g4yy;qrgR?G z8Mj7gv1oiWq)+_$GqqQ$(ZM@#|0j7})=#$S&hZwdoijFI4aCFLVI3tMH5fLreZ;KD zqA`)0l~D2tuIBYOy+LGw&hJ5OyE+@cnZ0L5+;yo2pIMdt@4$r^5Y!x7nHs{@>|W(MzJjATyWGNwZ^4j+EPU0RpAl-oTM@u{lx*i0^yyWPfHt6QwPvYpk9xFMWfBFt!+Gu6TlAmr zeQ#PX71vzN*_-xh&__N`IXv6`>CgV#eA_%e@7wjgkj8jlKzO~Ic6g$cT`^W{R{606 zCDP~+NVZ6DMO$jhL~#+!g*$T!XW63#(ngDn#Qwy71yj^gazS{e;3jGRM0HedGD@pt z?(ln3pCUA(ekqAvvnKy0G@?-|-dh=eS%4Civ&c}s%wF@0K5Bltaq^2Os1n6Z3%?-Q zAlC4goQ&vK6TpgtzkHVt*1!tBYt-`|5HLV1V7*#45Vb+GACuU+QB&hZ=N_flPy0TY zR^HIrdskB#<$aU;HY(K{a3(OQa$0<9qH(oa)lg@Uf>M5g2W0U5 zk!JSlhrw8quBx9A>RJ6}=;W&wt@2E$7J=9SVHsdC?K(L(KACb#z)@C$xXD8^!7|uv zZh$6fkq)aoD}^79VqdJ!Nz-8$IrU(_-&^cHBI;4 z^$B+1aPe|LG)C55LjP;jab{dTf$0~xbXS9!!QdcmDYLbL^jvxu2y*qnx2%jbL%rB z{aP85qBJe#(&O~Prk%IJARcdEypZ)vah%ZZ%;Zk{eW(U)Bx7VlzgOi8)x z`rh4l`@l_Ada7z&yUK>ZF;i6YLGwI*Sg#Fk#Qr0Jg&VLax(nNN$u-XJ5=MsP3|(lEdIOJ7|(x3iY;ea)5#BW*mDV%^=8qOeYO&gIdJVuLLN3cFaN=xZtFB=b zH{l)PZl_j^u+qx@89}gAQW7ofb+k)QwX=aegihossZq*+@PlCpb$rpp>Cbk9UJO<~ zDjlXQ_Ig#W0zdD3&*ei(FwlN#3b%FSR%&M^ywF@Fr>d~do@-kIS$e%wkIVfJ|Ohh=zc zF&Rnic^|>@R%v?@jO}a9;nY3Qrg_!xC=ZWUcYiA5R+|2nsM*$+c$TOs6pm!}Z}dfM zGeBhMGWw3$6KZXav^>YNA=r6Es>p<6HRYcZY)z{>yasbC81A*G-le8~QoV;rtKnkx z;+os8BvEe?0A6W*a#dOudsv3aWs?d% z0oNngyVMjavLjtjiG`!007#?62ClTqqU$@kIY`=x^$2e>iqIy1>o|@Tw@)P)B8_1$r#6>DB_5 zmaOaoE~^9TolgDgooKFuEFB#klSF%9-~d2~_|kQ0Y{Ek=HH5yq9s zDq#1S551c`kSiWPZbweN^A4kWiP#Qg6er1}HcKv{fxb1*BULboD0fwfaNM_<55>qM zETZ8TJDO4V)=aPp_eQjX%||Ud<>wkIzvDlpNjqW>I}W!-j7M^TNe5JIFh#-}zAV!$ICOju8Kx)N z0vLtzDdy*rQN!7r>Xz7rLw8J-(GzQlYYVH$WK#F`i_i^qVlzTNAh>gBWKV@XC$T-` z3|kj#iCquDhiO7NKum07i|<-NuVsX}Q}mIP$jBJDMfUiaWR3c|F_kWBMw0_Sr|6h4 zk`_r5=0&rCR^*tOy$A8K;@|NqwncjZ>Y-75vlpxq%Cl3EgH`}^^~=u zoll6xxY@a>0f%Ddpi;=cY}fyG!K2N-dEyXXmUP5u){4VnyS^T4?pjN@Ot4zjL(Puw z_U#wMH2Z#8Pts{olG5Dy0tZj;N@;fHheu>YKYQU=4Bk|wcD9MbA`3O4bj$hNRHwzb zSLcG0SLV%zywdbuwl(^E_!@&)TdXge4O{MRWk2RKOt@!8E{$BU-AH(@4{gxs=YAz9LIob|Hzto0}9cWoz6Tp2x0&xi#$ zHh$dwO&UCR1Ob2w00-2eG7d4=cN(Y>0R#$q8?||q@iTi+7-w-xR%uMr&StFIthC<# zvK(aPduwuNB}oJUV8+Zl)%cnfsHI%4`;x6XW^UF^e4s3Z@S<&EV8?56Wya;HNs0E> z`$0dgRdiUz9RO9Au3RmYq>K#G=X%*_dUbSJHP`lSfBaN8t-~@F>)BL1RT*9I851A3 z<-+Gb#_QRX>~av#Ni<#zLswtu-c6{jGHR>wflhKLzC4P@b%8&~u)fosoNjk4r#GvC zlU#UU9&0Hv;d%g72Wq?Ym<&&vtA3AB##L}=ZjiTR4hh7J)e>ei} zt*u+>h%MwN`%3}b4wYpV=QwbY!jwfIj#{me)TDOG`?tI!%l=AwL2G@9I~}?_dA5g6 zCKgK(;6Q0&P&K21Tx~k=o6jwV{dI_G+Ba*Zts|Tl6q1zeC?iYJTb{hel*x>^wb|2RkHkU$!+S4OU4ZOKPZjV>9OVsqNnv5jK8TRAE$A&^yRwK zj-MJ3Pl?)KA~fq#*K~W0l4$0=8GRx^9+?w z!QT8*-)w|S^B0)ZeY5gZPI2G(QtQf?DjuK(s^$rMA!C%P22vynZY4SuOE=wX2f8$R z)A}mzJi4WJnZ`!bHG1=$lwaxm!GOnRbR15F$nRC-M*H<*VfF|pQw(;tbSfp({>9^5 zw_M1-SJ9eGF~m(0dvp*P8uaA0Yw+EkP-SWqu zqal$hK8SmM7#Mrs0@OD+%_J%H*bMyZiWAZdsIBj#lkZ!l2c&IpLu(5^T0Ge5PHzR} zn;TXs$+IQ_&;O~u=Jz+XE0wbOy`=6>m9JVG} zJ~Kp1e5m?K3x@@>!D)piw^eMIHjD4RebtR`|IlckplP1;r21wTi8v((KqNqn%2CB< zifaQc&T}*M&0i|LW^LgdjIaX|o~I$`owHolRqeH_CFrqCUCleN130&vH}dK|^kC>) z-r2P~mApHotL4dRX$25lIcRh_*kJaxi^%ZN5-GAAMOxfB!6flLPY-p&QzL9TE%ho( zRwftE3sy5<*^)qYzKkL|rE>n@hyr;xPqncY6QJ8125!MWr`UCWuC~A#G1AqF1@V$kv>@NBvN&2ygy*{QvxolkRRb%Ui zsmKROR%{*g*WjUUod@@cS^4eF^}yQ1>;WlGwOli z+Y$(8I`0(^d|w>{eaf!_BBM;NpCoeem2>J}82*!em=}}ymoXk>QEfJ>G(3LNA2-46 z5PGvjr)Xh9>aSe>vEzM*>xp{tJyZox1ZRl}QjcvX2TEgNc^(_-hir@Es>NySoa1g^ zFow_twnHdx(j?Q_3q51t3XI7YlJ4_q&(0#)&a+RUy{IcBq?)eaWo*=H2UUVIqtp&lW9JTJiP&u zw8+4vo~_IJXZIJb_U^&=GI1nSD%e;P!c{kZALNCm5c%%oF+I3DrA63_@4)(v4(t~JiddILp7jmoy+>cD~ivwoctFfEL zP*#2Rx?_&bCpX26MBgp^4G>@h`Hxc(lnqyj!*t>9sOBcXN(hTwEDpn^X{x!!gPX?1 z*uM$}cYRwHXuf+gYTB}gDTcw{TXSOUU$S?8BeP&sc!Lc{{pEv}x#ELX>6*ipI1#>8 zKes$bHjiJ1OygZge_ak^Hz#k;=od1wZ=o71ba7oClBMq>Uk6hVq|ePPt)@FM5bW$I z;d2Or@wBjbTyZj|;+iHp%Bo!Vy(X3YM-}lasMItEV_QrP-Kk_J4C>)L&I3Xxj=E?| zsAF(IfVQ4w+dRRnJ>)}o^3_012YYgFWE)5TT=l2657*L8_u1KC>Y-R{7w^S&A^X^U}h20jpS zQsdeaA#WIE*<8KG*oXc~$izYilTc#z{5xhpXmdT-YUnGh9v4c#lrHG6X82F2-t35} zB`jo$HjKe~E*W$=g|j&P>70_cI`GnOQ;Jp*JK#CT zuEGCn{8A@bC)~0%wsEv?O^hSZF*iqjO~_h|>xv>PO+?525Nw2472(yqS>(#R)D7O( zg)Zrj9n9$}=~b00=Wjf?E418qP-@8%MQ%PBiCTX=$B)e5cHFDu$LnOeJ~NC;xmOk# z>z&TbsK>Qzk)!88lNI8fOE2$Uxso^j*1fz>6Ot49y@=po)j4hbTIcVR`ePHpuJSfp zxaD^Dn3X}Na3@<_Pc>a;-|^Pon(>|ytG_+U^8j_JxP=_d>L$Hj?|0lz>_qQ#a|$+( z(x=Lipuc8p4^}1EQhI|TubffZvB~lu$zz9ao%T?%ZLyV5S9}cLeT?c} z>yCN9<04NRi~1oR)CiBakoNhY9BPnv)kw%*iv8vdr&&VgLGIs(-FbJ?d_gfbL2={- zBk4lkdPk~7+jIxd4{M(-W1AC_WcN&Oza@jZoj zaE*9Y;g83#m(OhA!w~LNfUJNUuRz*H-=$s*z+q+;snKPRm9EptejugC-@7-a-}Tz0 z@KHra#Y@OXK+KsaSN9WiGf?&jlZ!V7L||%KHP;SLksMFfjkeIMf<1e~t?!G3{n)H8 zQAlFY#QwfKuj;l@<$YDATAk;%PtD%B(0<|8>rXU< zJ66rkAVW_~Dj!7JGdGGi4NFuE?7ZafdMxIh65Sz7yQoA7fBZCE@WwysB=+`kT^LFX zz8#FlSA5)6FG9(qL3~A24mpzL@@2D#>0J7mMS1T*9UJ zvOq!!a(%IYY69+h45CE?(&v9H4FCr>gK0>mK~F}5RdOuH2{4|}k@5XpsX7+LZo^Qa4sH5`eUj>iffoBVm+ zz4Mtf`h?NW$*q1yr|}E&eNl)J``SZvTf6Qr*&S%tVv_OBpbjnA0&Vz#(;QmGiq-k! zgS0br4I&+^2mgA15*~Cd00cXLYOLA#Ep}_)eED>m+K@JTPr_|lSN}(OzFXQSBc6fM z@f-%2;1@BzhZa*LFV z-LrLmkmB%<<&jEURBEW>soaZ*rSIJNwaV%-RSaCZi4X)qYy^PxZ=oL?6N-5OGOMD2 z;q_JK?zkwQ@b3~ln&sDtT5SpW9a0q+5Gm|fpVY2|zqlNYBR}E5+ahgdj!CvK$Tlk0 z9g$5N;aar=CqMsudQV>yb4l@hN(9Jcc=1(|OHsqH6|g=K-WBd8GxZ`AkT?OO z-z_Ued-??Z*R4~L7jwJ%-`s~FK|qNAJ;EmIVDVpk{Lr7T4l{}vL)|GuUuswe9c5F| zv*5%u01hlv08?00Vpwyk*Q&&fY8k6MjOfpZfKa@F-^6d=Zv|0@&4_544RP5(s|4VPVP-f>%u(J@23BHqo2=zJ#v9g=F!cP((h zpt0|(s++ej?|$;2PE%+kc6JMmJjDW)3BXvBK!h!E`8Y&*7hS{c_Z?4SFP&Y<3evqf z9-ke+bSj$%Pk{CJlJbWwlBg^mEC^@%Ou?o>*|O)rl&`KIbHrjcpqsc$Zqt0^^F-gU2O=BusO+(Op}!jNzLMc zT;0YT%$@ClS%V+6lMTfhuzzxomoat=1H?1$5Ei7&M|gxo`~{UiV5w64Np6xV zVK^nL$)#^tjhCpTQMspXI({TW^U5h&Wi1Jl8g?P1YCV4=%ZYyjSo#5$SX&`r&1PyC zzc;uzCd)VTIih|8eNqFNeBMe#j_FS6rq81b>5?aXg+E#&$m++Gz9<+2)h=K(xtn}F ziV{rmu+Y>A)qvF}ms}4X^Isy!M&1%$E!rTO~5(p+8{U6#hWu>(Ll1}eD64Xa>~73A*538wry?v$vW z>^O#FRdbj(k0Nr&)U`Tl(4PI*%IV~;ZcI2z&rmq=(k^}zGOYZF3b2~Klpzd2eZJl> zB=MOLwI1{$RxQ7Y4e30&yOx?BvAvDkTBvWPpl4V8B7o>4SJn*+h1Ms&fHso%XLN5j z-zEwT%dTefp~)J_C8;Q6i$t!dnlh-!%haR1X_NuYUuP-)`IGWjwzAvp!9@h`kPZhf zwLwFk{m3arCdx8rD~K2`42mIN4}m%OQ|f)4kf%pL?Af5Ul<3M2fv>;nlhEPR8b)u} zIV*2-wyyD%%) zl$G@KrC#cUwoL?YdQyf9WH)@gWB{jd5w4evI& zOFF)p_D8>;3-N1z6mES!OPe>B^<;9xsh)){Cw$Vs-ez5nXS95NOr3s$IU;>VZSzKn zBvub8_J~I%(DozZW@{)Vp37-zevxMRZ8$8iRfwHmYvyjOxIOAF2FUngKj289!(uxY zaClWm!%x&teKmr^ABrvZ(ikx{{I-lEzw5&4t3P0eX%M~>$wG0ZjA4Mb&op+0$#SO_ z--R`>X!aqFu^F|a!{Up-iF(K+alKB{MNMs>e(i@Tpy+7Z-dK%IEjQFO(G+2mOb@BO zP>WHlS#fSQm0et)bG8^ZDScGnh-qRKIFz zfUdnk=m){ej0i(VBd@RLtRq3Ep=>&2zZ2%&vvf?Iex01hx1X!8U+?>ER;yJlR-2q4 z;Y@hzhEC=d+Le%=esE>OQ!Q|E%6yG3V_2*uh&_nguPcZ{q?DNq8h_2ahaP6=pP-+x zK!(ve(yfoYC+n(_+chiJ6N(ZaN+XSZ{|H{TR1J_s8x4jpis-Z-rlRvRK#U%SMJ(`C z?T2 zF(NNfO_&W%2roEC2j#v*(nRgl1X)V-USp-H|CwFNs?n@&vpRcj@W@xCJwR6@T!jt377?XjZ06=`d*MFyTdyvW!`mQm~t3luzYzvh^F zM|V}rO>IlBjZc}9Z zd$&!tthvr>5)m;5;96LWiAV0?t)7suqdh0cZis`^Pyg@?t>Ms~7{nCU;z`Xl+raSr zXpp=W1oHB*98s!Tpw=R5C)O{{Inl>9l7M*kq%#w9a$6N~v?BY2GKOVRkXYCgg*d

    <5G2M1WZP5 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/core-kotlin/kotlin-ktor/gradlew.bat b/core-kotlin/kotlin-ktor/gradlew.bat new file mode 100755 index 0000000000..e95643d6a2 --- /dev/null +++ b/core-kotlin/kotlin-ktor/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/core-kotlin/kotlin-ktor/resources/logback.xml b/core-kotlin/kotlin-ktor/resources/logback.xml new file mode 100755 index 0000000000..274cdcdb02 --- /dev/null +++ b/core-kotlin/kotlin-ktor/resources/logback.xml @@ -0,0 +1,11 @@ + + + + %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + \ No newline at end of file diff --git a/core-kotlin/kotlin-ktor/settings.gradle b/core-kotlin/kotlin-ktor/settings.gradle new file mode 100755 index 0000000000..13bbce9583 --- /dev/null +++ b/core-kotlin/kotlin-ktor/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'KtorWithKotlin' + diff --git a/core-kotlin/kotlin-ktor/src/main/kotlin/APIServer.kt b/core-kotlin/kotlin-ktor/src/main/kotlin/APIServer.kt new file mode 100755 index 0000000000..a12182ccc8 --- /dev/null +++ b/core-kotlin/kotlin-ktor/src/main/kotlin/APIServer.kt @@ -0,0 +1,73 @@ +@file:JvmName("APIServer") + + +import io.ktor.application.call +import io.ktor.application.install +import io.ktor.features.CallLogging +import io.ktor.features.ContentNegotiation +import io.ktor.features.DefaultHeaders +import io.ktor.gson.gson +import io.ktor.request.path +import io.ktor.request.receive +import io.ktor.response.respond +import io.ktor.routing.* +import io.ktor.server.engine.embeddedServer +import io.ktor.server.netty.Netty +import org.slf4j.event.Level + +data class Author(val name: String, val website: String) +data class ToDo(var id: Int, val name: String, val description: String, val completed: Boolean) + +fun main(args: Array) { + + val toDoList = ArrayList(); + val jsonResponse = """{ + "id": 1, + "task": "Pay waterbill", + "description": "Pay water bill today", + }""" + + + embeddedServer(Netty, 8080) { + install(DefaultHeaders) { + header("X-Developer", "Baeldung") + } + install(CallLogging) { + level = Level.DEBUG + filter { call -> call.request.path().startsWith("/todo") } + filter { call -> call.request.path().startsWith("/author") } + } + install(ContentNegotiation) { + gson { + setPrettyPrinting() + } + } + routing() { + route("/todo") { + post { + var toDo = call.receive(); + toDo.id = toDoList.size; + toDoList.add(toDo); + call.respond("Added") + + } + delete("/{id}") { + call.respond(toDoList.removeAt(call.parameters["id"]!!.toInt())); + } + get("/{id}") { + + call.respond(toDoList[call.parameters["id"]!!.toInt()]); + } + get { + call.respond(toDoList); + } + } + get("/author"){ + call.respond(Author("Baeldung","baeldung.com")); + + } + + + } + }.start(wait = true) +} \ No newline at end of file diff --git a/core-kotlin/kotlin-ktor/webapp/WEB-INF/web.xml b/core-kotlin/kotlin-ktor/webapp/WEB-INF/web.xml new file mode 100755 index 0000000000..513a80cb27 --- /dev/null +++ b/core-kotlin/kotlin-ktor/webapp/WEB-INF/web.xml @@ -0,0 +1,35 @@ + + + + + + + io.ktor.ktor.config + application.conf + + + + KtorServlet + KtorServlet + io.ktor.server.servlet.ServletApplicationEngine + + + true + + + + 304857600 + 304857600 + 0 + + + + + KtorServlet + / + + + \ No newline at end of file diff --git a/core-kotlin/resources/logback.xml b/core-kotlin/resources/logback.xml new file mode 100755 index 0000000000..274cdcdb02 --- /dev/null +++ b/core-kotlin/resources/logback.xml @@ -0,0 +1,11 @@ + + + + %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + \ No newline at end of file diff --git a/core-kotlin/settings.gradle b/core-kotlin/settings.gradle new file mode 100755 index 0000000000..13bbce9583 --- /dev/null +++ b/core-kotlin/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'KtorWithKotlin' + diff --git a/core-kotlin/src/main/kotlin/com/baeldung/ktor/APIServer.kt b/core-kotlin/src/main/kotlin/com/baeldung/ktor/APIServer.kt new file mode 100755 index 0000000000..a12182ccc8 --- /dev/null +++ b/core-kotlin/src/main/kotlin/com/baeldung/ktor/APIServer.kt @@ -0,0 +1,73 @@ +@file:JvmName("APIServer") + + +import io.ktor.application.call +import io.ktor.application.install +import io.ktor.features.CallLogging +import io.ktor.features.ContentNegotiation +import io.ktor.features.DefaultHeaders +import io.ktor.gson.gson +import io.ktor.request.path +import io.ktor.request.receive +import io.ktor.response.respond +import io.ktor.routing.* +import io.ktor.server.engine.embeddedServer +import io.ktor.server.netty.Netty +import org.slf4j.event.Level + +data class Author(val name: String, val website: String) +data class ToDo(var id: Int, val name: String, val description: String, val completed: Boolean) + +fun main(args: Array) { + + val toDoList = ArrayList(); + val jsonResponse = """{ + "id": 1, + "task": "Pay waterbill", + "description": "Pay water bill today", + }""" + + + embeddedServer(Netty, 8080) { + install(DefaultHeaders) { + header("X-Developer", "Baeldung") + } + install(CallLogging) { + level = Level.DEBUG + filter { call -> call.request.path().startsWith("/todo") } + filter { call -> call.request.path().startsWith("/author") } + } + install(ContentNegotiation) { + gson { + setPrettyPrinting() + } + } + routing() { + route("/todo") { + post { + var toDo = call.receive(); + toDo.id = toDoList.size; + toDoList.add(toDo); + call.respond("Added") + + } + delete("/{id}") { + call.respond(toDoList.removeAt(call.parameters["id"]!!.toInt())); + } + get("/{id}") { + + call.respond(toDoList[call.parameters["id"]!!.toInt()]); + } + get { + call.respond(toDoList); + } + } + get("/author"){ + call.respond(Author("Baeldung","baeldung.com")); + + } + + + } + }.start(wait = true) +} \ No newline at end of file diff --git a/kotlin-ktor/src/main/kotlin/APIServer.kt b/kotlin-ktor/src/main/kotlin/APIServer.kt index 57ccbbe523..a12182ccc8 100755 --- a/kotlin-ktor/src/main/kotlin/APIServer.kt +++ b/kotlin-ktor/src/main/kotlin/APIServer.kt @@ -33,7 +33,7 @@ fun main(args: Array) { header("X-Developer", "Baeldung") } install(CallLogging) { - level = Level.INFO + level = Level.DEBUG filter { call -> call.request.path().startsWith("/todo") } filter { call -> call.request.path().startsWith("/author") } } From a5f2fd1d622c9b88598b4ac92f3d25cb61b6c40b Mon Sep 17 00:00:00 2001 From: Syed Mansoor Date: Tue, 3 Jul 2018 21:25:32 +1000 Subject: [PATCH 64/82] removed unwanted files --- .../main/META-INF/KtorWithKotlin.kotlin_module | Bin 294 -> 0 bytes core-kotlin/build/kotlin-build/version.txt | 1 - .../kotlin/compileKotlin/build-history.bin | Bin 150 -> 0 bytes .../caches-jvm/inputs/source-to-output.tab | Bin 65536 -> 0 bytes .../inputs/source-to-output.tab.keystream | Bin 32768 -> 0 bytes .../inputs/source-to-output.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/inputs/source-to-output.tab.len | Bin 8 -> 0 bytes .../inputs/source-to-output.tab.values.at | Bin 10869 -> 0 bytes .../caches-jvm/inputs/source-to-output.tab_i | Bin 32768 -> 0 bytes .../inputs/source-to-output.tab_i.len | Bin 8 -> 0 bytes .../jvm/kotlin/class-fq-name-to-source.tab | Bin 65536 -> 0 bytes .../class-fq-name-to-source.tab.keystream | Bin 4096 -> 0 bytes .../class-fq-name-to-source.tab.keystream.len | Bin 8 -> 0 bytes .../jvm/kotlin/class-fq-name-to-source.tab.len | Bin 8 -> 0 bytes .../class-fq-name-to-source.tab.values.at | Bin 5315 -> 0 bytes .../jvm/kotlin/class-fq-name-to-source.tab_i | Bin 32768 -> 0 bytes .../kotlin/class-fq-name-to-source.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/constants.tab | Bin 65536 -> 0 bytes .../jvm/kotlin/constants.tab.keystream | Bin 4096 -> 0 bytes .../jvm/kotlin/constants.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/constants.tab.len | Bin 8 -> 0 bytes .../jvm/kotlin/constants.tab.values.at | Bin 82 -> 0 bytes .../caches-jvm/jvm/kotlin/constants.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/jvm/kotlin/constants.tab_i.len | Bin 8 -> 0 bytes .../jvm/kotlin/internal-name-to-source.tab | Bin 65536 -> 0 bytes .../internal-name-to-source.tab.keystream | Bin 4096 -> 0 bytes .../internal-name-to-source.tab.keystream.len | Bin 8 -> 0 bytes .../jvm/kotlin/internal-name-to-source.tab.len | Bin 8 -> 0 bytes .../internal-name-to-source.tab.values.at | Bin 8704 -> 0 bytes .../jvm/kotlin/internal-name-to-source.tab_i | Bin 32768 -> 0 bytes .../kotlin/internal-name-to-source.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/package-parts.tab | Bin 65536 -> 0 bytes .../jvm/kotlin/package-parts.tab.keystream | Bin 4096 -> 0 bytes .../jvm/kotlin/package-parts.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/package-parts.tab.len | Bin 8 -> 0 bytes .../jvm/kotlin/package-parts.tab.values.at | Bin 73 -> 0 bytes .../caches-jvm/jvm/kotlin/package-parts.tab_i | Bin 32768 -> 0 bytes .../jvm/kotlin/package-parts.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab | Bin 65536 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab.keystream | Bin 4096 -> 0 bytes .../jvm/kotlin/proto.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab.values.at | Bin 18673 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/source-to-classes.tab | Bin 65536 -> 0 bytes .../jvm/kotlin/source-to-classes.tab.keystream | Bin 32768 -> 0 bytes .../kotlin/source-to-classes.tab.keystream.len | Bin 8 -> 0 bytes .../jvm/kotlin/source-to-classes.tab.len | Bin 8 -> 0 bytes .../jvm/kotlin/source-to-classes.tab.values.at | Bin 3168 -> 0 bytes .../jvm/kotlin/source-to-classes.tab_i | Bin 32768 -> 0 bytes .../jvm/kotlin/source-to-classes.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/subtypes.tab | Bin 65536 -> 0 bytes .../jvm/kotlin/subtypes.tab.keystream | Bin 4096 -> 0 bytes .../jvm/kotlin/subtypes.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/subtypes.tab.len | Bin 8 -> 0 bytes .../jvm/kotlin/subtypes.tab.values.at | Bin 647 -> 0 bytes .../caches-jvm/jvm/kotlin/subtypes.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/jvm/kotlin/subtypes.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/supertypes.tab | Bin 65536 -> 0 bytes .../jvm/kotlin/supertypes.tab.keystream | Bin 4096 -> 0 bytes .../jvm/kotlin/supertypes.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/supertypes.tab.len | Bin 8 -> 0 bytes .../jvm/kotlin/supertypes.tab.values.at | Bin 501 -> 0 bytes .../caches-jvm/jvm/kotlin/supertypes.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/jvm/kotlin/supertypes.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/counters.tab | 2 -- .../caches-jvm/lookups/file-to-id.tab | Bin 65536 -> 0 bytes .../caches-jvm/lookups/file-to-id.tab.keystream | Bin 32768 -> 0 bytes .../lookups/file-to-id.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/file-to-id.tab.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/file-to-id.tab.values.at | Bin 289 -> 0 bytes .../caches-jvm/lookups/file-to-id.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/lookups/file-to-id.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab | Bin 65536 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab.keystream | Bin 4096 -> 0 bytes .../lookups/id-to-file.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab.values.at | Bin 4357 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/lookups.tab | Bin 65536 -> 0 bytes .../caches-jvm/lookups/lookups.tab.keystream | Bin 32768 -> 0 bytes .../lookups/lookups.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/lookups.tab.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/lookups.tab.values.at | Bin 11033 -> 0 bytes .../caches-jvm/lookups/lookups.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/lookups/lookups.tab_i.len | Bin 8 -> 0 bytes .../data-container-format-version.txt | 1 - .../kotlin/compileKotlin/format-version.txt | 1 - .../compileKotlin/gradle-format-version.txt | 1 - .../build/kotlin/compileKotlin/last-build.bin | Bin 81 -> 0 bytes 92 files changed, 6 deletions(-) delete mode 100644 core-kotlin/build/classes/kotlin/main/META-INF/KtorWithKotlin.kotlin_module delete mode 100644 core-kotlin/build/kotlin-build/version.txt delete mode 100644 core-kotlin/build/kotlin/compileKotlin/build-history.bin delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i delete mode 100644 core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len delete mode 100644 core-kotlin/build/kotlin/compileKotlin/data-container-format-version.txt delete mode 100644 core-kotlin/build/kotlin/compileKotlin/format-version.txt delete mode 100644 core-kotlin/build/kotlin/compileKotlin/gradle-format-version.txt delete mode 100644 core-kotlin/build/kotlin/compileKotlin/last-build.bin diff --git a/core-kotlin/build/classes/kotlin/main/META-INF/KtorWithKotlin.kotlin_module b/core-kotlin/build/classes/kotlin/main/META-INF/KtorWithKotlin.kotlin_module deleted file mode 100644 index 8eb6d88b14a03574f5a72192909dd41c1f4c31f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmZvWu?oUK42Dl!Y^2KxPKtxzA{50Z5OgSY5b6u0y-rHhO@~AKx?KH+_j-*8l(j diff --git a/core-kotlin/build/kotlin-build/version.txt b/core-kotlin/build/kotlin-build/version.txt deleted file mode 100644 index 01aabacbfd..0000000000 --- a/core-kotlin/build/kotlin-build/version.txt +++ /dev/null @@ -1 +0,0 @@ -11001 \ No newline at end of file diff --git a/core-kotlin/build/kotlin/compileKotlin/build-history.bin b/core-kotlin/build/kotlin/compileKotlin/build-history.bin deleted file mode 100644 index e3926f1cead83a2a82c5113b45c79ec058c52e74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmZ4UmVvc=0s{naFfcHt#Gmtyg7QHWNTB60n!pB_4ycNYewL^zF4q~L3S2RLf+}z| NQw~+&X4pQs001I@7Lxz~ diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab deleted file mode 100644 index 9a13eeb034a1b6ec7d61627dd37c8dff955e7b01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 zcmeIvzpGDi9LMoD7uWUU-jzX2Vv)io-ASa}yWT&53?`!xgHaZPfyqi18SX9folwe; z{J6Iyzq|QyWuTY$w~*0zhsV3ld3Mg{^y$;%4DX#8t)6Xz+uvDMb+&4}GiZ7SOaFc| zSQ=b^X0SH#`{CdBf7X=%0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&w zb%DD{j`ks^x(~W@Ka<_ds(yY?u6D0|ONN$L?dTrw-d;@RySusvhpIMzP40BZJ||mO zR9*g*T6j^#0wG-5=d`-6O+Qm)<9{-Rtj?ovW+% zbgy)$-zFm?Rr|VUy3=oxm)-r{Lu;z;z3%xi$e!>?ba(M#vd}%%UF!eV`3Mjo zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk o1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ;Qs`E0S98F761SM diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream deleted file mode 100644 index 64fb36c0cdb60248e71ad76ac345ecf3bbfc3252..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI#!A=`75C-7BP;2!O3ZW7xQ4yg<>Y=K$o+j4Xp49fD@b(?=8ikgt&7u0a5DsWE z-;RIJlKRGO@|4sA$5CB!$Q1HJwAqHe%2VcOwM%N?Nbg6^&IXm@puCn3_3web+G%oT zl7AVUK5%^bWuMA{S9GW+@1jWsx-)et!B_Eofs@lx8%*2-Bqa8{W-Mo{(f>kQ`<`otzF9~Eb zs|)7w+|L^x-aAT@%hKVGP94@^Yo6mT<8{r0cK4FC(#Nh-A6KV&rawxF_DQe|!`h~N zb&{PRNv=wru~RGcvMBpUWas8EXudVPdOor>P<=+t^ZQlANwIlFS=FUQG)-U4<=SmN z8ZQ}F({klXGu)|}jm`)1adRT4BYP#0AkU?1_I&3+rWC5#(|nRC zOg^bg9Zh+akan6+z&~qnd10K7jO`Qxb<{Q-_PoSeujQbuaU#}y6J4Ikb$KXj>uuR@ zes{up-r&|0OxfZ#I_Q0$D^*^=N#Fng diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len deleted file mode 100644 index a8a65c788a049fa13437cfd9e8f407982b2825e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz00Ds*004vlZ2$lO diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len deleted file mode 100644 index b3155f95730bcd91e447627020d273d6a58689c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D(pa00Bw>!T zIBRn7-_>@i{9j^o>+32OX*8To$$jom@yYN*YqQk6tKlxX2S@@pGINI>G0` z?U6JE7s=4_B1_VOX^r0tZJ)?d|W zg&D|0p68(YM&TlgOO^|6YzF&x?}oR6Sug4{3(B#X#RAuYu}V~N`K(3*rr21r;6D@6 zT!O01__97Taxe{6q_$wL3;0@%)9?;FRMdpk8ws`@r(fIyC*j3js>)N*}ALCQVaj_`pug9L%7T>tZ z6{NVI%{=l)^&$6XW>7{#J?MOeo6@5Zy-RtwxXCfQQX~pTj*s2Z4r}%=v z{2xrY=j&z*yPb^;T`GcnYglb$8AM!tU1_P`uq7&w`^RoHCiK?}$H$Yh&&qMN+fB#; z8?qcTfh_7eEMfZ%gklXgUcC0P{_#!H(SVP22m5ay)P$#jTWod>txhABkUb`F_7RGT zas@3RgO^nY-K?MgN&Cx45SH@FsK-|jDPamld?@8;rGU0XTuwpTBFuG)XhaxjUsB7S zNXihe)6%X)6*@qU>a+X%PIN`?W@|d{#QR%ZHndx;&t@0rvn@9s(Tl<4ESi!>HxPd} z@>Q}Zs)qPHB2;+)swkX_!m_GfMK8(SUNQ^Bo=;?(VOH!bTh&n5A@mEqMOtOoW8So0 zYk5~cj_4(IkKv@RM1hy;Cu0ao&%^)uPW0|Z(|usgr40M}#YUezkj)^C-{0tS4^BF6 z|EktrO7rj)$poYrl~g5037RXX_2pjW4LMHmhd65Y{kkLe=6)45Vs9SQ;?0A~8%|qm zh*Kj{sJ9w?3N=>)QeE{BVz&hiH>NzkMVi3o=krNVPI#dCzwT0=rz|1YCXCNFy4F_a z05@Q+Y>!(=E2)MHN;xpj6|wyNF6m6bi<`bpQ_$M?YRVCWhifxlSQVz9u{9KARQ8@Xa)+X5AlL9h_yA*8S-J&cZ5Vq7wgQ@wQ4(~1Df!Hcs-0yVHTc;kC z@KAXT_2H9l(_=oPtKK!tlkUNwb9~nGxP+63HQcqCGwA|aJ9~3C+$z=eETW(ChyL4> zB9{x<|JzPPnB>r++>qVfC28Qo%@=3s^fO9_>kI0N^4P|gRL3=mE-!f)!q$<}F5YKy j1L&3Gguiwo!b^pCaE>R#7}zo1U&6bMgX*s>PDuX&E*>y4 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i deleted file mode 100644 index d8b968522fbcceebb2dd7bf4ecb83257c7d8bd0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI(%}Z2a6vy#{63iwTq{RdUrWKPASzt_&k&$5_7&U^msnDohQuHPikA;wJvM3ma zU@9E7vDIz9|=5KG$)c52%1%w@1AvrUJShYatM5fq1t_&zX;{UYDFOB6oK7 zS9`5rXx&epH(E2?vd}($ou5?SzrPAqe$8ht0tna_IA=uOZ|^AB?;Nd;@6>7Aw~3x; zrHWpfD|(&&bX9GRUNRDeNg$=~mv%3^{VYs7&$ery5xLwwSTox(oPH_05J14TK&=tU%ELz6ed&h)0`>)r5qbW$li%gor==qT2q1s}0tf_5Aa6vmZlnhFUl|Duok@O`uUy@~K!(S=&Utpu`<%|{(Yy7*vX;o(i`de^lAF&Yt>x3C*829wO3!NcBjYE<7r=dA-ywObvxaej;60a zSB zcB<+`dOp39u1%k$cRy53r32~e?$%yRR_#iM(xd6j`>K)jQhGD(Psh@S@A6(cn6B(; z?af5hru1~WH(imQO0SLoW{jjEK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ KfB=DiE$|D~)Xgve diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream deleted file mode 100644 index e64763e3641013fe082591324289367e1f9fa5c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHH$!;4l4DF%lHx%7>w1?`{A4q5H!ofH(yfi>>vc!%BOQNC0u>U?1tOU_iwsYul zbmikC`5vif7v8PVJe^~WuNW$_q#(K1E#cHrCaJY#j9UTkyFqY50a;k6y`fH^{%{o0 zAfvLT4!)d+%meEgrU-d^lxYG+AU|H|4{G4CnMm_8qXF%eB^5P%zTb4Z$YW$SYJLx< z?@pwXU)N3j=@eknT+ByTi}B}EpbFK7>LBmy0%{a{ZG;l;M;2Y9lR^^?6524SC095F zhK3K(Yd+X9*hI(3>7*bMUD9B1qRDOfr$$%>lh2zVBM0h6xK$NeY0>PTm&!&^Zt8>V z8JMkL9n&Ag$5hi6OfFH1UvAZms*Qw?rLxtXya&wpM_|Z(PJR=qUL&j<>>Owt6#iD? z8&kIe6>f&v>kS-^#};S*iMUR)7rSpj^N30F=i8k6nR&**+G1=-h4cnql)9XP_0ko+ zicaUNpK2|%*bRk*cs}`W(gA!eRlLh4Q)s=UCNkxB++iWLFu+_`siMyJe6zh;q7r$9fDZv$q%rPSyt z#ro(rx#HqpmzJM%;Iro6!%qzr@1oAh=m7ko|86Mg9iX=@ztZp<`pas*!F0m(xhZ2X zjM@#Y!$JY$A!og$lS3AAP!B}P za78AO`wPON$33TT)||+&gItrWRb^;Vui|F?A7HFNZ~X_$-Mrp>Kh+N*h4X@841hon z?SoYnREywD&4sZz0)^D;xjlsqgrl!&-V;T@^z;#1uq*xg#BMWprst?gs9Kg#4j9;6 znS6J|&Shmjr>KGuF_39oA$>*ET(Uf=Kf=5PMq8Oni0tlb4+8Z|h`B-VSPjtoK*%-g z{x*=ic(w-73OkOoZ=Y4N18nVdCsk+Ka*A6A0yXpI6951J diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i deleted file mode 100644 index 56bab89b950b557799390d2ffb3c30f11f801743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)T}V@57zgmjyhsXjur3VAR$#dHrrsL@5tGU}=DW*ej9+0Nc`&VM($_nh~A{?G56 zxmS_V5-KKnlrYiB*n&Ub;sF5&m_(qKiQ-$kc`i*+xA1t0(c2q+?O zi-{_4w1yRlV|a}B(*LXt(>;b4MnMQ<5$I#0`7LkXWjV#xhZ5p*cH@}a)(B{x0>_AM zmu~Uro1$FmJl%7<jC2CR*Dz^Q+c*`99wv{q)U=jOM!z)`tKDAOHafKmY=%0)E+t zbiHuSP968i`2MmYU+OrX+e@IFi8{l}PS~sK^lm%k^)Qg|UP?b=%!rGL4nA4A!kB92 zsge|z@a2V_swD1^JfqRXYgO_f2L$XS;Af)c(an{1>KVO400Iy&QlLck!{0Z3+h=4= z)Pev6AOL~f2{03l`_Amm-HKQV0_q7oV4{&o-A?tAArS-$FVMq8&Wbl5CX&?1{{GYP zpDh#5^?vP^^&`CvNxkb}J_H~D0SH)ApjO^@?hpF5TC+RtU3r-(+PH0=_L-Og0SG_< z0#*{JVWNxf2K*n8l`d)ldTEw@R&b500F_bF4gwA)S{>qkJM@YkApn7Y0v;wh{F!a@ zxiq-$#tKx+{k3Ch@Vv2AQ7zX3ALTku^&a?<>vgdn1R!92fhLxHM(>POR_nA``r75J z`uo|OR_hJ@KmY;|fPnb~>gDgn$tjOR=1Y#mW)Qf-MCZotoiamKWVF73SAO2jZEXx# zzf*Lmfs zY!HBeNd=hbPU(eqlcv`nTlP8Y+8*NfJpGbcS7;Jv_qF1ItS4nS*e&y(ca_`s{>)&4 zAqYSK0uX=z1STiol6^&}f9UGuW@8ovAfQEHkmd8L1MADQ%)z-3fPk6;EbpK3k!izf Yrb8;T3%p{Y-M_Bm{xbW8{LlQq0cFgMpa1{> diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len deleted file mode 100644 index 131e265740f37d77b7c4a3676d2a7704ca3e4a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Su009U9fdBvi diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab deleted file mode 100644 index ff97d1b01f7463ac580636bd3c6379ed90086b51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 zcmeIuu?c`c3)uw6@foZ)B?N z|5X2-xB8Un_s>QpK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk;|p97 zG5(bOmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#3c eX8;05Am(K7WpHGOV2Ee%Veka9JsCnkQX&8*Dis9) diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i deleted file mode 100644 index c83b7e08403a62cc1bd8fa245717ab58724c7e59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIu0Sy2k3Jg{ zZ^>FZp6;R#za~fNYI>e_r?=>dFUfm4l~y+^<;~}$7u`Sy(|&XcJ^LxCr!(nJ`tf6O zims>kXiwUvqLgDFlKylYok$zrCyVF;x{0=<$LPU#$yGX*ex`TcCOw*$vYd{fo#{e) z;7ziF4xtz6>DS3~I*nGh;CWvqgXm^Do(`mS^ukNtpU$R-=%*LlPq)w)w3c>lS<1QR z$w)e#&Zmvfk~MTGJwz+%1-kcXa-WW(p*I_oE|sM$qeEy1I+gB!lB}S^=zeIrQoMWFuWe&(PkqvNay}lF4)y z-A%vUWu0!Jx9I>HdhSlrw+(J|0)5tyY^AH{aau!f&;z%VuXHr+-nNu$w~{fmj`Ev0 z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apuj&B F_zAm#Pl*5k diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream deleted file mode 100644 index 405d891a7de8d39633c3e9847cf58a983be31ffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHJOK;ma5Z*(vKyO8{SQLG2yUV@~ts*Bt&xs#_Yq<$*rvZAS#i>F>;&@3au>XCB zF%yI`Z6`hTkQ@?+^UXKIZyxlY`?Wno{a}I}e7JwyAA`OC{pk7=tGHAwecU{V9ku>i zLA6*KJ8Z4;?XKc>V?p*-aeFNNdnGa*t~+kU(Yx{EXu#I<9IIr?p%k?$62UFcOKwau z#0v?p))>cJi7Czp_T4ssm;H4U2Ub>)oEYfTnp=tL-?fMgb6$41g}2)w6Jp)M&fuVCQuuz8CN9liwLUka?NBV?OtF#M_Wpj2q>YTo0{Y+jvz-ZdRQybo#!xf6??zg ziA3U4ZeUcx{7hXaMp zal_lK6qz@g=Z1aA6)!-Cy?(>){RcKIhDUt4sK%EU_%D`N`>K#j%*R_`*tJhIqf8px zom)_bYWX3?H{|vVDw@vR9L-=krY5S+0phv8T{Qa)lyDfYP&haK{^L5&!I-G6$7NY- zcpA%c1g0)+w3@C}!XfjqPL!PYWC?Ci!v)v?M0@N>ZzmZ}gyE83SMp@n5o-4?wRYbVfgJ@@sR|9n>mzxIF8 zukk3AyqXH0WS4&iwiP7PFfyrrfYxxigPHli<{DVq-r`~>cpwX!-LZ87Q}%_Dwib}? z?D(TJl(-ods+nCdMT?SZMBg)ZH%0_EcfvDsg*0cHr3V{*3b1Wn=G1U*`7Xs^^fF$a zz@g@XE}Gq$!mUJ~bdzj&2eN&IYEfZrdbP@3f-9*tmQcy(sFHSVELO)F1vPhL^p^;4 zYpk8X=3bg`P-$4GjI_&Vq!vA3ldDey8@?_-XmriO5HfL7JOWZt9|rf1LYO9`^Po|M zgN6HjVkl$}b(iO7?thkU40Wod1sy)#er=qi0D6DhsI11aT=U#{REJ|2CnWhIra3{P cTiG)VQ5Cp_#xM6j?tktTxL4p_f!|MopTBoAFaQ7m diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len deleted file mode 100644 index d43f4d11d97a07ee7716e69fa82130792b9a4dcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz00Hh)004skaR2}S diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len deleted file mode 100644 index 46eb98bf025aac853a88d494b80031592fa8000a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D-0%00E={8vppj7QhlQZz?r6pyYjCYv&bd=6lCd;6?r3lGhEOGd;i3@f-T{)x{j+1ICYC z9vP#r#<&{K$CyjTocNad(W++GHOfGS)V~b{lVufkuTau5R)Cg_ya&HgKvOoWnk69o zF!Vm@6Nu*KaaDF{WIQV_-^Eu(wYv`GjU5+d)2G(kEECAJl`-gW!6BS92QoB}gfh=d zxL)O5`|w%Zq}nT!@czMa@hB~!KuNEt(>3^&!%qzPp}q^b@gk$&2SA`MR5uk1N`r3O z65of$5lBMSZr zyiY-SA)=?YvzhcUQMWx!QT-O?O);3loI&6jUP-8+ehM+?2o8&QJPd?fQK+R&pdqR! z>28VP*m1}e>01JOM7?$-y%{^arvtM}yFQ=>Q;vO``^b}egFMfuIZv07|InT9m3ob- zcSW5G=-20M-Og72FRVa1cHkQWdOCc_Wc(5F%9J%a>Wz+)P_hoz6!b}-GWn}WhLbKI z4}sBBw;^pA5}nx-MwxQ3EdsMuE>2vRxX)aUJ$Bs>0yOmDSvKVcksX9}(UUU8m{J+?nV4pD$K>~bRk5(q%RyIG`bUu=GWVaE=8wutP_$>0U-*co7A z5(qtkR=gjTXMdF)`pko8tbne{2{DHU_j2!O3G@%&o^<}5!fSZldG?EW?_SfAfIoq2 zN+f>q-tYa7`S15&y!H2WpZOotX+IMEKSzF@t&?VIH6~D^M6PW4FWShn1AeuiOxS1S z$MLrW(r`ciJS*cj@*n{_2o$5gP9{w3vm-WRk^l*i00|fq$isc{u%?-9fjoPaNMmZ| zu0Z2%Ii7{}WaqP*L&54vLYzDCJ==nf!}%oOPe9>1^F+KF>3@v-B;XbTh3L=tS#=NG zqK7)(5=c@a^%vt#B*Qkqk_!ot011!)34{ZIdL27B@)Z%0fUOcz{xX3f!Ne#?R z0wkaZfm%H872P`0qK8_l43C<}TfDR%bN&@aT?qkJ)+jCjlo2 z6r*3G(mt=VI(H)C{+sHnvN~?K#4A@K3zPr660&-5KKg(8`R|bBVC`p&5KjHV4>kq%C2SUKKdiWPOM|{0SNZv`OHYq!S1~;O zP)F_Is5u4wmU#X8H{nAORAvpFkF#*SllJe`$XvW*~v^Cy2fRF$mOO}ABgE0svoqA9nmipMx4Fc^V)TyIm)4R0UJhhrpQM8JbSnt$+6myw@U z<31&lelzZbf?WV>Rb0j)0TLhq68Ja*$$0LlDR}(t$Ia%fP!p)cy1jDj*9D=@%X}n2 z0wh2JLz6%?)}77gtD3a0UWuFj| zp4ZzY)$n&C(r|rtH(#pOrZ5V1gg_qp=|<`P3cHh+BF~+psejm=hw;r3h*lzxX51e5 z{2J%!{*#7ob5ZDRmOv}G|MkPo%Vy^}?cWUD2jUXeI<3QO{&K8`7iM@L8qM>dzN$;< z{~P&noCN#{)GGWRq_fip-beihL%5%WKJPg->Tn2CYL%)G>)Y0i4`*s6dI*cnK|i-; O_MINW2v~X;5_k>O3 zGL!!L&Zufzwd(7%W%}pvOiomPKGXN+@5S){XI}{rAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!Cun3p`qD(_HeNF49}NPA};uJ*T_$lwQ+g`b_s}Vh9i*K!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly lK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWY4iyZ|A&C$azl diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream deleted file mode 100644 index 9c2728d424ce833363b359cf4e0d790cab338377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeIuOA5j;5C&kk-a$ln?xIH!bRlse)C){9LkZ?llBx9g#)4p_Cy>b|fz0FQTOMzh zhVqm0#-^YQkjFl@3W33TC`C08(WF81Zc^|_>|Inyo?2ik>Qp-n6w{fJ4D3?;inf|GcnAhTUB~M;cb!$o)NP#~W8Xh7 d%?mjqAOa#F0wN#+A|L`HAOa#F0wVCI0xtnrWrP3# diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len deleted file mode 100644 index f4c8cfc8ce12dd8c7d3138da29fdfd38746215ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz00BlG000&M4gdfE diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/package-parts.tab.len deleted file mode 100644 index ae494197337e7613fa74806ac6352f9fe880ca17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Sv00BqOmjFH#6dEh^3|E=kQR@klJr@J%cTOUx-v4KB$qN=#2> IWMIUK09gZWQI8*k;Q&n&JQ{~-Qd7wRFlZFz2;~a9 z0>th&`k$G+FIAr65FpS>U{aFHXZ_JC77-vo;En>*l6*Dq%^kn+Gywtw7Z{i1HQU9& z8O$d@fB*pk1PBly&rWa$3AV7cs0RjXF5FkK+009C72oNAZfItU=mp3Zc*<2n{iVprOHVXb7Uf!NoQQdqD`oBFxo>hIABL zk}M;hq(Ukm^`W9n3*URyGNUBy>iUCj2GCz4y+kB%oR+b6zDo@&p2+w<)M z?T+@-W65m0w7od#(d3pJ#@O;rvZ6hFr03e_zD}NRXTMBdYj6KN+1z430cs(qwg+wOlSd8u91?rc}?sf!^%fB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ lfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D=D`@Gq1t=v4p! diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream deleted file mode 100644 index a3b25390668a103d0e4ffe418e486a640a029717..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHHU5^qm6!pQF_~NtiTNjN!xTA@G02weW!!7~VO?)w>y$%g+FKIgj{=F@f4IK-+ z@p*U|l6!i3d(OS*QM$2!Y1AHqY^J! zxa(T+b&m`1iy8-84UnAi{pr>i%1RLJnc~E#v9xlofm%0oNu6)`CL1|J!D+$OB6gU8 zvAUwR(p;4cT=WJzG8b3|)qT-BvA#q)9_PM|?^q*2t zuIrkoJ4C3}<|(TA2#FnVDmVe$k}kzInWp=H0~^Q2ALohL7>CTfJ!2pY^hwB#<`#6E zroqPrGH`*|L1i@xaU_2NDkm7<6O&x98Fi54ngoU+suJ&@3ETGMe8>Jo diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len deleted file mode 100644 index ae4d3fca102917b923e7124f626e00a5d459e0fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz00H*h007Yd!vFvP diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len deleted file mode 100644 index 75a15fe067ac93e8e5bb00b9267dc361bb3c5d66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D;CE00H6wS^xk5 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at deleted file mode 100644 index 7b1138afa87d918c16610625860cb6aa0f074409..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18673 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 bBA)GhWHz7waUQLh{p!elZDic0u!8tsbBpCb diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i deleted file mode 100644 index 8a98cc2dd02f95c08d2e704abea89648d5c38639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI*Ye-XJ7zgkN43RFl#AJ}jx}gx_J|qfONTaYoGl&p_GKi4MGH4`yh}S4vVjvM} z-Y~i#i8cI?8eOy`C5l-vP(jo_%#bv@fP#rV5#kWXZs)e0zh69i&-*@?-+A4c6O}S3 zg7_m!5S0xi{yW461R&r+pji-2RwbPFa2mr9fB*y(6DTYts>wfb~MC5W~ix^u;S%>B58&yT*pu-Sbql#VO8 z{yp?)XDHQ-TD=Px`MSQkI%DuQvzX^~Y>cn+HV^0j3)uL6@iRC39Xuc)hk%{;*W<)Z zb8^H+Ob9>#0ub;nFfE8yIn%~G%@lmT-;z_|>AY6PEBSs>{=L0UEA^lb2)GMG@%}VM zEUa-K!!ZQ3A}}lX{hy59L9Nt-Iv@Z62tWV=5C~s^TtO6l*)b8m9ilS`KmY>T63FED zBdk3QBigD8)yO4a5=03LR@vTvs^R?g7aF!S{~8hfTl@x(|70SG_<0=g7P z=lf1+XRA|d&G&O%e?B>8e6C9nwXC~s^?AO;6N|at@$0WoNE{a7AfTv#k@xYfOYP%| zCe>iFbix0hVXNbS21`RpVJOhWUw1CDc>TW-{k$)y242|1kN_=7DA2_F=}l#IlY}8x z4AsYZJ~moDuXqxJstFhb(QxVq{QO$sD^SSp-)_8psc_n$(-m;tcef;-4?2*-0Zjb- z^E}lwq;OiK(}_T);J<^^wnO#j(GIR-x@B#>PT2i!vzeawK!3ksp0M4j8rXDolb`B%y6~w zo8fABtxn`}MsNAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5;& z%`ULi-IsF6!|C&M`FHn`k*fLhX1YK9l3rZvp50P4_|^S7olZ}VR=r*AzL$Rf**&tg z>RLLN9{bV#GJW^G`{=f+N9o=4O1he!OXs#%O{K5W(e%Vv)rW8057Ni!_;}Tw^lExJ zeV?99&+n+(mp)BbzIGqnS@kBpojy$0(i`dguBr>^QaYWU**>ry)oi+$9#0QVR!ye2(oci#LHZ)y?ElvJ2oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N X0t5&UAV7cs0RjXF5FkL{{{;R3CPAjx diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream deleted file mode 100644 index 6e9870be293196fc1228b95aa7e1681732a43713..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI#!EO^V5XNy{2rM3fHbrWch^i@6;(&10Lu##e9oF6|eS2n;MQMTF>>kiRmuwHs zr}=s8@mljGhOv`m?&8pz^VnzU^WEUH@3$t8IS$^2WSTh0+cxIldy|I7bXFhcznj>Z zjg{a={TJ!SE}3&XxZB5_yleBf(g}0wWtL8VzNz%{R}bCVcDpc@@V!#TT5J%f0r!;x z?(U^O3$baZwMaFBe)u5iG3i>EkNS8c*2$njxpYNNQXa-8kApU*lP1`~W*_@x*0y(> zxYy87I&^L|CqcG0>n2&)Y&SMlX^LRGjk9KX_|j^mQZ>`YS$L*;(#SgcqIm_7Cu+ZQd3-r&RTdnX_s+xm}9|KRTx|YGmX#y2L zI-jO|jlH;Ok>-+$&+Ox+<8r!nEPdy*7F2uyy*LXN^K_`u6n};4)|$p^@x40-Eq%%t zd%XfC9j%%ZOP>*Q&dTO{>2!cM>C;Z;Nv?TarMyn>Kwhgki?Kb;zMqxTmeRW^ab!TQS_0Any^V*pkA+Rpgk3^^>7rg5<`-cpqGN$ovaA$k_yQ+ zq~Fv_kNF4rA^9U2T1;$m*Xy_!TjG54&^*4Gh&%$8f$B^kl`88DrRto3(p(!5<`L72 zFDv?JZs!~Tirn1>)1@~HHbUI3&4JMs7$kEfJPul<| z$-!*&lDC6%$;Fzld*aDNVseG%`>==VsAk26Cx3-+9I^fmY;plj!kTIc4Rl zfcs6-58k(!-#-FFFLZ+Rx?rYNnu6AT>YZ%Jcu^_%p~=q#bXAzw#80|YJQaLBmNL*rRjH{IA~Q(wM>2z5rK2em z*<7xV%^x>ape5si#{W~V`{mBIcK?(zs|qN|z88QiYz777*xNdKBDZrrl$FQ^>l9Y@ z2Q=36LaEOTn==i^CUE!mbK>_&!OD5YqU8MFvFUoj1VYNiOHc~Vd4lR!6;qh=-Zd&_ zCJ%X@gPIy!1x#NqxT!LTcX!=W>`z$e7Rr^`P=SfSLSpLoT0O!Vc`tL8nUH1yipGbn zIysmgD^eT+o7`$hrdc)rU`RaJ~*7 zXk35lep5qrY25VKtt;=QJP<@88jKrlc zan?hxIt>7q>Yy!l$Q@77wZ&k4z6s-6P5&f5%^;WJ0Amxaa88h#X74}MG;aqia}nZL zo^iNG{Qg2Q7+ykjs-a(PDf)h}H!fomiR08qrH91dSB;<nGMRCx)Yoo+Z$_SkF123+(cxjsT6ev@4H11{(#z^z|^TQuMU*pDLAmKsF6E< zBaORz%#bHbq`y=@U4h$@VM3g}Ln)VzM<{7Lpb}(Yi*ju8J!!npY{)yr=l-iVw!LYk z_;~#GaH^%GU~4I&UZssJPZaLp)Z7X$wk^gVC? z4+4%0Ts9($a_KvcGdLUH==DEY=$dpEfZzxqfPiBH%|_(&aQa$QVy86E=!@~`sN{)S zj^}!PYFdsq&z7rQ*Ei;3%Vt~WcrXQGJt7bLPD}-JI;KJ(*aC5VetOS*Z1Xy0rxCfm zW1z5BjY_62?#k@wp>3ic~UtKuGY+WKvx zH(IHpm!@B@)1R*DP0>q6qA&>@*ZXkS(pyi%H1kZe9?~3_dWLFeTH_c3wgi&;{jHe4 z+hVI8br3)R0owv!jYw7=G}*38Jp>T2FYw8TJbTm0dpY)LsfYjq2q1s}0s#|9=T9jf4Ab`aaCLK#3FUw0?2#>2)Qx zvFuTxN40diAJK=Dx5&0(>R7i?+RQ*oI&jlqHzg#V0@EU*&~oVf3o}T>`XCv zhRe&iWJc}vok1ywQr2yq)=c~CpUH{Ro^IOSWZl`JRfdFF4#^zZCcavS?XR diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len deleted file mode 100644 index c2d0b7ddb4291538af1d053b9966ed3885cef3df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 LcmZQz0E2e`0QLay diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.len deleted file mode 100644 index 3e822dd800c530e797c2ef209ce7ee551c547e37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%S%00B?{$p8QV diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.values.at b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab.values.at deleted file mode 100644 index a5f03ad0c9ca512eaeb7b464e3a90c33e4a9909d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 647 zcmaKqOK-w35QP0d+C$Wr+KaigQZGGJgg~l55dnJM*sEa0@kV|~&|lx6hC@)4v%j64 zne~J%5G2}YgMzG#60*@6ty9jU@e6Q=B{X}`0dr3lN>uDlP|XWKErTgJnov7F1uM6w z26>)l``IQML+0OE{4fTrv(Ih1+AZJNO%JQcYh`#Igh1y8-x5$dSp2w}?3?Vn>r{6} z9TTPToZ^=~4=uhRe1m1sV9)r|C>Se?qV4VUGK%G=x*)AYrc5=z>bJ93k;FFpmn=jK zbU!55AxknPwao2k2XE|kNJFB=5R}P%v_K6xeu0X2SURSPUKta2R(&kF0;{ RE>7yP{!#ugZFiMzKYxip?BM_a diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i deleted file mode 100644 index dce89dcd2596ee1aef7bf842a746c0a08e610e0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuuS$ba90uSQW^iF*65EW!WHcyv69$uYyMiH>(-yT1+0q7rVD&z{0lU%VHH}Lj z8BTm009C72oNAZfB*pk1PBlyu!q1|N!|x{<2_21>>yHm`s2G s0RjXF5FkK+009DB7C0`+&-!ZF<&3fsAV7cs0RjXF5FkK+!2b#S0;|6lXaE2J diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/subtypes.tab_i.len deleted file mode 100644 index 131e265740f37d77b7c4a3676d2a7704ca3e4a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Su009U9fdBvi diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab deleted file mode 100644 index fc1ae04109d165676819fb90bb8c96f330b4c806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 zcmeIuF-`(O7>3~=VnSo!0-iuRYZE$R!5y@M!V6eZU}NPO>^K35-oeTXSWo|Sy{%>*m{cYghTnw{(_n(uZ`JKBsr- zdwP@Z)5~-`s5<<#cAb8u^K_T4(rx;hzNEYKG5t;#>BX>Wn&vZx009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ ffB*pk1PBlyK!5-N0t5&UAV7cs0RjXFoQ=RQz1=}d diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/supertypes.tab.keystream deleted file mode 100644 index 43ccbea46f7b9af9c2da784a6973915c825d1891..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeIv&q~BF5C(AHV=tm2ddbNbkj+*q-BsFMJ*UYKL(|NXKd^m!yAThBlDjau&X+I4 zFB^#?>jhYqoMzzC7}!>Lb)3#{SD3M`ZoYQyZ7K5h(eQ^-;Inx>)`!#nWf2-MTH}}k z3tB`7?0_vu^s2(-)b1kT91S{FzQjcoy$HZ_&2o|aMjc`NHt}aWzoXGlo3+j^NeLmW z&MIMS@~~vc;6M2NkmwwG4OgG|g)U$_cCxQ18B2VGhhw&+l1PmyyRzMHrEIkL z)eg6CbCT-VGB>LG(Cb1ay39fB*pk1PBlyK!5-N0t7k;tfq*| z&7Z{%+k^@9MPMUEJXOw$eL2h_1PBlyK!5-N0t5&UXd|$nBJOJC>o!}22*h0DJ$bLz zUQiGqK!5-N0tALlU_C|rZhapP+g#=$K!Cug2rQ(C`rgICsLX3l0t5&UXckyX5ryLG zNAs#X0t5&UAV44sf!P#MUE7(@qPCg@2oNAZfB*pk1PBlyK%kYtOo}-9O3$t0)(H?G zu$&^s%g28t2oNC9wLofoXIxFKbe)&;go(ynyM>Z}bLRXxX^#K_0t5&UAV7cs0Rp`W zlvBj%eZACczB~d12oNAZfB*pk1PBlyK!5-N0$B=dr-<|0hnp;WP@4b&0t5&Qn!r(t S__7~+Fl6|AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!CtT z7x*v?!=)Z_wSC{dZ5OAKSM8Jbc{?|qJZo>YPus8UhqjsU)J)0bEZ?*^8&+WeU^p0e2`=;H~&hJdd?frJ9ogF9B?X~vT?_v1V{%B9k zCEwc@?YDOSuH;L*(f_UU5gfO*uRQEo#>caO)`g9*`vi(-2A^Bjni>mQK-nBkC+p8EF)#>~&{oMFY zZL~NuD8*2&AwvqR3I{Q9T(w8Wqyg$``zmb^2(4-+`3L}lvK_~0`sMfkS z8^0^5rgrM7-$MJ6vYjbqX=A$FEY5hZP|TjMIPuDpL!+iqITrGio^-kS7z4N`g3Et$ZwnW70D|z!Czm+(+dHT+2)4n#FW@@9= zH|kU{w>MoB>&J|^;Z1QR;y*c;3UFlwL$Li>2 zjx2FU^;1J` z@Tw1ZQ=`2YV)EU;xv=s@9LImus&Ce-LOhg3_4#$$thHz-`=R2DF9Z-k009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ c1Q0*~0R#|0009ILKmY**5I_I{1paSh($ diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len deleted file mode 100644 index b3155f95730bcd91e447627020d273d6a58689c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D(pa00Bw>!TS|UJKW_S b_j$lW9`TqbJmneBS@D9Gyy7))c+0yV#1s{< diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i deleted file mode 100644 index ea2332f0e9865c3fc5ad466893faddb853d24bc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI&&r8#B9LMoDim*#C!oz|B(~2cT78ENgGBgYXqb69Fii)}=MZbjNV6gd46f$yG9o7nJ=3n{CpQ8JAmEz7b0hL)G<_{9xzA~y@fVXbQOOgv z9Cdnq8rqMxmCE&5kFU?gmXtcq^T8B&tk><~z===6+>Wgf2)01Vi1eNL*y(l4L9M^N zW2nJv{e0_EdVgTNajav$ef&Cqw-NdGyHM}feC8s6fPH~sBl3RRk%Ils(dzh8owj_R z>WfyY=%s1W_u0Qa^&6v?j6`7)=r$rdYi~Ub)6TQ)+OIh-_l`8qc8uo`uq7~RM2h*l z?Y8>S2LS{Suq}|(&zD(w&}zFc{SZLFzCg@~JbTm4|8nfp(h&g!5I_I{1Og_o-H23Q zINuVmwL-T}oqpdNyfX77bc?ev0tg_000IagfB*tM3N#s!s|O}l`nUq45hyFrW<;9b zP982>NWp>#6!m&6N;UskkYPR!$!pHs&GcR$S73Aq1rF-#=4br%+7Pbp%gPD$+Isy| z)|cT7MF0V-0>_QWtJZxJR-4ic0R#|0009ILKw!=Szl_M(vVjkCZcygLxb`pZIlZP# z8HYUzd{fUAsr#!umPf8EsrgrDMjk~j7=aK#009ILa7ZAg|KCmQ?_B3lWTIA3V9JPG z{CcUXf+H%@`kn4QlDq&ZEU6EOOEI-BV_3~$yV(9n>|z_+P&ol+DCjhL%&7G`(wI@|a|&q`Dx*~>j8f?c#9nOT z@%%HAaR|m-Z?W#R*83ITT$2}`j)uh+(1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72>km3FOy94nz!3^ z#P>yQN+Ek!)=rwcFZr?e_NB_hd(Vy&bi0 zza=}{d+n}v)b4H!TUSJb;gtckW4hdE?T?_1CC}XjSW=TvXIY@6m%F&i)L*Gp7DURXf z1IeG{FB`Zfw3N>7sN-bMt~j0DQpzqDisc&fW`WxW^aCvmCtTA{fQ@-zKLpC=kyCFj zIM!z$lPfN+O&R1thdvwmL;BEj@h+O2IulSX+V_rwSs{5l$WPk6o-N4}OG-P}(Z{|# z0sK&6ean=DumdPl6D;MDhOP`r(qXCdn6NmG*(@>I74L=n3}C0`o@Q}|EF1^0R^rS> zBA0uqe3sahQrSYX|@ zqhrn;deLH)hDM9MWzB}e_z=_z;A!gYc?>IyW> zdyjjL<~FgFbu5qpAWt66yW9Sb^5C_m(dj_{VprW^z-koiG>Z9fl*FA^}N6UK^aP>xJZ|j?SS9j`g){kXWck8(B)k%F@r}bSus{8f09@LY1SPcOJ1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly hK!5-N0t5&UAV7cs0RjXF5FkK+009C72>jmye*t2XCm#R+ diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len deleted file mode 100644 index 131e265740f37d77b7c4a3676d2a7704ca3e4a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Su009U9fdBvi diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab deleted file mode 100644 index 65cfa61e89f6292c22eff3b9b48629bfad6fc532..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 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 b1ww&PAQT7%LV-{q6bJ=Efl%PDRp9>tzPX1! diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream deleted file mode 100644 index 11ca7a41b038a01f289b82de55663dc9c2b376f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len deleted file mode 100644 index c59a802042d39e4d864c05d6444f1490915782be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz00CnM006E4bN~PV diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len deleted file mode 100644 index 8b704bc421781284a1b22aa53f94aa035acfc741..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D;X800FK5^Z)<= diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at deleted file mode 100644 index 5e04b8e4fd0a8dd86beaa17f0d61e638f7b01719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11033 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 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i deleted file mode 100644 index be464ad444c81fa96235384c8f7bdba94471baa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len b/core-kotlin/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len deleted file mode 100644 index 131e265740f37d77b7c4a3676d2a7704ca3e4a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Su009U9fdBvi diff --git a/core-kotlin/build/kotlin/compileKotlin/data-container-format-version.txt b/core-kotlin/build/kotlin/compileKotlin/data-container-format-version.txt deleted file mode 100644 index b01b80f991..0000000000 --- a/core-kotlin/build/kotlin/compileKotlin/data-container-format-version.txt +++ /dev/null @@ -1 +0,0 @@ -2011001 \ No newline at end of file diff --git a/core-kotlin/build/kotlin/compileKotlin/format-version.txt b/core-kotlin/build/kotlin/compileKotlin/format-version.txt deleted file mode 100644 index 2408adbb9f..0000000000 --- a/core-kotlin/build/kotlin/compileKotlin/format-version.txt +++ /dev/null @@ -1 +0,0 @@ -8011001 \ No newline at end of file diff --git a/core-kotlin/build/kotlin/compileKotlin/gradle-format-version.txt b/core-kotlin/build/kotlin/compileKotlin/gradle-format-version.txt deleted file mode 100644 index 7289c6bdc4..0000000000 --- a/core-kotlin/build/kotlin/compileKotlin/gradle-format-version.txt +++ /dev/null @@ -1 +0,0 @@ -4011001 \ No newline at end of file diff --git a/core-kotlin/build/kotlin/compileKotlin/last-build.bin b/core-kotlin/build/kotlin/compileKotlin/last-build.bin deleted file mode 100644 index baf638a29b8c82e55dfbf2bbe5906ade6154ba63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81 zcmZ4UmVvdnh(RmAC|xfrwIr!1F*C1NFFU^^Co@kkGcUO)H8(Y{Br!+NsWdYu#WOE0 lfAeSN$RAJN#WOK5dNHsUmn0UIgalU Date: Tue, 3 Jul 2018 21:26:36 +1000 Subject: [PATCH 65/82] removed unwanted files --- .../.gradle/4.4/fileChanges/last-build.bin | Bin 1 -> 0 bytes .../4.4/fileContent/annotation-processors.bin | Bin 19073 -> 0 bytes .../.gradle/4.4/fileContent/fileContent.lock | Bin 38 -> 0 bytes .../.gradle/4.4/fileHashes/fileHashes.bin | Bin 26997 -> 0 bytes .../.gradle/4.4/fileHashes/fileHashes.lock | Bin 38 -> 0 bytes .../4.4/fileHashes/resourceHashesCache.bin | Bin 23665 -> 0 bytes .../.gradle/4.4/taskHistory/taskHistory.bin | Bin 80724 -> 0 bytes .../.gradle/4.4/taskHistory/taskHistory.lock | Bin 38 -> 0 bytes .../buildOutputCleanup/buildOutputCleanup.lock | Bin 38 -> 0 bytes .../.gradle/buildOutputCleanup/cache.properties | 2 -- .../.gradle/buildOutputCleanup/outputFiles.bin | Bin 18713 -> 0 bytes 11 files changed, 2 deletions(-) delete mode 100644 core-kotlin/.gradle/4.4/fileChanges/last-build.bin delete mode 100644 core-kotlin/.gradle/4.4/fileContent/annotation-processors.bin delete mode 100644 core-kotlin/.gradle/4.4/fileContent/fileContent.lock delete mode 100644 core-kotlin/.gradle/4.4/fileHashes/fileHashes.bin delete mode 100644 core-kotlin/.gradle/4.4/fileHashes/fileHashes.lock delete mode 100644 core-kotlin/.gradle/4.4/fileHashes/resourceHashesCache.bin delete mode 100644 core-kotlin/.gradle/4.4/taskHistory/taskHistory.bin delete mode 100644 core-kotlin/.gradle/4.4/taskHistory/taskHistory.lock delete mode 100644 core-kotlin/.gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 core-kotlin/.gradle/buildOutputCleanup/cache.properties delete mode 100644 core-kotlin/.gradle/buildOutputCleanup/outputFiles.bin diff --git a/core-kotlin/.gradle/4.4/fileChanges/last-build.bin b/core-kotlin/.gradle/4.4/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/core-kotlin/.gradle/4.4/fileContent/annotation-processors.bin b/core-kotlin/.gradle/4.4/fileContent/annotation-processors.bin deleted file mode 100644 index 114bb513f163c3885eeb105a37c0239df388b2ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19073 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 jOK$`| diff --git a/core-kotlin/.gradle/4.4/fileHashes/resourceHashesCache.bin b/core-kotlin/.gradle/4.4/fileHashes/resourceHashesCache.bin deleted file mode 100644 index 28dd081876aed1784aad324f024c1dd9ab50fd17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23665 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 diff --git a/core-kotlin/.gradle/4.4/taskHistory/taskHistory.bin b/core-kotlin/.gradle/4.4/taskHistory/taskHistory.bin deleted file mode 100644 index ecbab3d3dd088cd88f667d20b20f6705b4871614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80724 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 diff --git a/core-kotlin/.gradle/buildOutputCleanup/cache.properties b/core-kotlin/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index 1cae56dfec..0000000000 --- a/core-kotlin/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Tue Jul 03 21:01:49 AEST 2018 -gradle.version=4.4 diff --git a/core-kotlin/.gradle/buildOutputCleanup/outputFiles.bin b/core-kotlin/.gradle/buildOutputCleanup/outputFiles.bin deleted file mode 100644 index fdf5abf9788a7ce77f0beae68cc6ecdb606699fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18713 zcmeI&F(^cF9KiAa$s_MB-f}r9i!v#s?8?BV&W#4c-5>+I1F;=SJQ*JUu1zOUZ@{rmpk@cy6m{RfPRIiGTw>J_a{nIV7x0tg_0 z00IagfB*srAbi>h~!}88{*3C=r*M88pzx%P!VM#A(zbO~a Date: Tue, 3 Jul 2018 21:28:03 +1000 Subject: [PATCH 66/82] Updated gitignore --- core-kotlin/.gitignore | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core-kotlin/.gitignore b/core-kotlin/.gitignore index ae3c172604..0c017e8f8c 100644 --- a/core-kotlin/.gitignore +++ b/core-kotlin/.gitignore @@ -1 +1,14 @@ /bin/ + +#ignore gradle +.gradle/ + + +#ignore build and generated files +build/ +node/ +out/ + +#ignore installed node modules and package lock file +node_modules/ +package-lock.json From 551522030884371fcb49a1041bb762f0fb6e6a94 Mon Sep 17 00:00:00 2001 From: Mike Wojtyna Date: Wed, 4 Jul 2018 00:31:56 +0200 Subject: [PATCH 67/82] Add BAEL-1919 embedded MongoDB test samples (#4580) --- spring-boot/.factorypath | 30 +++++++-- spring-boot/pom.xml | 38 +++++++++--- .../com/baeldung/mongodb/Application.java | 11 ++++ .../ManualEmbeddedMongoDbIntegrationTest.java | 62 +++++++++++++++++++ .../mongodb/MongoDbSpringIntegrationTest.java | 36 +++++++++++ 5 files changed, 165 insertions(+), 12 deletions(-) create mode 100644 spring-boot/src/main/java/com/baeldung/mongodb/Application.java create mode 100644 spring-boot/src/test/java/com/baeldung/mongodb/ManualEmbeddedMongoDbIntegrationTest.java create mode 100644 spring-boot/src/test/java/com/baeldung/mongodb/MongoDbSpringIntegrationTest.java diff --git a/spring-boot/.factorypath b/spring-boot/.factorypath index 68b2514aab..01b84b761a 100644 --- a/spring-boot/.factorypath +++ b/spring-boot/.factorypath @@ -1,4 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -16,7 +38,6 @@ - @@ -32,9 +53,7 @@ - - @@ -48,7 +67,6 @@ - @@ -85,6 +103,9 @@ + + + @@ -136,7 +157,6 @@ - diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index d8ee3cc2d9..70c3bb4c6b 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -1,5 +1,5 @@ + 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 spring-boot @@ -16,6 +16,35 @@ + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + de.flapdoodle.embed + de.flapdoodle.embed.mongo + test + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + + + org.junit.platform + junit-platform-launcher + ${junit-platform.version} + test + org.springframework.boot spring-boot-starter-thymeleaf @@ -55,11 +84,6 @@ test - - io.dropwizard.metrics metrics-core @@ -170,7 +194,7 @@ **/*LiveTest.java **/*IntegrationTest.java - **/*IntTest.java + **/*IntTest.java **/AutoconfigurationTest.java diff --git a/spring-boot/src/main/java/com/baeldung/mongodb/Application.java b/spring-boot/src/main/java/com/baeldung/mongodb/Application.java new file mode 100644 index 0000000000..092ce3352b --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/mongodb/Application.java @@ -0,0 +1,11 @@ +package com.baeldung.mongodb; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-boot/src/test/java/com/baeldung/mongodb/ManualEmbeddedMongoDbIntegrationTest.java b/spring-boot/src/test/java/com/baeldung/mongodb/ManualEmbeddedMongoDbIntegrationTest.java new file mode 100644 index 0000000000..30a4d61fbd --- /dev/null +++ b/spring-boot/src/test/java/com/baeldung/mongodb/ManualEmbeddedMongoDbIntegrationTest.java @@ -0,0 +1,62 @@ +package com.baeldung.mongodb; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.data.mongodb.core.MongoTemplate; + +import com.mongodb.BasicDBObjectBuilder; +import com.mongodb.DBObject; +import com.mongodb.MongoClient; + +import de.flapdoodle.embed.mongo.MongodExecutable; +import de.flapdoodle.embed.mongo.MongodStarter; +import de.flapdoodle.embed.mongo.config.IMongodConfig; +import de.flapdoodle.embed.mongo.config.MongodConfigBuilder; +import de.flapdoodle.embed.mongo.config.Net; +import de.flapdoodle.embed.mongo.distribution.Version; +import de.flapdoodle.embed.process.runtime.Network; + +class ManualEmbeddedMongoDbIntegrationTest { + private MongodExecutable mongodExecutable; + private MongoTemplate mongoTemplate; + + @AfterEach + void clean() { + mongodExecutable.stop(); + } + + @BeforeEach + void setup() throws Exception { + String ip = "localhost"; + int port = 27017; + + IMongodConfig mongodConfig = new MongodConfigBuilder().version(Version.Main.PRODUCTION) + .net(new Net(ip, port, Network.localhostIsIPv6())) + .build(); + + MongodStarter starter = MongodStarter.getDefaultInstance(); + mongodExecutable = starter.prepare(mongodConfig); + mongodExecutable.start(); + mongoTemplate = new MongoTemplate(new MongoClient(ip, port), "test"); + } + + @DisplayName("Given object When save object using MongoDB template Then object can be found") + @Test + void test() throws Exception { + // given + DBObject objectToSave = BasicDBObjectBuilder.start() + .add("key", "value") + .get(); + + // when + mongoTemplate.save(objectToSave, "collection"); + + // then + assertThat(mongoTemplate.findAll(DBObject.class, "collection")).extracting("key") + .containsOnly("value"); + } +} diff --git a/spring-boot/src/test/java/com/baeldung/mongodb/MongoDbSpringIntegrationTest.java b/spring-boot/src/test/java/com/baeldung/mongodb/MongoDbSpringIntegrationTest.java new file mode 100644 index 0000000000..5431217c3e --- /dev/null +++ b/spring-boot/src/test/java/com/baeldung/mongodb/MongoDbSpringIntegrationTest.java @@ -0,0 +1,36 @@ +package com.baeldung.mongodb; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import com.mongodb.BasicDBObjectBuilder; +import com.mongodb.DBObject; + +@ContextConfiguration(classes = Application.class) +@DataMongoTest +@ExtendWith(SpringExtension.class) +public class MongoDbSpringIntegrationTest { + @DisplayName("Given object When save object using MongoDB template Then object can be found") + @Test + public void test(@Autowired MongoTemplate mongoTemplate) { + // given + DBObject objectToSave = BasicDBObjectBuilder.start() + .add("key", "value") + .get(); + + // when + mongoTemplate.save(objectToSave, "collection"); + + // then + assertThat(mongoTemplate.findAll(DBObject.class, "collection")).extracting("key") + .containsOnly("value"); + } +} From a78aef29f41dadd8a71d0ca32403b2db2550ee1d Mon Sep 17 00:00:00 2001 From: Syed Mansoor Date: Wed, 4 Jul 2018 13:00:26 +1000 Subject: [PATCH 68/82] Delete kotlin-ktor module --- kotlin-ktor/.gitignore | 14 -- kotlin-ktor/build.gradle | 47 ----- kotlin-ktor/gradle/wrapper/gradle-wrapper.jar | Bin 54329 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - kotlin-ktor/gradlew | 172 ------------------ kotlin-ktor/gradlew.bat | 84 --------- kotlin-ktor/resources/logback.xml | 11 -- kotlin-ktor/settings.gradle | 2 - kotlin-ktor/src/main/kotlin/APIServer.kt | 73 -------- kotlin-ktor/webapp/WEB-INF/web.xml | 35 ---- 10 files changed, 443 deletions(-) delete mode 100644 kotlin-ktor/.gitignore delete mode 100755 kotlin-ktor/build.gradle delete mode 100755 kotlin-ktor/gradle/wrapper/gradle-wrapper.jar delete mode 100755 kotlin-ktor/gradle/wrapper/gradle-wrapper.properties delete mode 100755 kotlin-ktor/gradlew delete mode 100755 kotlin-ktor/gradlew.bat delete mode 100755 kotlin-ktor/resources/logback.xml delete mode 100755 kotlin-ktor/settings.gradle delete mode 100755 kotlin-ktor/src/main/kotlin/APIServer.kt delete mode 100755 kotlin-ktor/webapp/WEB-INF/web.xml diff --git a/kotlin-ktor/.gitignore b/kotlin-ktor/.gitignore deleted file mode 100644 index 0c017e8f8c..0000000000 --- a/kotlin-ktor/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -/bin/ - -#ignore gradle -.gradle/ - - -#ignore build and generated files -build/ -node/ -out/ - -#ignore installed node modules and package lock file -node_modules/ -package-lock.json diff --git a/kotlin-ktor/build.gradle b/kotlin-ktor/build.gradle deleted file mode 100755 index 5c8f523cf1..0000000000 --- a/kotlin-ktor/build.gradle +++ /dev/null @@ -1,47 +0,0 @@ - - -group 'com.baeldung.ktor' -version '1.0-SNAPSHOT' - - -buildscript { - ext.kotlin_version = '1.2.41' - ext.ktor_version = '0.9.2' - - repositories { - mavenCentral() - } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -apply plugin: 'java' -apply plugin: 'kotlin' -apply plugin: 'application' - -mainClassName = 'APIServer.kt' - -sourceCompatibility = 1.8 -compileKotlin { kotlinOptions.jvmTarget = "1.8" } -compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } - -kotlin { experimental { coroutines "enable" } } - -repositories { - mavenCentral() - jcenter() - maven { url "https://dl.bintray.com/kotlin/ktor" } -} - -dependencies { - compile "io.ktor:ktor-server-netty:$ktor_version" - compile "ch.qos.logback:logback-classic:1.2.1" - compile "io.ktor:ktor-gson:$ktor_version" - testCompile group: 'junit', name: 'junit', version: '4.12' - -} -task runServer(type: JavaExec) { - main = 'APIServer' - classpath = sourceSets.main.runtimeClasspath -} \ No newline at end of file diff --git a/kotlin-ktor/gradle/wrapper/gradle-wrapper.jar b/kotlin-ktor/gradle/wrapper/gradle-wrapper.jar deleted file mode 100755 index 01b8bf6b1f99cad9213fc495b33ad5bbab8efd20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54329 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

      <5G2M1WZP5 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/kotlin-ktor/gradlew.bat b/kotlin-ktor/gradlew.bat deleted file mode 100755 index e95643d6a2..0000000000 --- a/kotlin-ktor/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/kotlin-ktor/resources/logback.xml b/kotlin-ktor/resources/logback.xml deleted file mode 100755 index 274cdcdb02..0000000000 --- a/kotlin-ktor/resources/logback.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - \ No newline at end of file diff --git a/kotlin-ktor/settings.gradle b/kotlin-ktor/settings.gradle deleted file mode 100755 index 13bbce9583..0000000000 --- a/kotlin-ktor/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name = 'KtorWithKotlin' - diff --git a/kotlin-ktor/src/main/kotlin/APIServer.kt b/kotlin-ktor/src/main/kotlin/APIServer.kt deleted file mode 100755 index a12182ccc8..0000000000 --- a/kotlin-ktor/src/main/kotlin/APIServer.kt +++ /dev/null @@ -1,73 +0,0 @@ -@file:JvmName("APIServer") - - -import io.ktor.application.call -import io.ktor.application.install -import io.ktor.features.CallLogging -import io.ktor.features.ContentNegotiation -import io.ktor.features.DefaultHeaders -import io.ktor.gson.gson -import io.ktor.request.path -import io.ktor.request.receive -import io.ktor.response.respond -import io.ktor.routing.* -import io.ktor.server.engine.embeddedServer -import io.ktor.server.netty.Netty -import org.slf4j.event.Level - -data class Author(val name: String, val website: String) -data class ToDo(var id: Int, val name: String, val description: String, val completed: Boolean) - -fun main(args: Array) { - - val toDoList = ArrayList(); - val jsonResponse = """{ - "id": 1, - "task": "Pay waterbill", - "description": "Pay water bill today", - }""" - - - embeddedServer(Netty, 8080) { - install(DefaultHeaders) { - header("X-Developer", "Baeldung") - } - install(CallLogging) { - level = Level.DEBUG - filter { call -> call.request.path().startsWith("/todo") } - filter { call -> call.request.path().startsWith("/author") } - } - install(ContentNegotiation) { - gson { - setPrettyPrinting() - } - } - routing() { - route("/todo") { - post { - var toDo = call.receive(); - toDo.id = toDoList.size; - toDoList.add(toDo); - call.respond("Added") - - } - delete("/{id}") { - call.respond(toDoList.removeAt(call.parameters["id"]!!.toInt())); - } - get("/{id}") { - - call.respond(toDoList[call.parameters["id"]!!.toInt()]); - } - get { - call.respond(toDoList); - } - } - get("/author"){ - call.respond(Author("Baeldung","baeldung.com")); - - } - - - } - }.start(wait = true) -} \ No newline at end of file diff --git a/kotlin-ktor/webapp/WEB-INF/web.xml b/kotlin-ktor/webapp/WEB-INF/web.xml deleted file mode 100755 index 513a80cb27..0000000000 --- a/kotlin-ktor/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - io.ktor.ktor.config - application.conf - - - - KtorServlet - KtorServlet - io.ktor.server.servlet.ServletApplicationEngine - - - true - - - - 304857600 - 304857600 - 0 - - - - - KtorServlet - / - - - \ No newline at end of file From 66ede7ffcc5b2b9c7997bfd8356a68b233dcc841 Mon Sep 17 00:00:00 2001 From: markusgulden Date: Wed, 4 Jul 2018 05:22:46 +0200 Subject: [PATCH 69/82] Improvements (#4610) --- .../sam-templates/template-implicit.yaml | 19 +----- .../template-inline-swagger.yaml | 23 ++----- .../lambda/apigateway/APIDemoHandler.java | 65 +++---------------- .../lambda/apigateway/model/Person.java | 42 ++---------- 4 files changed, 22 insertions(+), 127 deletions(-) diff --git a/aws-lambda/sam-templates/template-implicit.yaml b/aws-lambda/sam-templates/template-implicit.yaml index 73289b8bb1..3e5b12763e 100644 --- a/aws-lambda/sam-templates/template-implicit.yaml +++ b/aws-lambda/sam-templates/template-implicit.yaml @@ -33,10 +33,10 @@ Resources: Properties: Path: /persons Method: PUT - GetPersonByPathParamFunction: + GetPersonByHTTPParamFunction: Type: AWS::Serverless::Function Properties: - Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByPathParam + Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByParam Runtime: java8 Timeout: 15 MemorySize: 512 @@ -53,21 +53,6 @@ Resources: Properties: Path: /persons/{id} Method: GET - GetPersonByQueryParamFunction: - Type: AWS::Serverless::Function - Properties: - Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByQueryParam - Runtime: java8 - Timeout: 15 - MemorySize: 512 - CodeUri: ../target/aws-lambda-0.1.0-SNAPSHOT.jar - Policies: - - DynamoDBReadPolicy: - TableName: !Ref PersonTable - Environment: - Variables: - TABLE_NAME: !Ref PersonTable - Events: GetByQueryApi: Type: Api Properties: diff --git a/aws-lambda/sam-templates/template-inline-swagger.yaml b/aws-lambda/sam-templates/template-inline-swagger.yaml index f704d47c25..8422bcead2 100644 --- a/aws-lambda/sam-templates/template-inline-swagger.yaml +++ b/aws-lambda/sam-templates/template-inline-swagger.yaml @@ -31,10 +31,10 @@ Resources: Method: PUT RestApiId: Ref: MyApi - GetPersonByPathParamFunction: + GetPersonByHTTPParamFunction: Type: AWS::Serverless::Function Properties: - Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByPathParam + Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByParam Runtime: java8 Timeout: 15 MemorySize: 512 @@ -53,21 +53,6 @@ Resources: Method: GET RestApiId: Ref: MyApi - GetPersonByQueryParamFunction: - Type: AWS::Serverless::Function - Properties: - Handler: com.baeldung.lambda.apigateway.APIDemoHandler::handleGetByQueryParam - Runtime: java8 - Timeout: 15 - MemorySize: 512 - CodeUri: ../target/aws-lambda-0.1.0-SNAPSHOT.jar - Policies: - - DynamoDBReadPolicy: - TableName: !Ref PersonTable - Environment: - Variables: - TABLE_NAME: !Ref PersonTable - Events: GetByQueryApi: Type: Api Properties: @@ -96,7 +81,7 @@ Resources: \ headers" x-amazon-apigateway-integration: uri: - Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetPersonByQueryParamFunction.Arn}/invocations + Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetPersonByHTTPParamFunction.Arn}/invocations responses: {} httpMethod: "POST" type: "aws_proxy" @@ -117,7 +102,7 @@ Resources: responses: {} x-amazon-apigateway-integration: uri: - Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetPersonByPathParamFunction.Arn}/invocations + Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetPersonByHTTPParamFunction.Arn}/invocations responses: {} httpMethod: "POST" type: "aws_proxy" diff --git a/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java b/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java index 71889eaf1b..31bcd0b952 100644 --- a/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java +++ b/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/APIDemoHandler.java @@ -16,7 +16,7 @@ import java.io.*; public class APIDemoHandler implements RequestStreamHandler { private JSONParser parser = new JSONParser(); - private static final String DYNAMODB_TABLE_NAME = System.getenv("TABLE_NAME"); + private static final String DYNAMODB_TABLE_NAME = System.getenv("TABLE_NAME"); @Override public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { @@ -35,10 +35,8 @@ public class APIDemoHandler implements RequestStreamHandler { Person person = new Person((String) event.get("body")); dynamoDb.getTable(DYNAMODB_TABLE_NAME) - .putItem(new PutItemSpec().withItem(new Item().withNumber("id", person.getId()) - .withString("firstName", person.getFirstName()) - .withString("lastName", person.getLastName()).withNumber("age", person.getAge()) - .withString("address", person.getAddress()))); + .putItem(new PutItemSpec().withItem(new Item().withNumber("id", person.getId()) + .withString("name", person.getName()))); } JSONObject responseBody = new JSONObject(); @@ -61,8 +59,7 @@ public class APIDemoHandler implements RequestStreamHandler { writer.close(); } - public void handleGetByPathParam(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { + public void handleGetByParam(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); JSONObject responseJson = new JSONObject(); @@ -81,61 +78,20 @@ public class APIDemoHandler implements RequestStreamHandler { if (pps.get("id") != null) { int id = Integer.parseInt((String) pps.get("id")); - result = dynamoDb.getTable(DYNAMODB_TABLE_NAME).getItem("id", id); + result = dynamoDb.getTable(DYNAMODB_TABLE_NAME) + .getItem("id", id); } - } - if (result != null) { - - Person person = new Person(result.toJSON()); - responseBody.put("Person", person); - responseJson.put("statusCode", 200); - } else { - - responseBody.put("message", "No item found"); - responseJson.put("statusCode", 404); - } - - JSONObject headerJson = new JSONObject(); - headerJson.put("x-custom-header", "my custom header value"); - - responseJson.put("headers", headerJson); - responseJson.put("body", responseBody.toString()); - - } catch (ParseException pex) { - responseJson.put("statusCode", 400); - responseJson.put("exception", pex); - } - - OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8"); - writer.write(responseJson.toString()); - writer.close(); - } - - public void handleGetByQueryParam(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { - - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - JSONObject responseJson = new JSONObject(); - - AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient(); - DynamoDB dynamoDb = new DynamoDB(client); - - Item result = null; - try { - JSONObject event = (JSONObject) parser.parse(reader); - JSONObject responseBody = new JSONObject(); - - if (event.get("queryStringParameters") != null) { + } else if (event.get("queryStringParameters") != null) { JSONObject qps = (JSONObject) event.get("queryStringParameters"); if (qps.get("id") != null) { int id = Integer.parseInt((String) qps.get("id")); - result = dynamoDb.getTable(DYNAMODB_TABLE_NAME).getItem("id", id); + result = dynamoDb.getTable(DYNAMODB_TABLE_NAME) + .getItem("id", id); } } - if (result != null) { Person person = new Person(result.toJSON()); @@ -145,7 +101,7 @@ public class APIDemoHandler implements RequestStreamHandler { responseBody.put("message", "No item found"); responseJson.put("statusCode", 404); - } + } JSONObject headerJson = new JSONObject(); headerJson.put("x-custom-header", "my custom header value"); @@ -162,5 +118,4 @@ public class APIDemoHandler implements RequestStreamHandler { writer.write(responseJson.toString()); writer.close(); } - } diff --git a/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java b/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java index df00994651..9d5a371ab5 100644 --- a/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java +++ b/aws-lambda/src/main/java/com/baeldung/lambda/apigateway/model/Person.java @@ -6,19 +6,13 @@ import com.google.gson.GsonBuilder; public class Person { private int id; - private String firstName; - private String lastName; - private int age; - private String address; + private String name; public Person(String json) { Gson gson = new Gson(); Person request = gson.fromJson(json, Person.class); this.id = request.getId(); - this.firstName = request.getFirstName(); - this.lastName = request.getLastName(); - this.age = request.getAge(); - this.address = request.getAddress(); + this.name = request.getName(); } public String toString() { @@ -34,35 +28,11 @@ public class Person { this.id = id; } - public String getFirstName() { - return firstName; + public String getName() { + return name; } - public void setFirstName(String firstName) { - this.firstName = firstName; + public void setName(String name) { + this.name = name; } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } } From 463d159f595d53b4436a958b369c80604858a49e Mon Sep 17 00:00:00 2001 From: chandra Date: Wed, 4 Jul 2018 01:39:17 -0400 Subject: [PATCH 70/82] Added unit test for Thread.join method --- .../thread/join/ThreadJoinUnitTest.java | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 core-java/src/test/java/com/baeldung/thread/join/ThreadJoinUnitTest.java diff --git a/core-java/src/test/java/com/baeldung/thread/join/ThreadJoinUnitTest.java b/core-java/src/test/java/com/baeldung/thread/join/ThreadJoinUnitTest.java new file mode 100644 index 0000000000..85cff51eb3 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/thread/join/ThreadJoinUnitTest.java @@ -0,0 +1,95 @@ +package com.baeldung.thread.join; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.logging.Logger; + +import org.junit.Ignore; +import org.junit.Test; + +/** + * Demonstrates Thread.join behavior. + * + */ +public class ThreadJoinUnitTest { + + final static Logger LOGGER = Logger.getLogger(ThreadJoinUnitTest.class.getName()); + + class SampleThread extends Thread { + public int processingCount = 0; + + SampleThread(int processingCount) { + this.processingCount = processingCount; + LOGGER.info("Thread " + this.getName() + " created"); + } + + @Override + public void run() { + LOGGER.info("Thread " + this.getName() + " started"); + while (processingCount > 0) { + try { + Thread.sleep(1000); // Simulate some work being done by thread + } catch (InterruptedException e) { + LOGGER.info("Thread " + this.getName() + " interrupted."); + } + processingCount--; + LOGGER.info("Inside Thread " + this.getName() + ", processingCount = " + processingCount); + } + LOGGER.info("Thread " + this.getName() + " exiting"); + } + } + + @Test + public void givenNewThread_whenJoinCalled_returnsImmediately() throws InterruptedException { + Thread t1 = new SampleThread(0); + LOGGER.info("Invoking join."); + t1.join(); + LOGGER.info("Returned from join"); + LOGGER.info("Thread state is" + t1.getState()); + assertFalse(t1.isAlive()); + } + + @Test + public void givenStartedThread_whenJoinCalled_waitsTillCompletion() + throws InterruptedException { + Thread t2 = new SampleThread(1); + t2.start(); + LOGGER.info("Invoking join."); + t2.join(); + LOGGER.info("Returned from join"); + assertFalse(t2.isAlive()); + } + + @Test + public void givenStartedThread_whenTimedJoinCalled_waitsUntilTimedout() + throws InterruptedException { + Thread t3 = new SampleThread(10); + t3.start(); + t3.join(1000); + assertTrue(t3.isAlive()); + } + + @Test + @Ignore + public void givenThreadTerminated_checkForEffect_notGuaranteed() + throws InterruptedException { + SampleThread t4 = new SampleThread(10); + t4.start(); + //not guaranteed to stop even if t4 finishes. + do { + + } while (t4.processingCount > 0); + } + + @Test + public void givenJoinWithTerminatedThread_checkForEffect_guaranteed() + throws InterruptedException { + SampleThread t4 = new SampleThread(10); + t4.start(); + do { + t4.join(100); + } while (t4.processingCount > 0); + } + +} \ No newline at end of file From 684324fc10ef158b50ace35261cb4944463c18c9 Mon Sep 17 00:00:00 2001 From: pauljervis Date: Wed, 4 Jul 2018 08:43:48 +0100 Subject: [PATCH 71/82] Update download servlet to try-with-resources block. (#4453) --- .../baeldung/servlets/DownloadServlet.java | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/DownloadServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/DownloadServlet.java index 9bbf8f4095..b1a6621b24 100644 --- a/javax-servlets/src/main/java/com/baeldung/servlets/DownloadServlet.java +++ b/javax-servlets/src/main/java/com/baeldung/servlets/DownloadServlet.java @@ -4,7 +4,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -15,21 +14,19 @@ public class DownloadServlet extends HttpServlet { private final int ARBITARY_SIZE = 1048; @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.setHeader("Content-disposition", "attachment; filename=sample.txt"); - - OutputStream out = resp.getOutputStream(); - InputStream in = req.getServletContext().getResourceAsStream("/WEB-INF/sample.txt"); - byte[] buffer = new byte[ARBITARY_SIZE]; - - int numBytesRead; - while ((numBytesRead = in.read(buffer)) > 0) { - out.write(buffer, 0, numBytesRead); + try (InputStream in = req.getServletContext().getResourceAsStream("/WEB-INF/sample.txt"); + OutputStream out = resp.getOutputStream()) { + + byte[] buffer = new byte[ARBITARY_SIZE]; + + int numBytesRead; + while ((numBytesRead = in.read(buffer)) > 0) { + out.write(buffer, 0, numBytesRead); + } } - - in.close(); - out.flush(); } } From 4615e1653b5c6a5e3980bab76444cbec9ec1dd34 Mon Sep 17 00:00:00 2001 From: Kevin Wittek Date: Wed, 4 Jul 2018 13:50:06 +0200 Subject: [PATCH 72/82] Use BufferedReader when decrypting --- .../encrypt/FileEncrypterDecrypter.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/encrypt/FileEncrypterDecrypter.java b/core-java/src/main/java/com/baeldung/encrypt/FileEncrypterDecrypter.java index aad2089d8b..b557ccf31a 100644 --- a/core-java/src/main/java/com/baeldung/encrypt/FileEncrypterDecrypter.java +++ b/core-java/src/main/java/com/baeldung/encrypt/FileEncrypterDecrypter.java @@ -2,10 +2,7 @@ package com.baeldung.encrypt; import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; +import java.io.*; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; @@ -43,14 +40,16 @@ class FileEncrypterDecrypter { fileIn.read(fileIv); cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(fileIv)); - try (CipherInputStream cipherIn = new CipherInputStream(fileIn, cipher)) { - InputStreamReader inReader = new InputStreamReader(cipherIn); + try ( + CipherInputStream cipherIn = new CipherInputStream(fileIn, cipher); + InputStreamReader inputReader = new InputStreamReader(cipherIn); + BufferedReader reader = new BufferedReader(inputReader) + ) { StringBuilder sb = new StringBuilder(); - int c = inReader.read(); - while (c != -1) { - sb.append((char) c); - c = inReader.read(); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line); } content = sb.toString(); } From 234107f519dfb2897425b4857a20faa9606c612b Mon Sep 17 00:00:00 2001 From: Timoteo Ponce <248934+timoteoponce@users.noreply.github.com> Date: Thu, 5 Jul 2018 15:02:31 -0400 Subject: [PATCH 73/82] BAEL-1933 Added code examples and unit tests for creating symbolic links (#4608) * BAEL-1933 Added code examples and unit tests for creating symbolic links * Fixed PMD violation on unit test naming * Fixed review comments * Applied baeldung-eclipse formatter settings --- .../com/baeldung/symlink/SymLinkExample.java | 54 +++++++++++++++++++ .../symlink/SymLinkExampleUnitTest.java | 36 +++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 core-java-io/src/main/java/com/baeldung/symlink/SymLinkExample.java create mode 100644 core-java-io/src/test/java/com/baeldung/symlink/SymLinkExampleUnitTest.java diff --git a/core-java-io/src/main/java/com/baeldung/symlink/SymLinkExample.java b/core-java-io/src/main/java/com/baeldung/symlink/SymLinkExample.java new file mode 100644 index 0000000000..63ee0f14b1 --- /dev/null +++ b/core-java-io/src/main/java/com/baeldung/symlink/SymLinkExample.java @@ -0,0 +1,54 @@ +package com.baeldung.symlink; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import static java.nio.file.StandardOpenOption.*; +import java.util.stream.IntStream; + +public class SymLinkExample { + + public void createSymbolicLink(Path link, Path target) throws IOException { + if (Files.exists(link)) { + Files.delete(link); + } + Files.createSymbolicLink(link, target); + } + + public void createHardLink(Path link, Path target) throws IOException { + if (Files.exists(link)) { + Files.delete(link); + } + Files.createLink(link, target); + } + + public Path createTextFile() throws IOException { + byte[] content = IntStream.range(0, 10000) + .mapToObj(i -> i + System.lineSeparator()) + .reduce("", String::concat) + .getBytes(StandardCharsets.UTF_8); + Path filePath = Paths.get(".", "target_link.txt"); + Files.write(filePath, content, CREATE, TRUNCATE_EXISTING); + return filePath; + } + + public void printLinkFiles(Path path) throws IOException { + try (DirectoryStream stream = Files.newDirectoryStream(path)) { + for (Path file : stream) { + if (Files.isDirectory(file)) { + printLinkFiles(file); + } else if (Files.isSymbolicLink(file)) { + System.out.format("File link '%s' with target '%s'%n", file, Files.readSymbolicLink(file)); + } + } + } + } + + public static void main(String[] args) throws IOException { + new SymLinkExample().printLinkFiles(Paths.get(".")); + } + +} diff --git a/core-java-io/src/test/java/com/baeldung/symlink/SymLinkExampleUnitTest.java b/core-java-io/src/test/java/com/baeldung/symlink/SymLinkExampleUnitTest.java new file mode 100644 index 0000000000..803d8881b4 --- /dev/null +++ b/core-java-io/src/test/java/com/baeldung/symlink/SymLinkExampleUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.symlink; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.junit.Test; + +public class SymLinkExampleUnitTest { + + @Test + public void whenUsingFiles_thenCreateSymbolicLink() throws IOException { + SymLinkExample example = new SymLinkExample(); + Path filePath = example.createTextFile(); + Path linkPath = Paths.get(".", "symbolic_link.txt"); + example.createSymbolicLink(linkPath, filePath); + assertTrue(Files.isSymbolicLink(linkPath)); + } + + @Test + public void whenUsingFiles_thenCreateHardLink() throws IOException { + SymLinkExample example = new SymLinkExample(); + Path filePath = example.createTextFile(); + Path linkPath = Paths.get(".", "hard_link.txt"); + example.createHardLink(linkPath, filePath); + assertFalse(Files.isSymbolicLink(linkPath)); + assertEquals(filePath.toFile() + .length(), + linkPath.toFile() + .length()); + } + +} From 59277b43397da047940c740cf6092a39dc68d060 Mon Sep 17 00:00:00 2001 From: Hai Nguyen Date: Fri, 6 Jul 2018 03:20:07 +0800 Subject: [PATCH 74/82] BAEL-1846: Java Image to Base64 String (#4600) * BAEL-1846: Java Image to Base64 String * Move from using main method to Junit test * Update to use environment variables for testing * reformat and add test file --- .../FileToBase64StringConversionUnitTest.java | 43 ++++++++++++++++++ core-java-8/src/test/resources/test_image.jpg | Bin 0 -> 2865 bytes 2 files changed, 43 insertions(+) create mode 100644 core-java-8/src/test/java/com/baeldung/fileToBase64StringConversion/FileToBase64StringConversionUnitTest.java create mode 100644 core-java-8/src/test/resources/test_image.jpg diff --git a/core-java-8/src/test/java/com/baeldung/fileToBase64StringConversion/FileToBase64StringConversionUnitTest.java b/core-java-8/src/test/java/com/baeldung/fileToBase64StringConversion/FileToBase64StringConversionUnitTest.java new file mode 100644 index 0000000000..eef21a98c9 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/fileToBase64StringConversion/FileToBase64StringConversionUnitTest.java @@ -0,0 +1,43 @@ +package com.baeldung.fileToBase64StringConversion; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.util.Base64; + +import org.apache.commons.io.FileUtils; +import org.junit.Test; + +public class FileToBase64StringConversionUnitTest { + + private String inputFilePath = "test_image.jpg"; + private String outputFilePath = "test_image_copy.jpg"; + + @Test + public void fileToBase64StringConversion() throws IOException { + //load file from /src/test/resources + ClassLoader classLoader = getClass().getClassLoader(); + File inputFile = new File(classLoader + .getResource(inputFilePath) + .getFile()); + + byte[] fileContent = FileUtils.readFileToByteArray(inputFile); + String encodedString = Base64 + .getEncoder() + .encodeToString(fileContent); + + //create output file + File outputFile = new File(inputFile + .getParentFile() + .getAbsolutePath() + File.pathSeparator + outputFilePath); + + // decode the string and write to file + byte[] decodedBytes = Base64 + .getDecoder() + .decode(encodedString); + FileUtils.writeByteArrayToFile(outputFile, decodedBytes); + + assertTrue(FileUtils.contentEquals(inputFile, outputFile)); + } +} diff --git a/core-java-8/src/test/resources/test_image.jpg b/core-java-8/src/test/resources/test_image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0db1627c9b8a4db0fb023a7229e64b282b9a70a GIT binary patch literal 2865 zcmbVO3v5$m6h8OW4u%bbvBAJ`83QI^OUEX362SGbtpi5sHW0D|y6$$ptZU1?w;K>N zFj0_@@bZCVi98hzi2(%xH8Mm{g8_uW251BknSudP#0Ol@fBPIkQ2(a?{q8y6fBy5G zdwTz>9qKpGyS&6+0u%*Mh96Kbz+&5c(E~7L3XBARB;cq%z#yXV15^fZ8U`q*2F9?H z%877jfMp`E5zZ{Ul7W%Q>d2MeNXHnd8<{vJRP`E|9NvHukiCH*Uyx@6li5CnB@uCG zc$fxzpL%p<=PKC6b}jC){_1V>GwMbC6}!bU+u@vAVxMf&MCm(R!Jv=k0UG^^pOvl0gwzCknD2H!D5GFGKopJTI_Dqt>%$m*kXjqY%Qa4w(}J8<#0Iz5Rfl*7 z;!(8;_WA@I&H))1r&RC@lIZ41EgVw7Bl-l*5uP66PGCL=Hu^%SSsR0K?j<)=PQq&r zYF}FCvJ#w!c!%3%t3;fQ_-vCny&{6|1{Jdt@o)e-E7VY3j2L^7F7rqw)rc_;EqOy_ zQM_THw`vC3)6jmblLh>Z`qjO#54#XLVFABa=!pFUszk-S*k^`IR z_f?R6aWB>?$eLb^!)7Ypsxq|WzN}A?sv>LI)gH0L9^vouN@c`O)}9Uev>wIWI9duh ziFVwJ%X3M#Qp6aOa|r%wQcr@LU^?Xj0Rm8qvm5+y2Y7HoDVXsZ1PMJJ5W$BQ0lflR z1iXuKa*mTy&7T|XrJDDBNn%E-X*@^6v>;%?|)*^OXEVcvJL=};Ix^S0poO!sT zpz)@o_BPb0fD7jf$OwQOi_onqt2075aZighTXY{=bv>b0BCc$RF>Y>=P2a-AIE0QP>u)>DL0>S);0dZdTPhTQL54fCE1D0Hh>ADx@-07SJga zlR~M70FN4qqqGqT3>3|8G}OGat)KJ6_3VOLsijBHwDkT1GKLKwk@MKd!pFyqH5EN!vD!*X%k1Tq zRn^mHpgeb-;HmeDb7dve)I5K|!e^I0_x!TuFRWO*?!}j0er5fu8#Zs*y6yEhw!it- zu6N$uz308X`}QCF_|PYZk9_*s=U<*Y)qeU+N9WlK7r(vq-R1AEbp3GS=bOL$dh55_ zzyCpWQNV;{;T%?WkFFHdMYAl!>WMCjZYIK0SZ+wZu21nay=z|ItkFx7Qq5~N?QH8Y zw7_}2U#)baXIggQg<&^{G)>vR6V~#-l*NR_b)Cb*V30P9g9aI`Mx)VMW5rRU)R3X9 zRJ5@&GPY~u5E`e1{td~?vHAc2 literal 0 HcmV?d00001 From bebaf6d3398b1274e112c7876261fd429662dd6e Mon Sep 17 00:00:00 2001 From: Felipe Santiago Corro Date: Fri, 6 Jul 2018 01:27:12 -0300 Subject: [PATCH 75/82] BAEL-1776: Add description and change module name (#4607) * Add description and change module name * Fix mvn parent in spring-boot-custom-starter --- spring-boot-custom-starter/README.md | 8 ++++++++ .../{greeter => greeter-library}/README.md | 0 .../{greeter => greeter-library}/pom.xml | 6 +++--- .../main/java/com/baeldung/greeter/library}/Greeter.java | 4 ++-- .../baeldung/greeter/library}/GreeterConfigParams.java | 2 +- .../com/baeldung/greeter/library}/GreetingConfig.java | 2 +- .../java/com/baeldung/greeter/GreeterIntegrationTest.java | 4 +++- .../greeter-spring-boot-autoconfigure/pom.xml | 8 +++++--- .../greeter/autoconfigure/GreeterAutoConfiguration.java | 6 +++--- .../baeldung/greeter/sample/GreeterSampleApplication.java | 2 +- .../sample/GreeterSampleApplicationIntegrationTest.java | 2 +- .../greeter-spring-boot-starter/pom.xml | 8 +++++--- spring-boot-custom-starter/pom.xml | 2 +- 13 files changed, 34 insertions(+), 20 deletions(-) rename spring-boot-custom-starter/{greeter => greeter-library}/README.md (100%) rename spring-boot-custom-starter/{greeter => greeter-library}/pom.xml (71%) rename spring-boot-custom-starter/{greeter/src/main/java/com/baeldung/greeter => greeter-library/src/main/java/com/baeldung/greeter/library}/Greeter.java (90%) rename spring-boot-custom-starter/{greeter/src/main/java/com/baeldung/greeter => greeter-library/src/main/java/com/baeldung/greeter/library}/GreeterConfigParams.java (90%) rename spring-boot-custom-starter/{greeter/src/main/java/com/baeldung/greeter => greeter-library/src/main/java/com/baeldung/greeter/library}/GreetingConfig.java (80%) rename spring-boot-custom-starter/{greeter => greeter-library}/src/test/java/com/baeldung/greeter/GreeterIntegrationTest.java (92%) diff --git a/spring-boot-custom-starter/README.md b/spring-boot-custom-starter/README.md index 5b05394d6e..aae79fe112 100644 --- a/spring-boot-custom-starter/README.md +++ b/spring-boot-custom-starter/README.md @@ -1,2 +1,10 @@ ### Relevant Articles: - [Creating a Custom Starter with Spring Boot](http://www.baeldung.com/spring-boot-custom-starter) + +- **greeter-library**: The sample library that we're creating the starter for. + +- **greeter-spring-boot-autoconfigure**: The project containing the auto-configuration for the library. + +- **greeter-spring-boot-starter**: The custom starter for the library. + +- **greeter-spring-boot-sample-app**: The sample project that uses the custom starter. \ No newline at end of file diff --git a/spring-boot-custom-starter/greeter/README.md b/spring-boot-custom-starter/greeter-library/README.md similarity index 100% rename from spring-boot-custom-starter/greeter/README.md rename to spring-boot-custom-starter/greeter-library/README.md diff --git a/spring-boot-custom-starter/greeter/pom.xml b/spring-boot-custom-starter/greeter-library/pom.xml similarity index 71% rename from spring-boot-custom-starter/greeter/pom.xml rename to spring-boot-custom-starter/greeter-library/pom.xml index aa45b8e6a4..3717ba005c 100644 --- a/spring-boot-custom-starter/greeter/pom.xml +++ b/spring-boot-custom-starter/greeter-library/pom.xml @@ -3,12 +3,12 @@ 4.0.0 com.baeldung - greeter + greeter-library 0.0.1-SNAPSHOT - parent-boot-1 + spring-boot-custom-starter com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-1 + ../../spring-boot-custom-starter \ No newline at end of file diff --git a/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/Greeter.java b/spring-boot-custom-starter/greeter-library/src/main/java/com/baeldung/greeter/library/Greeter.java similarity index 90% rename from spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/Greeter.java rename to spring-boot-custom-starter/greeter-library/src/main/java/com/baeldung/greeter/library/Greeter.java index 970561d1fd..50fb31ddcb 100644 --- a/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/Greeter.java +++ b/spring-boot-custom-starter/greeter-library/src/main/java/com/baeldung/greeter/library/Greeter.java @@ -1,6 +1,6 @@ -package com.baeldung.greeter; +package com.baeldung.greeter.library; -import static com.baeldung.greeter.GreeterConfigParams.*; +import static com.baeldung.greeter.library.GreeterConfigParams.*; import java.time.LocalDateTime; diff --git a/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreeterConfigParams.java b/spring-boot-custom-starter/greeter-library/src/main/java/com/baeldung/greeter/library/GreeterConfigParams.java similarity index 90% rename from spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreeterConfigParams.java rename to spring-boot-custom-starter/greeter-library/src/main/java/com/baeldung/greeter/library/GreeterConfigParams.java index fa30b0f312..14cef3e92d 100644 --- a/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreeterConfigParams.java +++ b/spring-boot-custom-starter/greeter-library/src/main/java/com/baeldung/greeter/library/GreeterConfigParams.java @@ -1,4 +1,4 @@ -package com.baeldung.greeter; +package com.baeldung.greeter.library; public class GreeterConfigParams { diff --git a/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreetingConfig.java b/spring-boot-custom-starter/greeter-library/src/main/java/com/baeldung/greeter/library/GreetingConfig.java similarity index 80% rename from spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreetingConfig.java rename to spring-boot-custom-starter/greeter-library/src/main/java/com/baeldung/greeter/library/GreetingConfig.java index fbbe11cf4f..23d4ac0a0d 100644 --- a/spring-boot-custom-starter/greeter/src/main/java/com/baeldung/greeter/GreetingConfig.java +++ b/spring-boot-custom-starter/greeter-library/src/main/java/com/baeldung/greeter/library/GreetingConfig.java @@ -1,4 +1,4 @@ -package com.baeldung.greeter; +package com.baeldung.greeter.library; import java.util.Properties; diff --git a/spring-boot-custom-starter/greeter/src/test/java/com/baeldung/greeter/GreeterIntegrationTest.java b/spring-boot-custom-starter/greeter-library/src/test/java/com/baeldung/greeter/GreeterIntegrationTest.java similarity index 92% rename from spring-boot-custom-starter/greeter/src/test/java/com/baeldung/greeter/GreeterIntegrationTest.java rename to spring-boot-custom-starter/greeter-library/src/test/java/com/baeldung/greeter/GreeterIntegrationTest.java index 787f795480..2b09ecc615 100644 --- a/spring-boot-custom-starter/greeter/src/test/java/com/baeldung/greeter/GreeterIntegrationTest.java +++ b/spring-boot-custom-starter/greeter-library/src/test/java/com/baeldung/greeter/GreeterIntegrationTest.java @@ -1,10 +1,12 @@ package com.baeldung.greeter; -import static com.baeldung.greeter.GreeterConfigParams.*; +import static com.baeldung.greeter.library.GreeterConfigParams.*; import static org.junit.Assert.assertEquals; import java.time.LocalDateTime; +import com.baeldung.greeter.library.Greeter; +import com.baeldung.greeter.library.GreetingConfig; import org.junit.BeforeClass; import org.junit.Test; diff --git a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml index 96647ea0f1..d70f176c20 100644 --- a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml +++ b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/pom.xml @@ -5,12 +5,14 @@ com.baeldung greeter-spring-boot-autoconfigure 0.0.1-SNAPSHOT + - parent-boot-1 + spring-boot-custom-starter com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-1 + ../../spring-boot-custom-starter + UTF-8 1.5.2.RELEASE @@ -40,7 +42,7 @@ com.baeldung - greeter + greeter-library ${greeter.version} true diff --git a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterAutoConfiguration.java b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterAutoConfiguration.java index 4cf078aa00..ae3f88f9ff 100644 --- a/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterAutoConfiguration.java +++ b/spring-boot-custom-starter/greeter-spring-boot-autoconfigure/src/main/java/com/baeldung/greeter/autoconfigure/GreeterAutoConfiguration.java @@ -1,6 +1,6 @@ package com.baeldung.greeter.autoconfigure; -import static com.baeldung.greeter.GreeterConfigParams.*; +import static com.baeldung.greeter.library.GreeterConfigParams.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -9,8 +9,8 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.baeldung.greeter.Greeter; -import com.baeldung.greeter.GreetingConfig; +import com.baeldung.greeter.library.Greeter; +import com.baeldung.greeter.library.GreetingConfig; @Configuration @ConditionalOnClass(Greeter.class) diff --git a/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/java/com/baeldung/greeter/sample/GreeterSampleApplication.java b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/java/com/baeldung/greeter/sample/GreeterSampleApplication.java index 3c87524648..5aa3ac7015 100644 --- a/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/java/com/baeldung/greeter/sample/GreeterSampleApplication.java +++ b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/main/java/com/baeldung/greeter/sample/GreeterSampleApplication.java @@ -5,7 +5,7 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import com.baeldung.greeter.Greeter; +import com.baeldung.greeter.library.Greeter; @SpringBootApplication public class GreeterSampleApplication implements CommandLineRunner { diff --git a/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/test/java/com/baeldung/greeter/sample/GreeterSampleApplicationIntegrationTest.java b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/test/java/com/baeldung/greeter/sample/GreeterSampleApplicationIntegrationTest.java index a4816cf319..50193ccd60 100644 --- a/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/test/java/com/baeldung/greeter/sample/GreeterSampleApplicationIntegrationTest.java +++ b/spring-boot-custom-starter/greeter-spring-boot-sample-app/src/test/java/com/baeldung/greeter/sample/GreeterSampleApplicationIntegrationTest.java @@ -10,7 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import com.baeldung.greeter.Greeter; +import com.baeldung.greeter.library.Greeter; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = GreeterSampleApplication.class) diff --git a/spring-boot-custom-starter/greeter-spring-boot-starter/pom.xml b/spring-boot-custom-starter/greeter-spring-boot-starter/pom.xml index 7bf13eebc8..af1a77d138 100644 --- a/spring-boot-custom-starter/greeter-spring-boot-starter/pom.xml +++ b/spring-boot-custom-starter/greeter-spring-boot-starter/pom.xml @@ -5,12 +5,14 @@ com.baeldung greeter-spring-boot-starter 0.0.1-SNAPSHOT + - parent-boot-1 + spring-boot-custom-starter com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-1 + ../../spring-boot-custom-starter + UTF-8 0.0.1-SNAPSHOT @@ -33,7 +35,7 @@ com.baeldung - greeter + greeter-library ${greeter.version} diff --git a/spring-boot-custom-starter/pom.xml b/spring-boot-custom-starter/pom.xml index 1bc0e14d8e..def089e9a9 100644 --- a/spring-boot-custom-starter/pom.xml +++ b/spring-boot-custom-starter/pom.xml @@ -13,7 +13,7 @@ - greeter + greeter-library greeter-spring-boot-autoconfigure greeter-spring-boot-starter greeter-spring-boot-sample-app From f086ae7814aaea1326c9fcea8a6666ecb099b8b6 Mon Sep 17 00:00:00 2001 From: Rokon Uddin Ahmed Date: Fri, 6 Jul 2018 13:25:49 +0600 Subject: [PATCH 76/82] BAEL-7217 (#4637) * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Create README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.MD * Update README.md * Update README.md * Update README.md * Update README.MD * Update README.md --- algorithms/README.md | 3 +++ antlr/README.md | 3 +++ cdi/README.md | 1 + core-java-8/README.md | 2 ++ core-java/README.md | 5 +++++ core-kotlin/README.md | 2 ++ deltaspike/README.md | 2 ++ hibernate5/README.md | 2 +- javax-servlets/README.md | 1 + json-path/README.md | 1 + libraries/README.md | 6 +++++- patterns/README.md | 1 + spring-boot-gradle/README.md | 1 + spring-boot/README.MD | 1 + spring-core/README.md | 2 ++ spring-rest/README.md | 2 +- spring-security-thymeleaf/README.MD | 1 + testing-modules/README.md | 2 +- testing-modules/test-containers/README.md | 2 +- 19 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 antlr/README.md diff --git a/algorithms/README.md b/algorithms/README.md index 50cdfbbd4f..7e37ef3ec5 100644 --- a/algorithms/README.md +++ b/algorithms/README.md @@ -22,3 +22,6 @@ - [Displaying Money Amounts in Words](http://www.baeldung.com/java-money-into-words) - [A Collaborative Filtering Recommendation System in Java](http://www.baeldung.com/java-collaborative-filtering-recommendations) - [Find All Pairs of Numbers in an Array That Add Up to a Given Sum](http://www.baeldung.com/java-algorithm-number-pairs-sum) +- [Converting Between Roman and Arabic Numerals in Java](http://www.baeldung.com/java-convert-roman-arabic) +- [Practical Java Examples of the Big O Notation](http://www.baeldung.com/java-algorithm-complexity) +- [Find the Middle Element of a Linked List](http://www.baeldung.com/java-linked-list-middle-element) diff --git a/antlr/README.md b/antlr/README.md new file mode 100644 index 0000000000..419d9ddfbb --- /dev/null +++ b/antlr/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Java with ANTLR](http://www.baeldung.com/java-antlr) diff --git a/cdi/README.md b/cdi/README.md index a27c35772a..0477ce85bd 100644 --- a/cdi/README.md +++ b/cdi/README.md @@ -1,2 +1,3 @@ ### Relevant Articles: - [CDI Interceptor vs Spring AspectJ](http://www.baeldung.com/cdi-interceptor-vs-spring-aspectj) +- [An Introduction to CDI (Contexts and Dependency Injection) in Java](http://www.baeldung.com/java-ee-cdi) diff --git a/core-java-8/README.md b/core-java-8/README.md index aa6110b7b1..7993bd93d8 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -54,3 +54,5 @@ - [An Introduction to Java.util.Hashtable Class](http://www.baeldung.com/java-hash-table) - [Method Parameter Reflection in Java](http://www.baeldung.com/java-parameter-reflection) - [Java 8 Unsigned Arithmetic Support](http://www.baeldung.com/java-unsigned-arithmetic) +- [How to Get the Start and the End of a Day using Java](http://www.baeldung.com/java-day-start-end) +- [Generalized Target-Type Inference in Java](http://www.baeldung.com/java-generalized-target-type-inference) diff --git a/core-java/README.md b/core-java/README.md index 8800e2b862..3aa50e5b86 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -161,3 +161,8 @@ - [Guide to the this Java Keyword](http://www.baeldung.com/java-this) - [Jagged Arrays In Java](http://www.baeldung.com/java-jagged-arrays) - [Importance of Main Manifest Attribute in a Self-Executing JAR](http://www.baeldung.com/java-jar-executable-manifest-main-class) +- [Extracting Year, Month and Day from Date in Java](http://www.baeldung.com/java-year-month-day) +- [Get Date Without Time in Java](http://www.baeldung.com/java-date-without-time) +- [Convert a String to Title Case](http://www.baeldung.com/java-string-title-case) +- [How to Get the File Extension of a File in Java](http://www.baeldung.com/java-file-extension) +- [Immutable Objects in Java](http://www.baeldung.com/java-immutable-object) diff --git a/core-kotlin/README.md b/core-kotlin/README.md index 7fcdc68429..69ad0a7dae 100644 --- a/core-kotlin/README.md +++ b/core-kotlin/README.md @@ -30,3 +30,5 @@ - [Lambda Expressions in Kotlin](http://www.baeldung.com/kotlin-lambda-expressions) - [Writing Specifications with Kotlin and Spek](http://www.baeldung.com/kotlin-spek) - [Processing JSON with Kotlin and Klaxson](http://www.baeldung.com/kotlin-json-klaxson) +- [Kotlin String Templates](http://www.baeldung.com/kotlin-string-template) +- [Java EE 8 Security API](http://www.baeldung.com/java-ee-8-security) diff --git a/deltaspike/README.md b/deltaspike/README.md index ff12555376..c1ab0a9736 100644 --- a/deltaspike/README.md +++ b/deltaspike/README.md @@ -1 +1,3 @@ ## Relevant articles: + +- [A Guide to DeltaSpike Data Module](http://www.baeldung.com/deltaspike-data-module) diff --git a/hibernate5/README.md b/hibernate5/README.md index afba239919..1bce52bd5e 100644 --- a/hibernate5/README.md +++ b/hibernate5/README.md @@ -12,4 +12,4 @@ - [@Immutable in Hibernate](http://www.baeldung.com/hibernate-immutable) - [Pessimistic Locking in JPA](http://www.baeldung.com/jpa-pessimistic-locking) - [Bootstrapping JPA Programmatically in Java](http://www.baeldung.com/java-bootstrap-jpa) - +- [Optimistic Locking in JPA](http://www.baeldung.com/jpa-optimistic-locking) diff --git a/javax-servlets/README.md b/javax-servlets/README.md index 55ca1116aa..d39a0cca13 100644 --- a/javax-servlets/README.md +++ b/javax-servlets/README.md @@ -5,3 +5,4 @@ - [Uploading Files with Servlets and JSP](http://www.baeldung.com/upload-file-servlet) - [Example of Downloading File in a Servlet](http://www.baeldung.com/servlet-download-file) - [Returning a JSON Response from a Servlet](http://www.baeldung.com/servlet-json-response) +- [Java EE Servlet Exception Handling](http://www.baeldung.com/servlet-exceptions) diff --git a/json-path/README.md b/json-path/README.md index 3563dcf880..7a84ea7bde 100644 --- a/json-path/README.md +++ b/json-path/README.md @@ -1,3 +1,4 @@ ## Relevant articles: - [Introduction to JsonPath](http://www.baeldung.com/guide-to-jayway-jsonpath) +- [Count with JsonPath](http://www.baeldung.com/jsonpath-count) diff --git a/libraries/README.md b/libraries/README.md index 3ef6303c88..09ad4ffcdf 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -80,7 +80,11 @@ - [Apache Commons Collections MapUtils](http://www.baeldung.com/apache-commons-map-utils) - [Testing Netty with EmbeddedChannel](http://www.baeldung.com/testing-netty-embedded-channel) - [Creating REST Microservices with Javalin](http://www.baeldung.com/javalin-rest-microservices) - +- [Introduction to JavaPoet](http://www.baeldung.com/java-poet) +- [Introduction to Joda-Time](http://www.baeldung.com/joda-time) +- [Implementing a FTP-Client in Java](http://www.baeldung.com/java-ftp-client) +- [Convert String to Date in Java](http://www.baeldung.com/java-string-to-date) +- [Histograms with Apache Commons Frequency](http://www.baeldung.com/apache-commons-frequency) 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/patterns/README.md b/patterns/README.md index df39b39224..7d58260cf0 100644 --- a/patterns/README.md +++ b/patterns/README.md @@ -4,4 +4,5 @@ - [Implementing the Template Method Pattern in Java](http://www.baeldung.com/java-template-method-pattern) - [Chain of Responsibility Design Pattern in Java](http://www.baeldung.com/chain-of-responsibility-pattern) - [The Command Pattern in Java](http://www.baeldung.com/java-command-pattern) +- [The DAO Pattern in Java](http://www.baeldung.com/java-dao-pattern) diff --git a/spring-boot-gradle/README.md b/spring-boot-gradle/README.md index f96aa9ccf8..76b82dce02 100644 --- a/spring-boot-gradle/README.md +++ b/spring-boot-gradle/README.md @@ -1,3 +1,4 @@ ### Relevant Articles: - [Spring Boot: Configuring a Main Class](http://www.baeldung.com/spring-boot-main-class) +- [Thin JARs with Spring Boot](http://www.baeldung.com/spring-boot-thin-jar) diff --git a/spring-boot/README.MD b/spring-boot/README.MD index 595e13cd9f..66e7c923c9 100644 --- a/spring-boot/README.MD +++ b/spring-boot/README.MD @@ -33,3 +33,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [How to Change the Default Port in Spring Boot](http://www.baeldung.com/spring-boot-change-port) - [Spring Boot Exit Codes](http://www.baeldung.com/spring-boot-exit-codes) - [Guide to the Favicon in Spring Boot](http://www.baeldung.com/spring-boot-favicon) +- [Spring Shutdown Callbacks](http://www.baeldung.com/spring-shutdown-callbacks) diff --git a/spring-core/README.md b/spring-core/README.md index 3684c7f6e9..adc21ffdaf 100644 --- a/spring-core/README.md +++ b/spring-core/README.md @@ -16,3 +16,5 @@ - [@Lookup Annotation in Spring](http://www.baeldung.com/spring-lookup) - [BeanNameAware and BeanFactoryAware Interfaces in Spring](http://www.baeldung.com/spring-bean-name-factory-aware) - [Spring – Injecting Collections](http://www.baeldung.com/spring-injecting-collections) +- [Access a File from the Classpath in a Spring Application](http://www.baeldung.com/spring-classpath-file-access) +- [Controlling Bean Creation Order with @DependsOn Annotation](http://www.baeldung.com/spring-depends-on) diff --git a/spring-rest/README.md b/spring-rest/README.md index d1dcf554a5..b717a5001d 100644 --- a/spring-rest/README.md +++ b/spring-rest/README.md @@ -23,4 +23,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring Custom Property Editor](http://www.baeldung.com/spring-mvc-custom-property-editor) - [Using the Spring RestTemplate Interceptor](http://www.baeldung.com/spring-rest-template-interceptor) - [Configure a RestTemplate with RestTemplateBuilder](http://www.baeldung.com/spring-rest-template-builder) - +- [Get and Post Lists of Objects with RestTemplate](http://www.baeldung.com/spring-rest-template-list) diff --git a/spring-security-thymeleaf/README.MD b/spring-security-thymeleaf/README.MD index 36007bce62..c5deeb9946 100644 --- a/spring-security-thymeleaf/README.MD +++ b/spring-security-thymeleaf/README.MD @@ -4,3 +4,4 @@ Jira BAEL-1556 ### Relevant Articles: - [Spring Security with Thymeleaf](http://www.baeldung.com/spring-security-thymeleaf) +- [Working with Select and Option in Thymeleaf](http://www.baeldung.com/thymeleaf-select-option) diff --git a/testing-modules/README.md b/testing-modules/README.md index d83970f96a..b269f547ec 100644 --- a/testing-modules/README.md +++ b/testing-modules/README.md @@ -12,4 +12,4 @@ - [Hamcrest Object Matchers](http://www.baeldung.com/hamcrest-object-matchers) - [Headers, Cookies and Parameters with REST-assured](http://www.baeldung.com/rest-assured-header-cookie-parameter) - [JSON Schema Validation with REST-assured](http://www.baeldung.com/rest-assured-json-schema) - +- [Testing Callbacks with Mockito](http://www.baeldung.com/mockito-callbacks) diff --git a/testing-modules/test-containers/README.md b/testing-modules/test-containers/README.md index 160893581d..f4f424194f 100644 --- a/testing-modules/test-containers/README.md +++ b/testing-modules/test-containers/README.md @@ -1,2 +1,2 @@ ### Relevant Articles: -- [Docker Test Containers in Java Tests](TODO link to be added.) +- [Docker Test Containers in Java Tests](http://www.baeldung.com/docker-test-containers) From 11edaaf4bcb3a5af8334d161891c2e69952a83f7 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Fri, 6 Jul 2018 21:03:23 +0530 Subject: [PATCH 77/82] BAEL-1712 Fix tests in libraries project (#4630) * BAEL-1712 Fix tests in libraries project -Renamed 45 test files to standard naming conventions. -Updated maven dependencies in libraries/pom.xml -Fixed assertion errors in some tests. -Included libraries project back into parent pom.xml * BAEL-1712 Fix tests in libraries project -Downgraded apache maven pmd plugin from 3.9.0 to 3.8 because pmd 6.0.1 present in pmd plugin 3.9.0 was unable to resolve classes having static final inner classes and was resulting into build failure. * BAEL-1712 Fix libraries -Fixed JodaTimeUnitTest --- libraries/pom.xml | 23 +++++++++++-------- .../{FugueTest.java => FugueUnitTest.java} | 2 +- ...st.java => CircularFifoQueueUnitTest.java} | 2 +- ...tmChainTest.java => AtmChainUnitTest.java} | 2 +- ...java => CollectionUtilsGuideUnitTest.java} | 2 +- ...apUtilsTest.java => MapUtilsUnitTest.java} | 2 +- .../{BagTests.java => BagUnitTest.java} | 2 +- ...Test.java => CSVReaderWriterUnitTest.java} | 2 +- ...UtilsTest.java => Lang3UtilsUnitTest.java} | 2 +- ...st.java => SimpsonIntegratorUnitTest.java} | 2 +- .../crdt/{CRDTTest.java => CRDTUnitTest.java} | 2 +- ...st.java => AllSatisfyPatternUnitTest.java} | 2 +- ...st.java => AnySatisfyPatternUnitTest.java} | 2 +- ...nTest.java => CollectPatternUnitTest.java} | 2 +- ...=> ConvertContainerToAnotherUnitTest.java} | 2 +- ...rnTest.java => DetectPatternUnitTest.java} | 2 +- ...lectTest.java => FlatCollectUnitTest.java} | 2 +- ...nTest.java => ForEachPatternUnitTest.java} | 2 +- ...st.java => InjectIntoPatternUnitTest.java} | 2 +- ...onTest.java => LazyIterationUnitTest.java} | 2 +- ...est.java => PartitionPatternUnitTest.java} | 2 +- ...rnTest.java => RejectPatternUnitTest.java} | 2 +- ...rnTest.java => SelectPatternUnitTest.java} | 2 +- .../{ZipTest.java => ZipUnitTest.java} | 2 +- ...dexTest.java => ZipWithIndexUnitTest.java} | 2 +- ...aTest.java => FunctionalJavaUnitTest.java} | 2 +- ...Test.java => AbstractIntegrationTest.java} | 4 +++- .../HelloWorldServiceIntegrationTest.java | 4 ++-- .../TransactionalServiceIntegrationTest.java | 4 ++-- .../{AppTest.java => JDeferredUnitTest.java} | 2 +- .../baeldung/jodatime/JodaTimeUnitTest.java | 4 ---- .../jool/{JOOLTest.java => JOOLUnitTest.java} | 2 +- ...est.java => SafeAdditionUtilUnitTest.java} | 2 +- ...va => MBassadorAsyncDispatchUnitTest.java} | 2 +- ... => MBassadorAsyncInvocationUnitTest.java} | 2 +- ...cTest.java => MBassadorBasicUnitTest.java} | 2 +- ...va => MBassadorConfigurationUnitTest.java} | 2 +- ...Test.java => MBassadorFilterUnitTest.java} | 2 +- ...t.java => MBassadorHierarchyUnitTest.java} | 2 +- ...rTankTests.java => WaterTankUnitTest.java} | 2 +- ...vTest.java => OpenCsvIntegrationTest.java} | 2 +- ...Tests.java => CollectorUtilsUnitTest.java} | 2 +- ...ilsTests.java => StreamUtilsUnitTest.java} | 4 ++-- ...est.java => JoolMergeStreamsUnitTest.java} | 2 +- ...amsTest.java => MergeStreamsUnitTest.java} | 2 +- ...java => StreamExMergeStreamsUnitTest.java} | 2 +- ...treamTest.java => CopyStreamUnitTest.java} | 2 +- .../text/{DiffTest.java => DiffUnitTest.java} | 2 +- ... => LongestCommonSubsequenceUnitTest.java} | 2 +- ...ilderTest.java => StrBuilderUnitTest.java} | 2 +- ...rTest.java => StrSubstitutorUnitTest.java} | 2 +- ...rTest.java => UnicodeEscaperUnitTest.java} | 2 +- ...lientTest.java => HttpClientLiveTest.java} | 2 +- pom.xml | 9 +++++--- 54 files changed, 76 insertions(+), 70 deletions(-) rename libraries/src/test/java/com/baeldung/atlassian/fugue/{FugueTest.java => FugueUnitTest.java} (99%) rename libraries/src/test/java/com/baeldung/circularfifoqueue/{CircularFifoQueueTest.java => CircularFifoQueueUnitTest.java} (99%) rename libraries/src/test/java/com/baeldung/commons/chain/{AtmChainTest.java => AtmChainUnitTest.java} (98%) rename libraries/src/test/java/com/baeldung/commons/collections/{CollectionUtilsGuideTest.java => CollectionUtilsGuideUnitTest.java} (99%) rename libraries/src/test/java/com/baeldung/commons/collections/{MapUtilsTest.java => MapUtilsUnitTest.java} (99%) rename libraries/src/test/java/com/baeldung/commons/collections4/{BagTests.java => BagUnitTest.java} (99%) rename libraries/src/test/java/com/baeldung/commons/csv/{CSVReaderWriterTest.java => CSVReaderWriterUnitTest.java} (98%) rename libraries/src/test/java/com/baeldung/commons/lang3/{Lang3UtilsTest.java => Lang3UtilsUnitTest.java} (96%) rename libraries/src/test/java/com/baeldung/commons/math/{IntegrationTest.java => SimpsonIntegratorUnitTest.java} (94%) rename libraries/src/test/java/com/baeldung/crdt/{CRDTTest.java => CRDTUnitTest.java} (99%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{AllSatisfyPatternTest.java => AllSatisfyPatternUnitTest.java} (93%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{AnySatisfyPatternTest.java => AnySatisfyPatternUnitTest.java} (93%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{CollectPatternTest.java => CollectPatternUnitTest.java} (94%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{ConvertContainerToAnotherTest.java => ConvertContainerToAnotherUnitTest.java} (92%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{DetectPatternTest.java => DetectPatternUnitTest.java} (94%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{FlatCollectTest.java => FlatCollectUnitTest.java} (98%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{ForEachPatternTest.java => ForEachPatternUnitTest.java} (95%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{InjectIntoPatternTest.java => InjectIntoPatternUnitTest.java} (92%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{LazyIterationTest.java => LazyIterationUnitTest.java} (95%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{PartitionPatternTest.java => PartitionPatternUnitTest.java} (97%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{RejectPatternTest.java => RejectPatternUnitTest.java} (95%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{SelectPatternTest.java => SelectPatternUnitTest.java} (96%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{ZipTest.java => ZipUnitTest.java} (97%) rename libraries/src/test/java/com/baeldung/eclipsecollections/{ZipWithIndexTest.java => ZipWithIndexUnitTest.java} (96%) rename libraries/src/test/java/com/baeldung/fj/{FunctionalJavaTest.java => FunctionalJavaUnitTest.java} (96%) rename libraries/src/test/java/com/baeldung/infinispan/{ConfigurationTest.java => AbstractIntegrationTest.java} (96%) rename libraries/src/test/java/com/baeldung/jdeffered/{AppTest.java => JDeferredUnitTest.java} (94%) rename libraries/src/test/java/com/baeldung/jool/{JOOLTest.java => JOOLUnitTest.java} (99%) rename libraries/src/test/java/com/baeldung/junitparams/{SafeAdditionUtilTest.java => SafeAdditionUtilUnitTest.java} (98%) rename libraries/src/test/java/com/baeldung/mbassador/{MBassadorAsyncDispatchTest.java => MBassadorAsyncDispatchUnitTest.java} (95%) rename libraries/src/test/java/com/baeldung/mbassador/{MBassadorAsyncInvocationTest.java => MBassadorAsyncInvocationUnitTest.java} (96%) rename libraries/src/test/java/com/baeldung/mbassador/{MBassadorBasicTest.java => MBassadorBasicUnitTest.java} (97%) rename libraries/src/test/java/com/baeldung/mbassador/{MBassadorConfigurationTest.java => MBassadorConfigurationUnitTest.java} (96%) rename libraries/src/test/java/com/baeldung/mbassador/{MBassadorFilterTest.java => MBassadorFilterUnitTest.java} (98%) rename libraries/src/test/java/com/baeldung/mbassador/{MBassadorHierarchyTest.java => MBassadorHierarchyUnitTest.java} (97%) rename libraries/src/test/java/com/baeldung/measurement/{WaterTankTests.java => WaterTankUnitTest.java} (98%) rename libraries/src/test/java/com/baeldung/opencsv/{OpenCsvTest.java => OpenCsvIntegrationTest.java} (97%) rename libraries/src/test/java/com/baeldung/protonpack/{CollectorUtilsTests.java => CollectorUtilsUnitTest.java} (98%) rename libraries/src/test/java/com/baeldung/protonpack/{StreamUtilsTests.java => StreamUtilsUnitTest.java} (98%) rename libraries/src/test/java/com/baeldung/stream/{JoolMergeStreamsTest.java => JoolMergeStreamsUnitTest.java} (96%) rename libraries/src/test/java/com/baeldung/stream/{MergeStreamsTest.java => MergeStreamsUnitTest.java} (97%) rename libraries/src/test/java/com/baeldung/stream/{StreamExMergeStreamsTest.java => StreamExMergeStreamsUnitTest.java} (97%) rename libraries/src/test/java/com/baeldung/streamutils/{CopyStreamTest.java => CopyStreamUnitTest.java} (99%) rename libraries/src/test/java/com/baeldung/text/{DiffTest.java => DiffUnitTest.java} (94%) rename libraries/src/test/java/com/baeldung/text/{LongestCommonSubsequenceTest.java => LongestCommonSubsequenceUnitTest.java} (93%) rename libraries/src/test/java/com/baeldung/text/{StrBuilderTest.java => StrBuilderUnitTest.java} (94%) rename libraries/src/test/java/com/baeldung/text/{StrSubstitutorTest.java => StrSubstitutorUnitTest.java} (94%) rename libraries/src/test/java/com/baeldung/text/{UnicodeEscaperTest.java => UnicodeEscaperUnitTest.java} (90%) rename libraries/src/test/java/com/baeldung/unirest/{HttpClientTest.java => HttpClientLiveTest.java} (99%) diff --git a/libraries/pom.xml b/libraries/pom.xml index e3a6656995..70346fd799 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -206,6 +206,12 @@ serenity-core ${serenity.version} test + + + org.asciidoctor + asciidoctorj + + net.serenity-bdd @@ -877,7 +883,7 @@ 1.23.0 0.1.0 0.7.0 - 3.2.4 + 3.2.7 3.6 1.1 1.9.3 @@ -901,10 +907,10 @@ 1.2.0 2.8.5 2.92 - 1.4.0 - 1.24.0 - 1.1.3-rc.5 - 1.4.0 + 1.9.26 + 1.41.0 + 1.9.0 + 1.9.27 1.1.0 4.1.20.Final 4.1 @@ -921,15 +927,14 @@ 0.6.5 0.9.0 15.2 - 2.9.9 1.5.1 2.3.0 - 2.9.9 + 2.10 1.5.1 - 1.14 + 1.15 1.0.3 1.0.0 - 3.8.4 + 3.10.2 2.5.5 1.23.0 v4-rev493-1.21.0 diff --git a/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueTest.java b/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueUnitTest.java similarity index 99% rename from libraries/src/test/java/com/baeldung/atlassian/fugue/FugueTest.java rename to libraries/src/test/java/com/baeldung/atlassian/fugue/FugueUnitTest.java index 2ba1086226..773e39b76a 100644 --- a/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueTest.java +++ b/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueUnitTest.java @@ -10,7 +10,7 @@ import java.util.function.Function; import static org.junit.Assert.*; import static io.atlassian.fugue.Unit.Unit; -public class FugueTest { +public class FugueUnitTest { @Test public void whenSome_thenDefined() { diff --git a/libraries/src/test/java/com/baeldung/circularfifoqueue/CircularFifoQueueTest.java b/libraries/src/test/java/com/baeldung/circularfifoqueue/CircularFifoQueueUnitTest.java similarity index 99% rename from libraries/src/test/java/com/baeldung/circularfifoqueue/CircularFifoQueueTest.java rename to libraries/src/test/java/com/baeldung/circularfifoqueue/CircularFifoQueueUnitTest.java index 9f670af03c..39384a7442 100644 --- a/libraries/src/test/java/com/baeldung/circularfifoqueue/CircularFifoQueueTest.java +++ b/libraries/src/test/java/com/baeldung/circularfifoqueue/CircularFifoQueueUnitTest.java @@ -7,7 +7,7 @@ import org.apache.commons.collections4.queue.CircularFifoQueue; import org.junit.Assert; import org.junit.Test; -public class CircularFifoQueueTest { +public class CircularFifoQueueUnitTest { private static final int DEFAULT_SIZE = 32; diff --git a/libraries/src/test/java/com/baeldung/commons/chain/AtmChainTest.java b/libraries/src/test/java/com/baeldung/commons/chain/AtmChainUnitTest.java similarity index 98% rename from libraries/src/test/java/com/baeldung/commons/chain/AtmChainTest.java rename to libraries/src/test/java/com/baeldung/commons/chain/AtmChainUnitTest.java index cd9a7baaf3..3d12662968 100644 --- a/libraries/src/test/java/com/baeldung/commons/chain/AtmChainTest.java +++ b/libraries/src/test/java/com/baeldung/commons/chain/AtmChainUnitTest.java @@ -8,7 +8,7 @@ import org.junit.Test; import static com.baeldung.commons.chain.AtmConstants.*; -public class AtmChainTest { +public class AtmChainUnitTest { public static final int EXPECTED_TOTAL_AMOUNT_TO_BE_WITHDRAWN = 460; public static final int EXPECTED_AMOUNT_LEFT_TO_BE_WITHDRAWN = 0; diff --git a/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideTest.java b/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideUnitTest.java similarity index 99% rename from libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideTest.java rename to libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideUnitTest.java index f34f431d8e..448c5b0729 100644 --- a/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideTest.java +++ b/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideUnitTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -public class CollectionUtilsGuideTest { +public class CollectionUtilsGuideUnitTest { Customer customer1 = new Customer(1, "Daniel", 123456l, "locality1", "city1", "1234"); Customer customer4 = new Customer(4, "Bob", 456789l, "locality4", "city4", "4567"); diff --git a/libraries/src/test/java/com/baeldung/commons/collections/MapUtilsTest.java b/libraries/src/test/java/com/baeldung/commons/collections/MapUtilsUnitTest.java similarity index 99% rename from libraries/src/test/java/com/baeldung/commons/collections/MapUtilsTest.java rename to libraries/src/test/java/com/baeldung/commons/collections/MapUtilsUnitTest.java index 988335b7d1..bad4d823a0 100644 --- a/libraries/src/test/java/com/baeldung/commons/collections/MapUtilsTest.java +++ b/libraries/src/test/java/com/baeldung/commons/collections/MapUtilsUnitTest.java @@ -17,7 +17,7 @@ import static org.hamcrest.collection.IsMapWithSize.anEmptyMap; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; -public class MapUtilsTest { +public class MapUtilsUnitTest { private String[][] color2DArray = new String[][] { { "RED", "#FF0000" }, { "GREEN", "#00FF00" }, { "BLUE", "#0000FF" } }; private String[] color1DArray = new String[] { "RED", "#FF0000", "GREEN", "#00FF00", "BLUE", "#0000FF" }; diff --git a/libraries/src/test/java/com/baeldung/commons/collections4/BagTests.java b/libraries/src/test/java/com/baeldung/commons/collections4/BagUnitTest.java similarity index 99% rename from libraries/src/test/java/com/baeldung/commons/collections4/BagTests.java rename to libraries/src/test/java/com/baeldung/commons/collections4/BagUnitTest.java index 4408dcc195..ebad4093f0 100644 --- a/libraries/src/test/java/com/baeldung/commons/collections4/BagTests.java +++ b/libraries/src/test/java/com/baeldung/commons/collections4/BagUnitTest.java @@ -14,7 +14,7 @@ import static org.hamcrest.Matchers.not; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsEqual.equalTo; -public class BagTests { +public class BagUnitTest { @Test public void givenMultipleCopies_whenAdded_theCountIsKept() { diff --git a/libraries/src/test/java/com/baeldung/commons/csv/CSVReaderWriterTest.java b/libraries/src/test/java/com/baeldung/commons/csv/CSVReaderWriterUnitTest.java similarity index 98% rename from libraries/src/test/java/com/baeldung/commons/csv/CSVReaderWriterTest.java rename to libraries/src/test/java/com/baeldung/commons/csv/CSVReaderWriterUnitTest.java index 6210bb51a9..f93e59ed75 100644 --- a/libraries/src/test/java/com/baeldung/commons/csv/CSVReaderWriterTest.java +++ b/libraries/src/test/java/com/baeldung/commons/csv/CSVReaderWriterUnitTest.java @@ -15,7 +15,7 @@ import java.util.Map; import static org.junit.Assert.assertEquals; -public class CSVReaderWriterTest { +public class CSVReaderWriterUnitTest { public static final Map AUTHOR_BOOK_MAP = Collections.unmodifiableMap(new LinkedHashMap() { { diff --git a/libraries/src/test/java/com/baeldung/commons/lang3/Lang3UtilsTest.java b/libraries/src/test/java/com/baeldung/commons/lang3/Lang3UtilsUnitTest.java similarity index 96% rename from libraries/src/test/java/com/baeldung/commons/lang3/Lang3UtilsTest.java rename to libraries/src/test/java/com/baeldung/commons/lang3/Lang3UtilsUnitTest.java index 29bcebeb2b..a10f92639c 100644 --- a/libraries/src/test/java/com/baeldung/commons/lang3/Lang3UtilsTest.java +++ b/libraries/src/test/java/com/baeldung/commons/lang3/Lang3UtilsUnitTest.java @@ -32,7 +32,7 @@ import org.apache.commons.lang3.time.FastDateFormat; import org.junit.Assert; import org.junit.Test; -public class Lang3UtilsTest { +public class Lang3UtilsUnitTest { @Test public void test_to_Boolean_fromString() { diff --git a/libraries/src/test/java/com/baeldung/commons/math/IntegrationTest.java b/libraries/src/test/java/com/baeldung/commons/math/SimpsonIntegratorUnitTest.java similarity index 94% rename from libraries/src/test/java/com/baeldung/commons/math/IntegrationTest.java rename to libraries/src/test/java/com/baeldung/commons/math/SimpsonIntegratorUnitTest.java index 7e047577e5..bb4dc53eec 100644 --- a/libraries/src/test/java/com/baeldung/commons/math/IntegrationTest.java +++ b/libraries/src/test/java/com/baeldung/commons/math/SimpsonIntegratorUnitTest.java @@ -6,7 +6,7 @@ import org.apache.commons.math3.analysis.integration.UnivariateIntegrator; import org.junit.Assert; import org.junit.Test; -public class IntegrationTest { +public class SimpsonIntegratorUnitTest { @Test public void whenUnivariateIntegratorIntegrate_thenCorrect() { diff --git a/libraries/src/test/java/com/baeldung/crdt/CRDTTest.java b/libraries/src/test/java/com/baeldung/crdt/CRDTUnitTest.java similarity index 99% rename from libraries/src/test/java/com/baeldung/crdt/CRDTTest.java rename to libraries/src/test/java/com/baeldung/crdt/CRDTUnitTest.java index 3d3c952863..840263e430 100644 --- a/libraries/src/test/java/com/baeldung/crdt/CRDTTest.java +++ b/libraries/src/test/java/com/baeldung/crdt/CRDTUnitTest.java @@ -9,7 +9,7 @@ import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; -public class CRDTTest { +public class CRDTUnitTest { @Test public void givenGrowOnlySet_whenTwoReplicasDiverge_thenShouldMergeItWithoutAConflict() { diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java similarity index 93% rename from libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java index ee369fc75b..b9790e37ea 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java @@ -8,7 +8,7 @@ import org.eclipse.collections.impl.list.mutable.FastList; import org.junit.Before; import org.junit.Test; -public class AllSatisfyPatternTest { +public class AllSatisfyPatternUnitTest { MutableList list; diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java similarity index 93% rename from libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java index a3314ebee6..d5a736503e 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java @@ -8,7 +8,7 @@ import org.eclipse.collections.impl.list.mutable.FastList; import org.junit.Before; import org.junit.Test; -public class AnySatisfyPatternTest { +public class AnySatisfyPatternUnitTest { MutableList list; diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java similarity index 94% rename from libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java index b1aaceb09b..ff111a6d72 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java @@ -6,7 +6,7 @@ import org.eclipse.collections.impl.list.mutable.FastList; import org.assertj.core.api.Assertions; import org.junit.Test; -public class CollectPatternTest { +public class CollectPatternUnitTest { @Test public void whenCollect_thenCorrect() { diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java similarity index 92% rename from libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java index e279314034..cb2bc11dc0 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java @@ -5,7 +5,7 @@ import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.impl.list.mutable.FastList; import org.junit.Test; -public class ConvertContainerToAnotherTest { +public class ConvertContainerToAnotherUnitTest { @SuppressWarnings({ "unchecked", "rawtypes" }) @Test diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java similarity index 94% rename from libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java index 4ef7348a0d..1479b06593 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java @@ -7,7 +7,7 @@ import org.eclipse.collections.impl.list.mutable.FastList; import org.junit.Before; import org.junit.Test; -public class DetectPatternTest { +public class DetectPatternUnitTest { MutableList list; diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java similarity index 98% rename from libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java index 3091f90908..b0735267ae 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java @@ -10,7 +10,7 @@ import java.util.List; import org.junit.Before; import org.junit.Test; -public class FlatCollectTest { +public class FlatCollectUnitTest { MutableList addresses1; MutableList addresses2; diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java similarity index 95% rename from libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java index 8cea575222..38d95047ed 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java @@ -7,7 +7,7 @@ import org.eclipse.collections.impl.map.mutable.UnifiedMap; import org.eclipse.collections.impl.tuple.Tuples; import org.junit.Test; -public class ForEachPatternTest { +public class ForEachPatternUnitTest { @SuppressWarnings("unchecked") @Test diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java similarity index 92% rename from libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java index 01a8fcaef4..10448c4474 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java @@ -7,7 +7,7 @@ import java.util.List; import org.eclipse.collections.impl.factory.Lists; import org.junit.Test; -public class InjectIntoPatternTest { +public class InjectIntoPatternUnitTest { @Test public void whenInjectInto_thenCorrect() { diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java similarity index 95% rename from libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java index bcb816c34a..0c3418b7b2 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java @@ -6,7 +6,7 @@ import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.impl.factory.Lists; import org.junit.Test; -public class LazyIterationTest { +public class LazyIterationUnitTest { @Test public void whenLazyIteration_thenCorrect() { diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java similarity index 97% rename from libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java index 8ef18004aa..e5c27179a9 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java @@ -8,7 +8,7 @@ import org.eclipse.collections.impl.list.mutable.FastList; import org.junit.Before; import org.junit.Test; -public class PartitionPatternTest { +public class PartitionPatternUnitTest { MutableList list; diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java similarity index 95% rename from libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java index bd743d56e8..b455938b0b 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java @@ -7,7 +7,7 @@ import org.eclipse.collections.impl.list.mutable.FastList; import org.junit.Before; import org.junit.Test; -public class RejectPatternTest { +public class RejectPatternUnitTest { MutableList list; MutableList expectedList; diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java similarity index 96% rename from libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java index 154be08f08..7735daff65 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java @@ -7,7 +7,7 @@ import org.eclipse.collections.impl.list.mutable.FastList; import org.junit.Before; import org.junit.Test; -public class SelectPatternTest { +public class SelectPatternUnitTest { MutableList list; diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ZipTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java similarity index 97% rename from libraries/src/test/java/com/baeldung/eclipsecollections/ZipTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java index 2b5aa06289..942cdf4595 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/ZipTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java @@ -9,7 +9,7 @@ import org.assertj.core.api.Assertions; import org.junit.Before; import org.junit.Test; -public class ZipTest { +public class ZipUnitTest { MutableList> expectedPairs; diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexTest.java b/libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java similarity index 96% rename from libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexTest.java rename to libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java index 724f693011..b297d1d1eb 100644 --- a/libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexTest.java +++ b/libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java @@ -9,7 +9,7 @@ import org.eclipse.collections.impl.tuple.Tuples; import org.junit.Before; import org.junit.Test; -public class ZipWithIndexTest { +public class ZipWithIndexUnitTest { MutableList> expectedPairs; diff --git a/libraries/src/test/java/com/baeldung/fj/FunctionalJavaTest.java b/libraries/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java similarity index 96% rename from libraries/src/test/java/com/baeldung/fj/FunctionalJavaTest.java rename to libraries/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java index 33952c8669..d62a115abd 100644 --- a/libraries/src/test/java/com/baeldung/fj/FunctionalJavaTest.java +++ b/libraries/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java @@ -11,7 +11,7 @@ import fj.data.Option; import fj.function.Characters; import fj.function.Integers; -public class FunctionalJavaTest { +public class FunctionalJavaUnitTest { public static final F isEven = i -> i % 2 == 0; diff --git a/libraries/src/test/java/com/baeldung/infinispan/ConfigurationTest.java b/libraries/src/test/java/com/baeldung/infinispan/AbstractIntegrationTest.java similarity index 96% rename from libraries/src/test/java/com/baeldung/infinispan/ConfigurationTest.java rename to libraries/src/test/java/com/baeldung/infinispan/AbstractIntegrationTest.java index 9210b18f0c..2a9d430430 100644 --- a/libraries/src/test/java/com/baeldung/infinispan/ConfigurationTest.java +++ b/libraries/src/test/java/com/baeldung/infinispan/AbstractIntegrationTest.java @@ -8,10 +8,12 @@ import org.infinispan.Cache; import org.infinispan.manager.DefaultCacheManager; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import java.util.function.Supplier; -public class ConfigurationTest { +@Ignore +public abstract class AbstractIntegrationTest { private DefaultCacheManager cacheManager; diff --git a/libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceIntegrationTest.java b/libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceIntegrationTest.java index 0a2ace9ca0..75dae2b2fa 100644 --- a/libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceIntegrationTest.java +++ b/libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceIntegrationTest.java @@ -1,11 +1,11 @@ package com.baeldung.infinispan.service; -import com.baeldung.infinispan.ConfigurationTest; +import com.baeldung.infinispan.AbstractIntegrationTest; import org.junit.Test; import static org.assertj.core.api.Java6Assertions.assertThat; -public class HelloWorldServiceIntegrationTest extends ConfigurationTest { +public class HelloWorldServiceIntegrationTest extends AbstractIntegrationTest { @Test public void whenGetIsCalledTwoTimes_thenTheSecondShouldHitTheCache() { diff --git a/libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java b/libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java index ace99eef36..800c6c2775 100644 --- a/libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java +++ b/libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java @@ -1,11 +1,11 @@ package com.baeldung.infinispan.service; -import com.baeldung.infinispan.ConfigurationTest; +import com.baeldung.infinispan.AbstractIntegrationTest; import org.junit.Test; import static org.assertj.core.api.Java6Assertions.assertThat; -public class TransactionalServiceIntegrationTest extends ConfigurationTest { +public class TransactionalServiceIntegrationTest extends AbstractIntegrationTest { @Test public void whenLockingAnEntry_thenItShouldBeInaccessible() throws InterruptedException { diff --git a/libraries/src/test/java/com/baeldung/jdeffered/AppTest.java b/libraries/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java similarity index 94% rename from libraries/src/test/java/com/baeldung/jdeffered/AppTest.java rename to libraries/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java index 97b20cda57..80cd16bd53 100644 --- a/libraries/src/test/java/com/baeldung/jdeffered/AppTest.java +++ b/libraries/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java @@ -5,7 +5,7 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; -public class AppTest { +public class JDeferredUnitTest { @Test public void givenJob_expectPromise() { diff --git a/libraries/src/test/java/com/baeldung/jodatime/JodaTimeUnitTest.java b/libraries/src/test/java/com/baeldung/jodatime/JodaTimeUnitTest.java index 3cf4f739e8..c2340e9528 100644 --- a/libraries/src/test/java/com/baeldung/jodatime/JodaTimeUnitTest.java +++ b/libraries/src/test/java/com/baeldung/jodatime/JodaTimeUnitTest.java @@ -86,7 +86,6 @@ public class JodaTimeUnitTest { DateTimeUtils.setCurrentMillisFixed(currentTimestamp); LocalDateTime currentDateAndTime = LocalDateTime.now(); - assertEquals(currentTimestamp, currentDateAndTime.toDate().getTime()); assertEquals(new DateTime(currentTimestamp), currentDateAndTime.toDateTime()); assertEquals(new LocalDate(currentTimestamp), currentDateAndTime.toLocalDate()); assertEquals(new LocalTime(currentTimestamp), currentDateAndTime.toLocalTime()); @@ -182,9 +181,6 @@ public class JodaTimeUnitTest { DateTime convertedDateTime = localDateTimeInChicago.toDateTime(DateTimeZone.forID("Europe/Bucharest")); assertEquals("2018-06-21T15:26:23.288+03:00", convertedDateTime.toString()); - - Date convertedDate = localDateTimeInChicago.toDate(TimeZone.getTimeZone("Europe/Bucharest")); - assertEquals("Thu Jun 21 15:26:23 EEST 2018", convertedDate.toString()); } } diff --git a/libraries/src/test/java/com/baeldung/jool/JOOLTest.java b/libraries/src/test/java/com/baeldung/jool/JOOLUnitTest.java similarity index 99% rename from libraries/src/test/java/com/baeldung/jool/JOOLTest.java rename to libraries/src/test/java/com/baeldung/jool/JOOLUnitTest.java index 2cb393abd3..153014e324 100644 --- a/libraries/src/test/java/com/baeldung/jool/JOOLTest.java +++ b/libraries/src/test/java/com/baeldung/jool/JOOLUnitTest.java @@ -21,7 +21,7 @@ import static junit.framework.Assert.assertTrue; import static junit.framework.TestCase.assertEquals; import static org.jooq.lambda.tuple.Tuple.tuple; -public class JOOLTest { +public class JOOLUnitTest { @Test public void givenSeq_whenCheckContains_shouldReturnTrue() { List concat = Seq.of(1, 2, 3).concat(Seq.of(4, 5, 6)).toList(); diff --git a/libraries/src/test/java/com/baeldung/junitparams/SafeAdditionUtilTest.java b/libraries/src/test/java/com/baeldung/junitparams/SafeAdditionUtilUnitTest.java similarity index 98% rename from libraries/src/test/java/com/baeldung/junitparams/SafeAdditionUtilTest.java rename to libraries/src/test/java/com/baeldung/junitparams/SafeAdditionUtilUnitTest.java index c8718aef8d..f9213d9ab5 100644 --- a/libraries/src/test/java/com/baeldung/junitparams/SafeAdditionUtilTest.java +++ b/libraries/src/test/java/com/baeldung/junitparams/SafeAdditionUtilUnitTest.java @@ -9,7 +9,7 @@ import org.junit.runner.RunWith; import static org.junit.Assert.assertEquals; @RunWith(JUnitParamsRunner.class) -public class SafeAdditionUtilTest { +public class SafeAdditionUtilUnitTest { private SafeAdditionUtil serviceUnderTest = new SafeAdditionUtil(); diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchTest.java b/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java similarity index 95% rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchTest.java rename to libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java index 0cab612a7b..903da00995 100644 --- a/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchTest.java +++ b/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java @@ -11,7 +11,7 @@ import static org.awaitility.Awaitility.await; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertNotNull; -public class MBassadorAsyncDispatchTest { +public class MBassadorAsyncDispatchUnitTest { private MBassador dispatcher = new MBassador(); private String testString; diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationTest.java b/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java similarity index 96% rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationTest.java rename to libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java index 99ea1aab71..bf20645e2d 100644 --- a/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationTest.java +++ b/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java @@ -13,7 +13,7 @@ import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertFalse; -public class MBassadorAsyncInvocationTest { +public class MBassadorAsyncInvocationUnitTest { private MBassador dispatcher = new MBassador(); diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicTest.java b/libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java similarity index 97% rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicTest.java rename to libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java index 04f6272412..bd05d2888e 100644 --- a/libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicTest.java +++ b/libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java @@ -11,7 +11,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -public class MBassadorBasicTest { +public class MBassadorBasicUnitTest { private MBassador dispatcher = new MBassador(); diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationTest.java b/libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java similarity index 96% rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationTest.java rename to libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java index 9d9a58aee9..68cfff0014 100644 --- a/libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationTest.java +++ b/libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java @@ -12,7 +12,7 @@ import java.util.*; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.*; -public class MBassadorConfigurationTest implements IPublicationErrorHandler { +public class MBassadorConfigurationUnitTest implements IPublicationErrorHandler { private MBassador dispatcher; private String messageString; diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterTest.java b/libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java similarity index 98% rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterTest.java rename to libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java index e90ae15d3d..0094140fee 100644 --- a/libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterTest.java +++ b/libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java @@ -14,7 +14,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; -public class MBassadorFilterTest { +public class MBassadorFilterUnitTest { private MBassador dispatcher = new MBassador(); diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyTest.java b/libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java similarity index 97% rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyTest.java rename to libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java index be5c9d4897..6f1ca83f0a 100644 --- a/libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyTest.java +++ b/libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java @@ -7,7 +7,7 @@ import org.junit.Test; import static org.junit.Assert.*; -public class MBassadorHierarchyTest { +public class MBassadorHierarchyUnitTest { private MBassador dispatcher = new MBassador(); diff --git a/libraries/src/test/java/com/baeldung/measurement/WaterTankTests.java b/libraries/src/test/java/com/baeldung/measurement/WaterTankUnitTest.java similarity index 98% rename from libraries/src/test/java/com/baeldung/measurement/WaterTankTests.java rename to libraries/src/test/java/com/baeldung/measurement/WaterTankUnitTest.java index b023ffe8d9..e23eea1714 100644 --- a/libraries/src/test/java/com/baeldung/measurement/WaterTankTests.java +++ b/libraries/src/test/java/com/baeldung/measurement/WaterTankUnitTest.java @@ -20,7 +20,7 @@ import tec.units.ri.quantity.Quantities; import tec.units.ri.unit.MetricPrefix; import static tec.units.ri.unit.Units.*; -public class WaterTankTests { +public class WaterTankUnitTest { @Test public void givenQuantity_whenGetUnitAndConvertValue_thenSuccess() { diff --git a/libraries/src/test/java/com/baeldung/opencsv/OpenCsvTest.java b/libraries/src/test/java/com/baeldung/opencsv/OpenCsvIntegrationTest.java similarity index 97% rename from libraries/src/test/java/com/baeldung/opencsv/OpenCsvTest.java rename to libraries/src/test/java/com/baeldung/opencsv/OpenCsvIntegrationTest.java index 394b3fba4f..fca96684ad 100644 --- a/libraries/src/test/java/com/baeldung/opencsv/OpenCsvTest.java +++ b/libraries/src/test/java/com/baeldung/opencsv/OpenCsvIntegrationTest.java @@ -5,7 +5,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -public class OpenCsvTest { +public class OpenCsvIntegrationTest { private Object testReadCsv(Object result) { assert (result != null); diff --git a/libraries/src/test/java/com/baeldung/protonpack/CollectorUtilsTests.java b/libraries/src/test/java/com/baeldung/protonpack/CollectorUtilsUnitTest.java similarity index 98% rename from libraries/src/test/java/com/baeldung/protonpack/CollectorUtilsTests.java rename to libraries/src/test/java/com/baeldung/protonpack/CollectorUtilsUnitTest.java index e9d5b8ede5..871a8a1935 100644 --- a/libraries/src/test/java/com/baeldung/protonpack/CollectorUtilsTests.java +++ b/libraries/src/test/java/com/baeldung/protonpack/CollectorUtilsUnitTest.java @@ -13,7 +13,7 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -public class CollectorUtilsTests { +public class CollectorUtilsUnitTest { @Test public void givenIntegerStream_whenCollectOnMaxByProjection_shouldReturnOptionalMaxValue() { diff --git a/libraries/src/test/java/com/baeldung/protonpack/StreamUtilsTests.java b/libraries/src/test/java/com/baeldung/protonpack/StreamUtilsUnitTest.java similarity index 98% rename from libraries/src/test/java/com/baeldung/protonpack/StreamUtilsTests.java rename to libraries/src/test/java/com/baeldung/protonpack/StreamUtilsUnitTest.java index ccd43b7777..889641502e 100644 --- a/libraries/src/test/java/com/baeldung/protonpack/StreamUtilsTests.java +++ b/libraries/src/test/java/com/baeldung/protonpack/StreamUtilsUnitTest.java @@ -18,7 +18,7 @@ import static java.util.stream.Collectors.toList; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -public class StreamUtilsTests { +public class StreamUtilsUnitTest { @Test public void givenStream_whenZipWithIndex_shouldReturnZippedStreamWithIndex() { @@ -174,7 +174,7 @@ public class StreamUtilsTests { public void givenLimit_withIndices_shouldReturnLongStreamUptoLimit() { LongStream indices = StreamUtils.indices().limit(500); - assertThat(indices.count(), equalTo(500)); + assertThat(indices.count(), equalTo(500L)); } } diff --git a/libraries/src/test/java/com/baeldung/stream/JoolMergeStreamsTest.java b/libraries/src/test/java/com/baeldung/stream/JoolMergeStreamsUnitTest.java similarity index 96% rename from libraries/src/test/java/com/baeldung/stream/JoolMergeStreamsTest.java rename to libraries/src/test/java/com/baeldung/stream/JoolMergeStreamsUnitTest.java index 4cda0b5940..31f3a04362 100644 --- a/libraries/src/test/java/com/baeldung/stream/JoolMergeStreamsTest.java +++ b/libraries/src/test/java/com/baeldung/stream/JoolMergeStreamsUnitTest.java @@ -10,7 +10,7 @@ import java.util.stream.Stream; import static junit.framework.TestCase.assertEquals; -public class JoolMergeStreamsTest { +public class JoolMergeStreamsUnitTest { @Test public void givenTwoStreams_whenMergingStreams_thenResultingStreamContainsElementsFromBothStreams() { Stream seq1 = Stream.of(1, 3, 5); diff --git a/libraries/src/test/java/com/baeldung/stream/MergeStreamsTest.java b/libraries/src/test/java/com/baeldung/stream/MergeStreamsUnitTest.java similarity index 97% rename from libraries/src/test/java/com/baeldung/stream/MergeStreamsTest.java rename to libraries/src/test/java/com/baeldung/stream/MergeStreamsUnitTest.java index b8748abe03..38ddb47d87 100644 --- a/libraries/src/test/java/com/baeldung/stream/MergeStreamsTest.java +++ b/libraries/src/test/java/com/baeldung/stream/MergeStreamsUnitTest.java @@ -9,7 +9,7 @@ import java.util.stream.Stream; import static org.junit.Assert.assertEquals; -public class MergeStreamsTest { +public class MergeStreamsUnitTest { @Test public void givenTwoStreams_whenMergingStreams_thenResultingStreamContainsElementsFromBothStreams() { diff --git a/libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsTest.java b/libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsUnitTest.java similarity index 97% rename from libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsTest.java rename to libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsUnitTest.java index e5392dff2a..220348bf36 100644 --- a/libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsTest.java +++ b/libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsUnitTest.java @@ -9,7 +9,7 @@ import java.util.stream.Stream; import static org.junit.Assert.assertEquals; -public class StreamExMergeStreamsTest { +public class StreamExMergeStreamsUnitTest { @Test public void givenTwoStreams_whenMergingStreams_thenResultingStreamContainsElementsFromBothStreams() { diff --git a/libraries/src/test/java/com/baeldung/streamutils/CopyStreamTest.java b/libraries/src/test/java/com/baeldung/streamutils/CopyStreamUnitTest.java similarity index 99% rename from libraries/src/test/java/com/baeldung/streamutils/CopyStreamTest.java rename to libraries/src/test/java/com/baeldung/streamutils/CopyStreamUnitTest.java index 3ed797ccaa..5af914afea 100644 --- a/libraries/src/test/java/com/baeldung/streamutils/CopyStreamTest.java +++ b/libraries/src/test/java/com/baeldung/streamutils/CopyStreamUnitTest.java @@ -16,7 +16,7 @@ import org.springframework.util.StreamUtils; import static com.baeldung.streamutils.CopyStream.getStringFromInputStream; -public class CopyStreamTest { +public class CopyStreamUnitTest { @Test public void whenCopyInputStreamToOutputStream_thenCorrect() throws IOException { diff --git a/libraries/src/test/java/com/baeldung/text/DiffTest.java b/libraries/src/test/java/com/baeldung/text/DiffUnitTest.java similarity index 94% rename from libraries/src/test/java/com/baeldung/text/DiffTest.java rename to libraries/src/test/java/com/baeldung/text/DiffUnitTest.java index 932fc96f21..f8a5d6fc0c 100644 --- a/libraries/src/test/java/com/baeldung/text/DiffTest.java +++ b/libraries/src/test/java/com/baeldung/text/DiffUnitTest.java @@ -5,7 +5,7 @@ import org.apache.commons.text.diff.StringsComparator; import org.junit.Assert; import org.junit.Test; -public class DiffTest { +public class DiffUnitTest { @Test public void whenEditScript_thenCorrect() { diff --git a/libraries/src/test/java/com/baeldung/text/LongestCommonSubsequenceTest.java b/libraries/src/test/java/com/baeldung/text/LongestCommonSubsequenceUnitTest.java similarity index 93% rename from libraries/src/test/java/com/baeldung/text/LongestCommonSubsequenceTest.java rename to libraries/src/test/java/com/baeldung/text/LongestCommonSubsequenceUnitTest.java index e0a00afd84..47cfda1863 100644 --- a/libraries/src/test/java/com/baeldung/text/LongestCommonSubsequenceTest.java +++ b/libraries/src/test/java/com/baeldung/text/LongestCommonSubsequenceUnitTest.java @@ -5,7 +5,7 @@ import org.apache.commons.text.similarity.LongestCommonSubsequenceDistance; import org.junit.Assert; import org.junit.Test; -public class LongestCommonSubsequenceTest { +public class LongestCommonSubsequenceUnitTest { @Test public void whenCompare_thenCorrect() { diff --git a/libraries/src/test/java/com/baeldung/text/StrBuilderTest.java b/libraries/src/test/java/com/baeldung/text/StrBuilderUnitTest.java similarity index 94% rename from libraries/src/test/java/com/baeldung/text/StrBuilderTest.java rename to libraries/src/test/java/com/baeldung/text/StrBuilderUnitTest.java index 4ebf00e1ed..09bb7f9a3f 100644 --- a/libraries/src/test/java/com/baeldung/text/StrBuilderTest.java +++ b/libraries/src/test/java/com/baeldung/text/StrBuilderUnitTest.java @@ -4,7 +4,7 @@ import org.apache.commons.text.StrBuilder; import org.junit.Assert; import org.junit.Test; -public class StrBuilderTest { +public class StrBuilderUnitTest { @Test public void whenReplaced_thenCorrect() { diff --git a/libraries/src/test/java/com/baeldung/text/StrSubstitutorTest.java b/libraries/src/test/java/com/baeldung/text/StrSubstitutorUnitTest.java similarity index 94% rename from libraries/src/test/java/com/baeldung/text/StrSubstitutorTest.java rename to libraries/src/test/java/com/baeldung/text/StrSubstitutorUnitTest.java index 24e6ff59c8..85f5084485 100644 --- a/libraries/src/test/java/com/baeldung/text/StrSubstitutorTest.java +++ b/libraries/src/test/java/com/baeldung/text/StrSubstitutorUnitTest.java @@ -7,7 +7,7 @@ import org.apache.commons.text.StrSubstitutor; import org.junit.Assert; import org.junit.Test; -public class StrSubstitutorTest { +public class StrSubstitutorUnitTest { @Test public void whenSubstituted_thenCorrect() { diff --git a/libraries/src/test/java/com/baeldung/text/UnicodeEscaperTest.java b/libraries/src/test/java/com/baeldung/text/UnicodeEscaperUnitTest.java similarity index 90% rename from libraries/src/test/java/com/baeldung/text/UnicodeEscaperTest.java rename to libraries/src/test/java/com/baeldung/text/UnicodeEscaperUnitTest.java index 5a52bfd0db..5614566949 100644 --- a/libraries/src/test/java/com/baeldung/text/UnicodeEscaperTest.java +++ b/libraries/src/test/java/com/baeldung/text/UnicodeEscaperUnitTest.java @@ -4,7 +4,7 @@ import org.apache.commons.text.translate.UnicodeEscaper; import org.junit.Assert; import org.junit.Test; -public class UnicodeEscaperTest { +public class UnicodeEscaperUnitTest { @Test public void whenTranslate_thenCorrect() { diff --git a/libraries/src/test/java/com/baeldung/unirest/HttpClientTest.java b/libraries/src/test/java/com/baeldung/unirest/HttpClientLiveTest.java similarity index 99% rename from libraries/src/test/java/com/baeldung/unirest/HttpClientTest.java rename to libraries/src/test/java/com/baeldung/unirest/HttpClientLiveTest.java index 82093ad297..7d3bce5cfe 100644 --- a/libraries/src/test/java/com/baeldung/unirest/HttpClientTest.java +++ b/libraries/src/test/java/com/baeldung/unirest/HttpClientLiveTest.java @@ -27,7 +27,7 @@ import com.mashape.unirest.http.Unirest; import com.mashape.unirest.http.async.Callback; import com.mashape.unirest.http.exceptions.UnirestException; -public class HttpClientTest { +public class HttpClientLiveTest { @BeforeClass public static void setup() { diff --git a/pom.xml b/pom.xml index 7a1fabfb88..51a762a888 100644 --- a/pom.xml +++ b/pom.xml @@ -92,7 +92,7 @@ jsoup testing-modules/junit-5 jws - + libraries libraries-data linkrest logging-modules/log-mdc @@ -375,8 +375,8 @@ org.apache.maven.plugins maven-pmd-plugin - 3.9.0 - + 3.8 + org.baeldung.pmd custom-pmd @@ -395,6 +395,9 @@ ${tutorialsproject.basedir}/baeldung-pmd-rules.xml + + target/generated-sources + From 56c27f346b37888ab4fa27bf77b0ede5eeaaca42 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Wed, 4 Jul 2018 22:21:44 -0600 Subject: [PATCH 78/82] Micronaut server --- micronaut/hello-world-server/.mvn/jvm.config | 1 + .../.mvn/wrapper/MavenWrapperDownloader.java | 110 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48336 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + micronaut/hello-world-server/Dockerfile | 4 + .../hello-world-server/micronaut-cli.yml | 5 + micronaut/hello-world-server/mvnw | 286 ++++++++++++++++++ micronaut/hello-world-server/mvnw.cmd | 161 ++++++++++ micronaut/hello-world-server/pom.xml | 134 ++++++++ .../java/hello/world/server/Application.java | 10 + .../server/controller/GreetController.java | 23 ++ .../src/main/resources/application.yml | 5 + .../src/main/resources/logback.xml | 14 + 13 files changed, 754 insertions(+) create mode 100644 micronaut/hello-world-server/.mvn/jvm.config create mode 100644 micronaut/hello-world-server/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.jar create mode 100644 micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.properties create mode 100644 micronaut/hello-world-server/Dockerfile create mode 100644 micronaut/hello-world-server/micronaut-cli.yml create mode 100755 micronaut/hello-world-server/mvnw create mode 100755 micronaut/hello-world-server/mvnw.cmd create mode 100644 micronaut/hello-world-server/pom.xml create mode 100644 micronaut/hello-world-server/src/main/java/hello/world/server/Application.java create mode 100644 micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java create mode 100644 micronaut/hello-world-server/src/main/resources/application.yml create mode 100644 micronaut/hello-world-server/src/main/resources/logback.xml diff --git a/micronaut/hello-world-server/.mvn/jvm.config b/micronaut/hello-world-server/.mvn/jvm.config new file mode 100644 index 0000000000..4967c447ae --- /dev/null +++ b/micronaut/hello-world-server/.mvn/jvm.config @@ -0,0 +1 @@ +-noverify -XX:TieredStopAtLevel=1 \ No newline at end of file diff --git a/micronaut/hello-world-server/.mvn/wrapper/MavenWrapperDownloader.java b/micronaut/hello-world-server/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000..d475a89ce1 --- /dev/null +++ b/micronaut/hello-world-server/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,110 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.0/maven-wrapper-0.4.0.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.jar b/micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..08ebbb67f088c53eac9a4e2cb019b93f69a1e49c GIT binary patch literal 48336 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 H*Ps3mB7Q<; literal 0 HcmV?d00001 diff --git a/micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.properties b/micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..42fa4da219 --- /dev/null +++ b/micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip \ No newline at end of file diff --git a/micronaut/hello-world-server/Dockerfile b/micronaut/hello-world-server/Dockerfile new file mode 100644 index 0000000000..ed4be82e8e --- /dev/null +++ b/micronaut/hello-world-server/Dockerfile @@ -0,0 +1,4 @@ +FROM java:openjdk-8u111-alpine +RUN apk --no-cache add curl +COPY build/libs/*-all.jar hello-world-server.jar +CMD java ${JAVA_OPTS} -jar hello-world-server.jar \ No newline at end of file diff --git a/micronaut/hello-world-server/micronaut-cli.yml b/micronaut/hello-world-server/micronaut-cli.yml new file mode 100644 index 0000000000..fe56560074 --- /dev/null +++ b/micronaut/hello-world-server/micronaut-cli.yml @@ -0,0 +1,5 @@ +profile: service +defaultPackage: hello.world.server +--- +testFramework: junit +sourceLanguage: java \ No newline at end of file diff --git a/micronaut/hello-world-server/mvnw b/micronaut/hello-world-server/mvnw new file mode 100755 index 0000000000..961a825001 --- /dev/null +++ b/micronaut/hello-world-server/mvnw @@ -0,0 +1,286 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.0/maven-wrapper-0.4.0.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/micronaut/hello-world-server/mvnw.cmd b/micronaut/hello-world-server/mvnw.cmd new file mode 100755 index 0000000000..03d90e960b --- /dev/null +++ b/micronaut/hello-world-server/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.0/maven-wrapper-0.4.0.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/micronaut/hello-world-server/pom.xml b/micronaut/hello-world-server/pom.xml new file mode 100644 index 0000000000..c7d3881642 --- /dev/null +++ b/micronaut/hello-world-server/pom.xml @@ -0,0 +1,134 @@ + + 4.0.0 + hello.world.server + hello-world-server + 0.1 + + hello.world.server.Application + 1.0.0.M2 + 9 + + + + jcenter.bintray.com + https://jcenter.bintray.com + + + + + + io.micronaut + bom + ${micronaut.version} + pom + import + + + + + + io.micronaut + http-client + compile + + + io.micronaut + http-server-netty + compile + + + io.micronaut + inject + compile + + + io.micronaut + runtime + compile + + + javax.annotation + javax.annotation-api + 1.3.2 + compile + + + io.micronaut + inject-java + provided + + + ch.qos.logback + logback-classic + 1.2.3 + runtime + + + junit + junit + 4.12 + test + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + ${exec.mainClass} + + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + java + + -classpath + + ${exec.mainClass} + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.7.0 + + ${jdk.version} + ${jdk.version} + + -parameters + + + + io.micronaut + inject-java + ${micronaut.version} + + + + + + + + diff --git a/micronaut/hello-world-server/src/main/java/hello/world/server/Application.java b/micronaut/hello-world-server/src/main/java/hello/world/server/Application.java new file mode 100644 index 0000000000..f0ce5e5d8c --- /dev/null +++ b/micronaut/hello-world-server/src/main/java/hello/world/server/Application.java @@ -0,0 +1,10 @@ +package hello.world.server; + +import io.micronaut.runtime.Micronaut; + +public class Application { + + public static void main(String[] args) { + Micronaut.run(Application.class); + } +} \ No newline at end of file diff --git a/micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java b/micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java new file mode 100644 index 0000000000..2e55a39381 --- /dev/null +++ b/micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java @@ -0,0 +1,23 @@ +package hello.world.server.controller; + +import io.micronaut.http.annotation.Body; +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; +import io.micronaut.http.annotation.Post; + +@Controller("/greet") +public class GreetController { + + private String greeting = "Hello, "; + + @Get("/{name}") + public String greet(String name) { + return greeting + name; + } + + @Post + public void setGreeting(@Body String greeting) + { + this.greeting = greeting; + } +} diff --git a/micronaut/hello-world-server/src/main/resources/application.yml b/micronaut/hello-world-server/src/main/resources/application.yml new file mode 100644 index 0000000000..03d8f4fa1a --- /dev/null +++ b/micronaut/hello-world-server/src/main/resources/application.yml @@ -0,0 +1,5 @@ +micronaut: + application: + name: hello-world-server + server: + port: 8080 \ No newline at end of file diff --git a/micronaut/hello-world-server/src/main/resources/logback.xml b/micronaut/hello-world-server/src/main/resources/logback.xml new file mode 100644 index 0000000000..afaebf8e17 --- /dev/null +++ b/micronaut/hello-world-server/src/main/resources/logback.xml @@ -0,0 +1,14 @@ + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + \ No newline at end of file From a49358cfffb944d2701e4f783e27547ecb7de99e Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Thu, 5 Jul 2018 22:58:32 -0600 Subject: [PATCH 79/82] More server stuff; create client and test --- micronaut/hello-world-server/pom.xml | 9 +++-- .../micronaut/client/GreetingClient.java | 10 ++++++ .../micronaut/server/ServerApplication.java | 10 ++++++ .../controller/AsyncGreetController.java | 20 +++++++++++ .../server/controller/GreetController.java | 28 ++++++++++++++++ .../service/EnglishGreetingService.java | 14 ++++++++ .../server/service/GreetingService.java | 6 ++++ .../service/SpanishGreetingService.java | 11 +++++++ .../java/hello/world/server/Application.java | 10 ------ .../server/controller/GreetController.java | 23 ------------- .../micronaut/client/GreetingClientTest.java | 33 +++++++++++++++++++ 11 files changed, 139 insertions(+), 35 deletions(-) create mode 100644 micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java create mode 100644 micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java create mode 100644 micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java create mode 100644 micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java create mode 100644 micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java create mode 100644 micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java create mode 100644 micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java delete mode 100644 micronaut/hello-world-server/src/main/java/hello/world/server/Application.java delete mode 100644 micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java create mode 100644 micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java diff --git a/micronaut/hello-world-server/pom.xml b/micronaut/hello-world-server/pom.xml index c7d3881642..8d42259776 100644 --- a/micronaut/hello-world-server/pom.xml +++ b/micronaut/hello-world-server/pom.xml @@ -4,7 +4,7 @@ hello-world-server 0.1 - hello.world.server.Application + com.baeldung.micronaut.server.ServerApplication 1.0.0.M2 9 @@ -69,7 +69,12 @@ 4.12 test - + + io.projectreactor + reactor-core + 3.1.6.RELEASE + + diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java new file mode 100644 index 0000000000..de61ecd5f3 --- /dev/null +++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java @@ -0,0 +1,10 @@ +package com.baeldung.micronaut.client; + +import io.micronaut.http.annotation.Get; +import io.micronaut.http.client.Client; + +@Client("/greet") +public interface GreetingClient { + @Get("/{name}") + String greet(String name); +} diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java new file mode 100644 index 0000000000..905acc8433 --- /dev/null +++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java @@ -0,0 +1,10 @@ +package com.baeldung.micronaut.server; + +import io.micronaut.runtime.Micronaut; + +public class ServerApplication { + + public static void main(String[] args) { + Micronaut.run(ServerApplication.class); + } +} \ No newline at end of file diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java new file mode 100644 index 0000000000..dcc64eb26e --- /dev/null +++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java @@ -0,0 +1,20 @@ +package com.baeldung.micronaut.server.controller; + +import com.baeldung.micronaut.server.service.GreetingService; +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; +import reactor.core.publisher.Mono; + +import javax.inject.Inject; + +@Controller("/async/greet") +public class AsyncGreetController { + + @Inject + private GreetingService greetingService; + + @Get("/{name}") + public Mono greet(String name) { + return Mono.just(greetingService.getGreeting() + name); + } +} diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java new file mode 100644 index 0000000000..64a499ce52 --- /dev/null +++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java @@ -0,0 +1,28 @@ +package com.baeldung.micronaut.server.controller; + +import com.baeldung.micronaut.server.service.GreetingService; +import io.micronaut.http.MediaType; +import io.micronaut.http.annotation.Body; +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; +import io.micronaut.http.annotation.Post; + +import javax.inject.Inject; + +@Controller("/greet") +public class GreetController { + + @Inject + private GreetingService greetingService; + + @Get("/{name}") + public String greet(String name) { + return greetingService.getGreeting() + name; + } + + @Post(value = "/{name}", consumes = MediaType.TEXT_PLAIN) + public String setGreeting(@Body String name) + { + return greetingService.getGreeting() + name; + } +} diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java new file mode 100644 index 0000000000..81cc18c0ff --- /dev/null +++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java @@ -0,0 +1,14 @@ +package com.baeldung.micronaut.server.service; + +import io.micronaut.context.annotation.Primary; + +import javax.inject.Singleton; + +@Primary +@Singleton +public class EnglishGreetingService implements GreetingService { + @Override + public String getGreeting() { + return "Hello "; + } +} diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java new file mode 100644 index 0000000000..a27957566a --- /dev/null +++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java @@ -0,0 +1,6 @@ +package com.baeldung.micronaut.server.service; + +public interface GreetingService { + + String getGreeting(); +} diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java new file mode 100644 index 0000000000..6ce6bfe8df --- /dev/null +++ b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java @@ -0,0 +1,11 @@ +package com.baeldung.micronaut.server.service; + +import javax.inject.Singleton; + +@Singleton +public class SpanishGreetingService implements GreetingService { + @Override + public String getGreeting() { + return "Hola "; + } +} diff --git a/micronaut/hello-world-server/src/main/java/hello/world/server/Application.java b/micronaut/hello-world-server/src/main/java/hello/world/server/Application.java deleted file mode 100644 index f0ce5e5d8c..0000000000 --- a/micronaut/hello-world-server/src/main/java/hello/world/server/Application.java +++ /dev/null @@ -1,10 +0,0 @@ -package hello.world.server; - -import io.micronaut.runtime.Micronaut; - -public class Application { - - public static void main(String[] args) { - Micronaut.run(Application.class); - } -} \ No newline at end of file diff --git a/micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java b/micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java deleted file mode 100644 index 2e55a39381..0000000000 --- a/micronaut/hello-world-server/src/main/java/hello/world/server/controller/GreetController.java +++ /dev/null @@ -1,23 +0,0 @@ -package hello.world.server.controller; - -import io.micronaut.http.annotation.Body; -import io.micronaut.http.annotation.Controller; -import io.micronaut.http.annotation.Get; -import io.micronaut.http.annotation.Post; - -@Controller("/greet") -public class GreetController { - - private String greeting = "Hello, "; - - @Get("/{name}") - public String greet(String name) { - return greeting + name; - } - - @Post - public void setGreeting(@Body String greeting) - { - this.greeting = greeting; - } -} diff --git a/micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java b/micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java new file mode 100644 index 0000000000..0c1634d01d --- /dev/null +++ b/micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java @@ -0,0 +1,33 @@ +package com.baeldung.micronaut.client; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.runtime.server.EmbeddedServer; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static junit.framework.TestCase.assertEquals; + +public class GreetingClientTest { + private EmbeddedServer server; + private GreetingClient client; + + @Before + public void setup() + { + this.server = ApplicationContext.run(EmbeddedServer.class); + this.client = server.getApplicationContext().getBean(GreetingClient.class); + } + + @Test + public void shouldReturnName() { + String response = client.greet("Mike"); + assertEquals(response, "Hello Mike"); + } + + @After + public void cleanup() + { + this.server.stop(); + } +} From b4969dd2b8b635d42d1080154bcbcc9f1b2c70ee Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 6 Jul 2018 13:49:23 +0000 Subject: [PATCH 80/82] Rename directory, new concerete client example --- .../controller/AsyncGreetController.java | 20 --------- .../.mvn/jvm.config | 0 .../.mvn/wrapper/MavenWrapperDownloader.java | 0 .../.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 .../Dockerfile | 0 .../micronaut-cli.yml | 0 .../{hello-world-server => hello-world}/mvnw | 0 .../mvnw.cmd | 0 .../pom.xml | 8 ++-- .../client/ConcreteGreetingClient.java | 28 +++++++++++++ .../helloworld}/client/GreetingClient.java | 6 ++- .../helloworld}/server/ServerApplication.java | 2 +- .../controller/AsyncGreetController.java | 20 +++++++++ .../server/controller/GreetController.java | 4 +- .../service/EnglishGreetingService.java | 2 +- .../server/service/GreetingService.java | 2 +- .../service/SpanishGreetingService.java | 2 +- .../src/main/resources/application.yml | 2 +- .../src/main/resources/logback.xml | 0 .../client/ConcreteGreetingClientTest.java | 38 ++++++++++++++++++ .../client/GreetingClientTest.java | 19 +++++---- 22 files changed, 111 insertions(+), 42 deletions(-) delete mode 100644 micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java rename micronaut/{hello-world-server => hello-world}/.mvn/jvm.config (100%) rename micronaut/{hello-world-server => hello-world}/.mvn/wrapper/MavenWrapperDownloader.java (100%) rename micronaut/{hello-world-server => hello-world}/.mvn/wrapper/maven-wrapper.jar (100%) rename micronaut/{hello-world-server => hello-world}/.mvn/wrapper/maven-wrapper.properties (100%) rename micronaut/{hello-world-server => hello-world}/Dockerfile (100%) rename micronaut/{hello-world-server => hello-world}/micronaut-cli.yml (100%) rename micronaut/{hello-world-server => hello-world}/mvnw (100%) rename micronaut/{hello-world-server => hello-world}/mvnw.cmd (100%) rename micronaut/{hello-world-server => hello-world}/pom.xml (95%) create mode 100644 micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClient.java rename micronaut/{hello-world-server/src/main/java/com/baeldung/micronaut => hello-world/src/main/java/com/baeldung/micronaut/helloworld}/client/GreetingClient.java (59%) rename micronaut/{hello-world-server/src/main/java/com/baeldung/micronaut => hello-world/src/main/java/com/baeldung/micronaut/helloworld}/server/ServerApplication.java (77%) create mode 100644 micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/controller/AsyncGreetController.java rename micronaut/{hello-world-server/src/main/java/com/baeldung/micronaut => hello-world/src/main/java/com/baeldung/micronaut/helloworld}/server/controller/GreetController.java (82%) rename micronaut/{hello-world-server/src/main/java/com/baeldung/micronaut => hello-world/src/main/java/com/baeldung/micronaut/helloworld}/server/service/EnglishGreetingService.java (81%) rename micronaut/{hello-world-server/src/main/java/com/baeldung/micronaut => hello-world/src/main/java/com/baeldung/micronaut/helloworld}/server/service/GreetingService.java (52%) rename micronaut/{hello-world-server/src/main/java/com/baeldung/micronaut => hello-world/src/main/java/com/baeldung/micronaut/helloworld}/server/service/SpanishGreetingService.java (76%) rename micronaut/{hello-world-server => hello-world}/src/main/resources/application.yml (80%) rename micronaut/{hello-world-server => hello-world}/src/main/resources/logback.xml (100%) create mode 100644 micronaut/hello-world/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientTest.java rename micronaut/{hello-world-server/src/test/java/com/baeldung/micronaut => hello-world/src/test/java/com/baeldung/micronaut/helloworld}/client/GreetingClientTest.java (56%) diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java b/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java deleted file mode 100644 index dcc64eb26e..0000000000 --- a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/AsyncGreetController.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.micronaut.server.controller; - -import com.baeldung.micronaut.server.service.GreetingService; -import io.micronaut.http.annotation.Controller; -import io.micronaut.http.annotation.Get; -import reactor.core.publisher.Mono; - -import javax.inject.Inject; - -@Controller("/async/greet") -public class AsyncGreetController { - - @Inject - private GreetingService greetingService; - - @Get("/{name}") - public Mono greet(String name) { - return Mono.just(greetingService.getGreeting() + name); - } -} diff --git a/micronaut/hello-world-server/.mvn/jvm.config b/micronaut/hello-world/.mvn/jvm.config similarity index 100% rename from micronaut/hello-world-server/.mvn/jvm.config rename to micronaut/hello-world/.mvn/jvm.config diff --git a/micronaut/hello-world-server/.mvn/wrapper/MavenWrapperDownloader.java b/micronaut/hello-world/.mvn/wrapper/MavenWrapperDownloader.java similarity index 100% rename from micronaut/hello-world-server/.mvn/wrapper/MavenWrapperDownloader.java rename to micronaut/hello-world/.mvn/wrapper/MavenWrapperDownloader.java diff --git a/micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.jar b/micronaut/hello-world/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.jar rename to micronaut/hello-world/.mvn/wrapper/maven-wrapper.jar diff --git a/micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.properties b/micronaut/hello-world/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from micronaut/hello-world-server/.mvn/wrapper/maven-wrapper.properties rename to micronaut/hello-world/.mvn/wrapper/maven-wrapper.properties diff --git a/micronaut/hello-world-server/Dockerfile b/micronaut/hello-world/Dockerfile similarity index 100% rename from micronaut/hello-world-server/Dockerfile rename to micronaut/hello-world/Dockerfile diff --git a/micronaut/hello-world-server/micronaut-cli.yml b/micronaut/hello-world/micronaut-cli.yml similarity index 100% rename from micronaut/hello-world-server/micronaut-cli.yml rename to micronaut/hello-world/micronaut-cli.yml diff --git a/micronaut/hello-world-server/mvnw b/micronaut/hello-world/mvnw similarity index 100% rename from micronaut/hello-world-server/mvnw rename to micronaut/hello-world/mvnw diff --git a/micronaut/hello-world-server/mvnw.cmd b/micronaut/hello-world/mvnw.cmd similarity index 100% rename from micronaut/hello-world-server/mvnw.cmd rename to micronaut/hello-world/mvnw.cmd diff --git a/micronaut/hello-world-server/pom.xml b/micronaut/hello-world/pom.xml similarity index 95% rename from micronaut/hello-world-server/pom.xml rename to micronaut/hello-world/pom.xml index 8d42259776..56d051e506 100644 --- a/micronaut/hello-world-server/pom.xml +++ b/micronaut/hello-world/pom.xml @@ -1,17 +1,17 @@ 4.0.0 - hello.world.server - hello-world-server + com.baeldung.micronaut + hello-world 0.1 - com.baeldung.micronaut.server.ServerApplication + com.baeldung.micronaut.helloworld.server.ServerApplication 1.0.0.M2 9 jcenter.bintray.com - https://jcenter.bintray.com + http://jcenter.bintray.com diff --git a/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClient.java b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClient.java new file mode 100644 index 0000000000..d4051cef52 --- /dev/null +++ b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClient.java @@ -0,0 +1,28 @@ +package com.baeldung.micronaut.helloworld.client; + +import io.micronaut.http.HttpRequest; +import io.micronaut.http.client.Client; +import io.micronaut.http.client.RxHttpClient; +import io.reactivex.Single; + +import javax.inject.Singleton; + +@Singleton +public class ConcreteGreetingClient +{ + private RxHttpClient httpClient; + + public ConcreteGreetingClient(@Client("/") RxHttpClient httpClient) { + this.httpClient = httpClient; + } + + public String greet(String name) { + HttpRequest req = HttpRequest.GET("/greet/" + name); + return httpClient.retrieve(req).blockingFirst(); + } + + public Single greetAsync(String name) { + HttpRequest req = HttpRequest.GET("/async/greet/" + name); + return httpClient.retrieve(req).first("An error as occurred"); + } +} diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/client/GreetingClient.java similarity index 59% rename from micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java rename to micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/client/GreetingClient.java index de61ecd5f3..8a691d5b06 100644 --- a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/client/GreetingClient.java +++ b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/client/GreetingClient.java @@ -1,10 +1,14 @@ -package com.baeldung.micronaut.client; +package com.baeldung.micronaut.helloworld.client; import io.micronaut.http.annotation.Get; import io.micronaut.http.client.Client; +import io.micronaut.http.client.RxHttpClient; + +import javax.inject.Inject; @Client("/greet") public interface GreetingClient { + @Get("/{name}") String greet(String name); } diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/ServerApplication.java similarity index 77% rename from micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java rename to micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/ServerApplication.java index 905acc8433..c5936051dd 100644 --- a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/ServerApplication.java +++ b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/ServerApplication.java @@ -1,4 +1,4 @@ -package com.baeldung.micronaut.server; +package com.baeldung.micronaut.helloworld.server; import io.micronaut.runtime.Micronaut; diff --git a/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/controller/AsyncGreetController.java b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/controller/AsyncGreetController.java new file mode 100644 index 0000000000..4d86b9dfed --- /dev/null +++ b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/controller/AsyncGreetController.java @@ -0,0 +1,20 @@ +package com.baeldung.micronaut.helloworld.server.controller; + +import com.baeldung.micronaut.helloworld.server.service.GreetingService; +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; +import io.reactivex.Single; + +import javax.inject.Inject; + +@Controller("/async/greet") +public class AsyncGreetController { + + @Inject + private GreetingService greetingService; + + @Get("/{name}") + public Single greet(String name) { + return Single.just(greetingService.getGreeting() + name); + } +} diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/controller/GreetController.java similarity index 82% rename from micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java rename to micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/controller/GreetController.java index 64a499ce52..c890c037e4 100644 --- a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/controller/GreetController.java +++ b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/controller/GreetController.java @@ -1,6 +1,6 @@ -package com.baeldung.micronaut.server.controller; +package com.baeldung.micronaut.helloworld.server.controller; -import com.baeldung.micronaut.server.service.GreetingService; +import com.baeldung.micronaut.helloworld.server.service.GreetingService; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Body; import io.micronaut.http.annotation.Controller; diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/service/EnglishGreetingService.java similarity index 81% rename from micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java rename to micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/service/EnglishGreetingService.java index 81cc18c0ff..8ea5172cf6 100644 --- a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/EnglishGreetingService.java +++ b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/service/EnglishGreetingService.java @@ -1,4 +1,4 @@ -package com.baeldung.micronaut.server.service; +package com.baeldung.micronaut.helloworld.server.service; import io.micronaut.context.annotation.Primary; diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/service/GreetingService.java similarity index 52% rename from micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java rename to micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/service/GreetingService.java index a27957566a..6e28baaebe 100644 --- a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/GreetingService.java +++ b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/service/GreetingService.java @@ -1,4 +1,4 @@ -package com.baeldung.micronaut.server.service; +package com.baeldung.micronaut.helloworld.server.service; public interface GreetingService { diff --git a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/service/SpanishGreetingService.java similarity index 76% rename from micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java rename to micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/service/SpanishGreetingService.java index 6ce6bfe8df..1ec53d8b2d 100644 --- a/micronaut/hello-world-server/src/main/java/com/baeldung/micronaut/server/service/SpanishGreetingService.java +++ b/micronaut/hello-world/src/main/java/com/baeldung/micronaut/helloworld/server/service/SpanishGreetingService.java @@ -1,4 +1,4 @@ -package com.baeldung.micronaut.server.service; +package com.baeldung.micronaut.helloworld.server.service; import javax.inject.Singleton; diff --git a/micronaut/hello-world-server/src/main/resources/application.yml b/micronaut/hello-world/src/main/resources/application.yml similarity index 80% rename from micronaut/hello-world-server/src/main/resources/application.yml rename to micronaut/hello-world/src/main/resources/application.yml index 03d8f4fa1a..4119026dd6 100644 --- a/micronaut/hello-world-server/src/main/resources/application.yml +++ b/micronaut/hello-world/src/main/resources/application.yml @@ -2,4 +2,4 @@ micronaut: application: name: hello-world-server server: - port: 8080 \ No newline at end of file + port: 9080 \ No newline at end of file diff --git a/micronaut/hello-world-server/src/main/resources/logback.xml b/micronaut/hello-world/src/main/resources/logback.xml similarity index 100% rename from micronaut/hello-world-server/src/main/resources/logback.xml rename to micronaut/hello-world/src/main/resources/logback.xml diff --git a/micronaut/hello-world/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientTest.java b/micronaut/hello-world/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientTest.java new file mode 100644 index 0000000000..c8c1d6b12a --- /dev/null +++ b/micronaut/hello-world/src/test/java/com/baeldung/micronaut/helloworld/client/ConcreteGreetingClientTest.java @@ -0,0 +1,38 @@ +package com.baeldung.micronaut.helloworld.client; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.runtime.server.EmbeddedServer; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static junit.framework.TestCase.assertEquals; + +public class ConcreteGreetingClientTest +{ + private EmbeddedServer server; + private ConcreteGreetingClient client; + + @Before + public void setup() + { + server = ApplicationContext.run(EmbeddedServer.class); + client = server.getApplicationContext().getBean(ConcreteGreetingClient.class); + } + + @After + public void cleanup() + { + server.stop(); + } + + @Test + public void testGreeting() { + assertEquals(client.greet("Mike"), "Hello Mike"); + } + + @Test + public void testGreetingAsync() { + assertEquals(client.greetAsync("Mike").blockingGet(), "Hello Mike"); + } +} diff --git a/micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java b/micronaut/hello-world/src/test/java/com/baeldung/micronaut/helloworld/client/GreetingClientTest.java similarity index 56% rename from micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java rename to micronaut/hello-world/src/test/java/com/baeldung/micronaut/helloworld/client/GreetingClientTest.java index 0c1634d01d..0f2ca460ac 100644 --- a/micronaut/hello-world-server/src/test/java/com/baeldung/micronaut/client/GreetingClientTest.java +++ b/micronaut/hello-world/src/test/java/com/baeldung/micronaut/helloworld/client/GreetingClientTest.java @@ -1,4 +1,4 @@ -package com.baeldung.micronaut.client; +package com.baeldung.micronaut.helloworld.client; import io.micronaut.context.ApplicationContext; import io.micronaut.runtime.server.EmbeddedServer; @@ -15,19 +15,18 @@ public class GreetingClientTest { @Before public void setup() { - this.server = ApplicationContext.run(EmbeddedServer.class); - this.client = server.getApplicationContext().getBean(GreetingClient.class); - } - - @Test - public void shouldReturnName() { - String response = client.greet("Mike"); - assertEquals(response, "Hello Mike"); + server = ApplicationContext.run(EmbeddedServer.class); + client = server.getApplicationContext().getBean(GreetingClient.class); } @After public void cleanup() { - this.server.stop(); + server.stop(); + } + + @Test + public void testGreeting() { + assertEquals(client.greet("Mike"), "Hello Mike"); } } From 2201a8d9d99759d56b787bcc997fe5c3bcc627ef Mon Sep 17 00:00:00 2001 From: myluckagain Date: Sat, 7 Jul 2018 16:00:37 +0500 Subject: [PATCH 81/82] bael-1874 (#4574) * bael-1874 * bael-1874 fix * bael-1874 fix1 --- .../rxjava/MultipleSubscribersColdObs.java | 59 +++++++ .../rxjava/MultipleSubscribersHotObs.java | 152 ++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersColdObs.java create mode 100644 rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersHotObs.java diff --git a/rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersColdObs.java b/rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersColdObs.java new file mode 100644 index 0000000000..1d3e1b3f8a --- /dev/null +++ b/rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersColdObs.java @@ -0,0 +1,59 @@ +package com.baeldung.rxjava; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import rx.Observable; +import rx.Subscription; +import rx.observables.ConnectableObservable; +import rx.subscriptions.Subscriptions; + +public class MultipleSubscribersColdObs { + private static final Logger LOGGER = LoggerFactory.getLogger(MultipleSubscribersColdObs.class); + + public static void main(String[] args) throws InterruptedException { + defaultBehaviour(); + // subscribeBeforeConnect(); + + } + + private static void defaultBehaviour() { + Observable obs = getObservable(); + + LOGGER.info("Subscribing"); + Subscription s1 = obs.subscribe(i -> LOGGER.info("subscriber#1 is printing " + i)); + Subscription s2 = obs.subscribe(i -> LOGGER.info("subscriber#2 is printing " + i)); + + s1.unsubscribe(); + s2.unsubscribe(); + } + + private static void subscribeBeforeConnect() throws InterruptedException { + ConnectableObservable obs = getObservable().publish(); + + LOGGER.info("Subscribing"); + obs.subscribe(i -> LOGGER.info("subscriber #1 is printing " + i)); + obs.subscribe(i -> LOGGER.info("subscriber #2 is printing " + i)); + Thread.sleep(1000); + LOGGER.info("Connecting"); + Subscription s = obs.connect(); + s.unsubscribe(); + + } + + private static Observable getObservable() { + return Observable.create(subscriber -> { + subscriber.onNext(gettingValue(1)); + subscriber.onNext(gettingValue(2)); + + subscriber.add(Subscriptions.create(() -> { + LOGGER.info("Clear resources"); + })); + }); + } + + private static Integer gettingValue(int i) { + LOGGER.info("Getting " + i); + return i; + } +} diff --git a/rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersHotObs.java b/rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersHotObs.java new file mode 100644 index 0000000000..686c230003 --- /dev/null +++ b/rxjava/src/main/java/com/baeldung/rxjava/MultipleSubscribersHotObs.java @@ -0,0 +1,152 @@ +package com.baeldung.rxjava; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.lang.reflect.InvocationTargetException; + +import javax.swing.JFrame; +import rx.Observable; +import rx.Subscription; +import rx.observables.ConnectableObservable; +import rx.subscriptions.Subscriptions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MultipleSubscribersHotObs { + private static final Logger LOGGER = LoggerFactory.getLogger(MultipleSubscribersHotObs.class); + private static JFrame frame; + + public static void main(String[] args) throws InterruptedException, InvocationTargetException { + + javax.swing.SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + createAndShowGUI(); + } + }); + + defaultBehaviour(); + // subscribeBeforeConnect(); + // connectBeforeSubscribe(); + // autoConnectAndSubscribe(); + // refCountAndSubscribe(); + } + + private static void createAndShowGUI() { + frame = new JFrame("Hot Observable Demo"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.getContentPane().setBackground(Color.GRAY); + frame.setPreferredSize(new Dimension(500, 500)); + frame.pack(); + frame.setVisible(true); + } + + public static void defaultBehaviour() throws InterruptedException { + Observable obs = getObservable(); + + LOGGER.info("subscribing #1"); + Subscription subscription1 = obs.subscribe((i) -> LOGGER.info("subscriber#1 is printing x-coordinate " + i)); + + Thread.sleep(1000); + LOGGER.info("subscribing #2"); + Subscription subscription2 = obs.subscribe((i) -> LOGGER.info("subscriber#2 is printing x-coordinate " + i)); + Thread.sleep(1000); + LOGGER.info("unsubscribe#1"); + subscription1.unsubscribe(); + Thread.sleep(1000); + LOGGER.info("unsubscribe#2"); + subscription2.unsubscribe(); + } + + public static void subscribeBeforeConnect() throws InterruptedException { + + ConnectableObservable obs = getObservable().publish(); + + LOGGER.info("subscribing #1"); + Subscription subscription1 = obs.subscribe((i) -> LOGGER.info("subscriber#1 is printing x-coordinate " + i)); + Thread.sleep(1000); + LOGGER.info("subscribing #2"); + Subscription subscription2 = obs.subscribe((i) -> LOGGER.info("subscriber#2 is printing x-coordinate " + i)); + Thread.sleep(1000); + LOGGER.info("connecting:"); + Subscription s = obs.connect(); + Thread.sleep(1000); + LOGGER.info("unsubscribe connected"); + s.unsubscribe(); + + } + + public static void connectBeforeSubscribe() throws InterruptedException { + + ConnectableObservable obs = getObservable().doOnNext(x -> LOGGER.info("saving " + x)).publish(); + LOGGER.info("connecting:"); + Subscription s = obs.connect(); + Thread.sleep(1000); + LOGGER.info("subscribing #1"); + obs.subscribe((i) -> LOGGER.info("subscriber#1 is printing x-coordinate " + i)); + Thread.sleep(1000); + LOGGER.info("subscribing #2"); + obs.subscribe((i) -> LOGGER.info("subscriber#2 is printing x-coordinate " + i)); + Thread.sleep(1000); + s.unsubscribe(); + + } + + public static void autoConnectAndSubscribe() throws InterruptedException { + Observable obs = getObservable().doOnNext(x -> LOGGER.info("saving " + x)).publish().autoConnect(); + + LOGGER.info("autoconnect()"); + Thread.sleep(1000); + LOGGER.info("subscribing #1"); + Subscription s1 = obs.subscribe((i) -> LOGGER.info("subscriber#1 is printing x-coordinate " + i)); + Thread.sleep(1000); + LOGGER.info("subscribing #2"); + Subscription s2 = obs.subscribe((i) -> LOGGER.info("subscriber#2 is printing x-coordinate " + i)); + + Thread.sleep(1000); + LOGGER.info("unsubscribe 1"); + s1.unsubscribe(); + Thread.sleep(1000); + LOGGER.info("unsubscribe 2"); + s2.unsubscribe(); + } + + public static void refCountAndSubscribe() throws InterruptedException { + Observable obs = getObservable().doOnNext(x -> LOGGER.info("saving " + x)).publish().refCount(); + + LOGGER.info("refcount()"); + Thread.sleep(1000); + LOGGER.info("subscribing #1"); + Subscription subscription1 = obs.subscribe((i) -> LOGGER.info("subscriber#1 is printing x-coordinate " + i)); + Thread.sleep(1000); + LOGGER.info("subscribing #2"); + Subscription subscription2 = obs.subscribe((i) -> LOGGER.info("subscriber#2 is printing x-coordinate " + i)); + + Thread.sleep(1000); + LOGGER.info("unsubscribe#1"); + subscription1.unsubscribe(); + Thread.sleep(1000); + LOGGER.info("unsubscribe#2"); + subscription2.unsubscribe(); + + } + + private static Observable getObservable() { + return Observable.create(subscriber -> { + frame.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + subscriber.onNext(e.getX()); + } + }); + subscriber.add(Subscriptions.create(() -> { + LOGGER.info("Clear resources"); + for (MouseListener listener : frame.getListeners(MouseListener.class)) { + frame.removeMouseListener(listener); + } + })); + }); + } +} From da1db70aad90c23335a1a02eb3420f65018c6de4 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 7 Jul 2018 15:40:12 +0300 Subject: [PATCH 82/82] Update FileEncrypterDecrypterIntegrationTest.java --- .../encrypt/FileEncrypterDecrypterIntegrationTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core-java/src/test/java/com/baeldung/encrypt/FileEncrypterDecrypterIntegrationTest.java b/core-java/src/test/java/com/baeldung/encrypt/FileEncrypterDecrypterIntegrationTest.java index 6cadfcde1d..b767a24b16 100644 --- a/core-java/src/test/java/com/baeldung/encrypt/FileEncrypterDecrypterIntegrationTest.java +++ b/core-java/src/test/java/com/baeldung/encrypt/FileEncrypterDecrypterIntegrationTest.java @@ -29,5 +29,4 @@ public class FileEncrypterDecrypterIntegrationTest { new File("baz.enc").delete(); // cleanup } - -} \ No newline at end of file +}