commit
						b0d889e690
					
				| @ -7,6 +7,8 @@ import akka.http.javadsl.model.HttpEntities; | ||||
| import akka.http.javadsl.model.HttpRequest; | ||||
| import akka.http.javadsl.testkit.JUnitRouteTest; | ||||
| import akka.http.javadsl.testkit.TestRoute; | ||||
| 
 | ||||
| import org.junit.Ignore; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class UserServerUnitTest extends JUnitRouteTest { | ||||
| @ -17,6 +19,7 @@ public class UserServerUnitTest extends JUnitRouteTest { | ||||
| 
 | ||||
|   TestRoute appRoute = testRoute(new UserServer(userActorRef).routes()); | ||||
| 
 | ||||
|   @Ignore | ||||
|   @Test | ||||
|   public void whenRequest_thenActorResponds() { | ||||
| 
 | ||||
|  | ||||
| @ -64,7 +64,7 @@ | ||||
|             <plugin> | ||||
|                 <groupId>org.codehaus.mojo</groupId> | ||||
|                 <artifactId>cobertura-maven-plugin</artifactId> | ||||
|                 <version>2.7</version> | ||||
|                 <version>${cobertura.plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <instrumentation> | ||||
|                         <ignores> | ||||
| @ -85,6 +85,7 @@ | ||||
|         <commons-codec.version>1.11</commons-codec.version> | ||||
|         <guava.version>27.0.1-jre</guava.version> | ||||
|         <combinatoricslib3.version>3.3.0</combinatoricslib3.version> | ||||
|         <cobertura.plugin.version>2.7</cobertura.plugin.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -98,7 +98,7 @@ public class SlopeOne { | ||||
|             for (Item j : InputData.items) { | ||||
|                 if (e.getValue().containsKey(j)) { | ||||
|                     clean.put(j, e.getValue().get(j)); | ||||
|                 } else { | ||||
|                 } else if (!clean.containsKey(j)) { | ||||
|                     clean.put(j, -1.0); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @ -46,13 +46,13 @@ | ||||
|         <dependency> | ||||
|             <groupId>org.apache.commons</groupId> | ||||
|             <artifactId>commons-lang3</artifactId> | ||||
|             <version>3.8.1</version> | ||||
|             <version>${commons.lang3.version}</version> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>pl.pragmatists</groupId> | ||||
|             <artifactId>JUnitParams</artifactId> | ||||
|             <version>1.1.0</version> | ||||
|             <version>${JUnitParams.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
| @ -91,6 +91,8 @@ | ||||
|         <retrofit.version>2.6.0</retrofit.version> | ||||
|         <jmh-core.version>1.19</jmh-core.version> | ||||
|         <jmh-generator.version>1.19</jmh-generator.version> | ||||
|         <commons.lang3.version>3.8.1</commons.lang3.version> | ||||
|         <JUnitParams.version>1.1.0</JUnitParams.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -37,7 +37,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>com.google.guava</groupId> | ||||
|             <artifactId>guava</artifactId> | ||||
|             <version>28.1-jre</version> | ||||
|             <version>${guava.version}</version> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
| @ -65,6 +65,7 @@ | ||||
|         <org.assertj.core.version>3.9.0</org.assertj.core.version> | ||||
|         <commons-codec.version>1.11</commons-codec.version> | ||||
|         <commons-math3.version>3.6.1</commons-math3.version> | ||||
|         <guava.version>28.1-jre</guava.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -0,0 +1,36 @@ | ||||
| package com.baeldung.algorithms.balancedbrackets; | ||||
| 
 | ||||
| import java.util.Deque; | ||||
| import java.util.LinkedList; | ||||
| 
 | ||||
| public class BalancedBracketsUsingDeque { | ||||
| 
 | ||||
|     public boolean isBalanced(String str) { | ||||
|         if (null == str || ((str.length() % 2) != 0)) { | ||||
|             return false; | ||||
|         } else { | ||||
|             char[] ch = str.toCharArray(); | ||||
|             for (char c : ch) { | ||||
|                 if (!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { | ||||
|                     return false; | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         Deque<Character> deque = new LinkedList<>(); | ||||
|         for (char ch : str.toCharArray()) { | ||||
|             if (ch == '{' || ch == '[' || ch == '(') { | ||||
|                 deque.addFirst(ch); | ||||
|             } else { | ||||
|                 if (!deque.isEmpty() && ((deque.peekFirst() == '{' && ch == '}') || (deque.peekFirst() == '[' && ch == ']') || (deque.peekFirst() == '(' && ch == ')'))) { | ||||
|                     deque.removeFirst(); | ||||
|                 } else { | ||||
|                     return false; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,27 @@ | ||||
| package com.baeldung.algorithms.balancedbrackets; | ||||
| 
 | ||||
| public class BalancedBracketsUsingString { | ||||
| 
 | ||||
|     public boolean isBalanced(String str) { | ||||
|         if (null == str || ((str.length() % 2) != 0)) { | ||||
|             return false; | ||||
|         } else { | ||||
|             char[] ch = str.toCharArray(); | ||||
|             for (char c : ch) { | ||||
|                 if (!(c == '{' || c == '[' || c == '(' || c == '}' || c == ']' || c == ')')) { | ||||
|                     return false; | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         while (str.contains("()") || str.contains("[]") || str.contains("{}")) { | ||||
|             str = str.replaceAll("\\(\\)", "") | ||||
|                 .replaceAll("\\[\\]", "") | ||||
|                 .replaceAll("\\{\\}", ""); | ||||
|         } | ||||
|         return (str.length() == 0); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,76 @@ | ||||
| package com.baeldung.algorithms.balancedbrackets; | ||||
| 
 | ||||
| import org.junit.Before; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| 
 | ||||
| public class BalancedBracketsUsingDequeUnitTest { | ||||
|     private BalancedBracketsUsingDeque balancedBracketsUsingDeque; | ||||
| 
 | ||||
|     @Before | ||||
|     public void setup() { | ||||
|         balancedBracketsUsingDeque = new BalancedBracketsUsingDeque(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenNullInput_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced(null); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenEmptyString_whenCheckingForBalance_shouldReturnTrue() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced(""); | ||||
|         assertThat(result).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenInvalidCharacterString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced("abc[](){}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenOddLengthString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced("{{[]()}}}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenEvenLengthString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced("{{[]()}}}}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenEvenLengthUnbalancedString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced("{[(])}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenEvenLengthBalancedString_whenCheckingForBalance_shouldReturnTrue() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced("{[()]}"); | ||||
|         assertThat(result).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenBalancedString_whenCheckingForBalance_shouldReturnTrue() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced("{{[[(())]]}}"); | ||||
|         assertThat(result).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenAnotherBalancedString_whenCheckingForBalance_shouldReturnTrue() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced("{{([])}}"); | ||||
|         assertThat(result).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenUnBalancedString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingDeque.isBalanced("{{)[](}}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,76 @@ | ||||
| package com.baeldung.algorithms.balancedbrackets; | ||||
| 
 | ||||
| import org.junit.Before; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| 
 | ||||
| public class BalancedBracketsUsingStringUnitTest { | ||||
|     private BalancedBracketsUsingString balancedBracketsUsingString; | ||||
| 
 | ||||
|     @Before | ||||
|     public void setup() { | ||||
|         balancedBracketsUsingString = new BalancedBracketsUsingString(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenNullInput_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced(null); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenEmptyString_whenCheckingForBalance_shouldReturnTrue() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced(""); | ||||
|         assertThat(result).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenInvalidCharacterString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced("abc[](){}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenOddLengthString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced("{{[]()}}}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenEvenLengthString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced("{{[]()}}}}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenEvenLengthUnbalancedString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced("{[(])}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenEvenLengthBalancedString_whenCheckingForBalance_shouldReturnTrue() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced("{[()]}"); | ||||
|         assertThat(result).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenBalancedString_whenCheckingForBalance_shouldReturnTrue() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced("{{[[(())]]}}"); | ||||
|         assertThat(result).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenAnotherBalancedString_whenCheckingForBalance_shouldReturnTrue() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced("{{([])}}"); | ||||
|         assertThat(result).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenUnBalancedString_whenCheckingForBalance_shouldReturnFalse() { | ||||
|         boolean result = balancedBracketsUsingString.isBalanced("{{)[](}}"); | ||||
|         assertThat(result).isFalse(); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										4
									
								
								algorithms-sorting-2/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								algorithms-sorting-2/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| /target/ | ||||
| .settings/ | ||||
| .classpath | ||||
| .project | ||||
							
								
								
									
										64
									
								
								algorithms-sorting-2/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								algorithms-sorting-2/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | ||||
| <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>algorithms-sorting-2</artifactId> | ||||
|     <version>0.0.1-SNAPSHOT</version> | ||||
|     <name>algorithms-sorting-2</name> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung</groupId> | ||||
|         <artifactId>parent-modules</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
|             <groupId>org.apache.commons</groupId> | ||||
|             <artifactId>commons-math3</artifactId> | ||||
|             <version>${commons-math3.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>commons-codec</groupId> | ||||
|             <artifactId>commons-codec</artifactId> | ||||
|             <version>${commons-codec.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.projectlombok</groupId> | ||||
|             <artifactId>lombok</artifactId> | ||||
|             <version>${lombok.version}</version> | ||||
|             <scope>provided</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.junit.jupiter</groupId> | ||||
|             <artifactId>junit-jupiter-api</artifactId> | ||||
|             <version>${junit-jupiter-api.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.assertj</groupId> | ||||
|             <artifactId>assertj-core</artifactId> | ||||
|             <version>${org.assertj.core.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <build> | ||||
|         <pluginManagement> | ||||
|             <plugins> | ||||
|                 <plugin> | ||||
|                     <groupId>org.codehaus.mojo</groupId> | ||||
|                     <artifactId>exec-maven-plugin</artifactId> | ||||
|                     <version>${exec-maven-plugin.version}</version> | ||||
|                 </plugin> | ||||
|             </plugins> | ||||
|         </pluginManagement> | ||||
|     </build> | ||||
| 
 | ||||
|     <properties> | ||||
|         <commons-math3.version>3.6.1</commons-math3.version> | ||||
|         <org.assertj.core.version>3.9.0</org.assertj.core.version> | ||||
|         <commons-codec.version>1.11</commons-codec.version> | ||||
|         <junit-jupiter-api.version>5.3.1</junit-jupiter-api.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -0,0 +1,66 @@ | ||||
| package com.baeldung.algorithms.quicksort; | ||||
| 
 | ||||
| import static com.baeldung.algorithms.quicksort.SortingUtils.swap; | ||||
| 
 | ||||
| public class BentleyMcIlroyPartioning { | ||||
| 
 | ||||
|     public static Partition partition(int input[], int begin, int end) { | ||||
|         int left = begin, right = end; | ||||
|         int leftEqualKeysCount = 0, rightEqualKeysCount = 0; | ||||
| 
 | ||||
|         int partitioningValue = input[end]; | ||||
| 
 | ||||
|         while (true) { | ||||
|             while (input[left] < partitioningValue) | ||||
|                 left++; | ||||
| 
 | ||||
|             while (input[right] > partitioningValue) { | ||||
|                 if (right == begin) | ||||
|                     break; | ||||
|                 right--; | ||||
|             } | ||||
| 
 | ||||
|             if (left == right && input[left] == partitioningValue) { | ||||
|                 swap(input, begin + leftEqualKeysCount, left); | ||||
|                 leftEqualKeysCount++; | ||||
|                 left++; | ||||
|             } | ||||
| 
 | ||||
|             if (left >= right) { | ||||
|                 break; | ||||
|             } | ||||
| 
 | ||||
|             swap(input, left, right); | ||||
| 
 | ||||
|             if (input[left] == partitioningValue) { | ||||
|                 swap(input, begin + leftEqualKeysCount, left); | ||||
|                 leftEqualKeysCount++; | ||||
|             } | ||||
| 
 | ||||
|             if (input[right] == partitioningValue) { | ||||
|                 swap(input, right, end - rightEqualKeysCount); | ||||
|                 rightEqualKeysCount++; | ||||
|             } | ||||
|             left++; right--; | ||||
|         } | ||||
|         right = left - 1; | ||||
|         for (int k = begin; k < begin + leftEqualKeysCount; k++, right--) { | ||||
|             if (right >= begin + leftEqualKeysCount) | ||||
|                 swap(input, k, right); | ||||
|         } | ||||
|         for (int k = end; k > end - rightEqualKeysCount; k--, left++) { | ||||
|             if (left <= end - rightEqualKeysCount) | ||||
|                 swap(input, left, k); | ||||
|         } | ||||
|         return new Partition(right + 1, left - 1); | ||||
|     } | ||||
| 
 | ||||
|     public static void quicksort(int input[], int begin, int end) { | ||||
|         if (end <= begin) | ||||
|             return; | ||||
|         Partition middlePartition = partition(input, begin, end); | ||||
|         quicksort(input, begin, middlePartition.getLeft() - 1); | ||||
|         quicksort(input, middlePartition.getRight() + 1, end); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,38 @@ | ||||
| package com.baeldung.algorithms.quicksort; | ||||
| 
 | ||||
| import static com.baeldung.algorithms.quicksort.SortingUtils.compare; | ||||
| import static com.baeldung.algorithms.quicksort.SortingUtils.swap; | ||||
| 
 | ||||
| public class DutchNationalFlagPartioning { | ||||
| 
 | ||||
|     public static Partition partition(int[] a, int begin, int end) { | ||||
|         int lt = begin, current = begin, gt = end; | ||||
|         int partitioningValue = a[begin]; | ||||
| 
 | ||||
|         while (current <= gt) { | ||||
|             int compareCurrent = compare(a[current], partitioningValue); | ||||
|             switch (compareCurrent) { | ||||
|                 case -1: | ||||
|                     swap(a, current++, lt++); | ||||
|                     break; | ||||
|                 case 0: | ||||
|                     current++; | ||||
|                     break; | ||||
|                 case 1: | ||||
|                     swap(a, current, gt--); | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|         return new Partition(lt, gt); | ||||
|     } | ||||
| 
 | ||||
|     public static void quicksort(int[] input, int begin, int end) { | ||||
|         if (end <= begin) | ||||
|             return; | ||||
| 
 | ||||
|         Partition middlePartition = partition(input, begin, end); | ||||
| 
 | ||||
|         quicksort(input, begin, middlePartition.getLeft() - 1); | ||||
|         quicksort(input, middlePartition.getRight() + 1, end); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,29 @@ | ||||
| package com.baeldung.algorithms.quicksort; | ||||
| 
 | ||||
| public class Partition { | ||||
|     private int left; | ||||
|     private int right; | ||||
| 
 | ||||
|     public Partition(int left, int right) { | ||||
|         super(); | ||||
|         this.left = left; | ||||
|         this.right = right; | ||||
|     } | ||||
| 
 | ||||
|     public int getLeft() { | ||||
|         return left; | ||||
|     } | ||||
| 
 | ||||
|     public void setLeft(int left) { | ||||
|         this.left = left; | ||||
|     } | ||||
| 
 | ||||
|     public int getRight() { | ||||
|         return right; | ||||
|     } | ||||
| 
 | ||||
|     public void setRight(int right) { | ||||
|         this.right = right; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,32 @@ | ||||
| package com.baeldung.algorithms.quicksort; | ||||
| 
 | ||||
| public class SortingUtils { | ||||
| 
 | ||||
|     public static void swap(int[] array, int position1, int position2) { | ||||
|         if (position1 != position2) { | ||||
|             int temp = array[position1]; | ||||
|             array[position1] = array[position2]; | ||||
|             array[position2] = temp; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static int compare(int num1, int num2) { | ||||
|         if (num1 > num2) | ||||
|             return 1; | ||||
|         else if (num1 < num2) | ||||
|             return -1; | ||||
|         else | ||||
|             return 0; | ||||
|     } | ||||
| 
 | ||||
|     public static void printArray(int[] array) { | ||||
|         if (array == null) { | ||||
|             return; | ||||
|         } | ||||
|         for (int e : array) { | ||||
|             System.out.print(e + " "); | ||||
|         } | ||||
|         System.out.println(); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,16 @@ | ||||
| package com.baeldung.algorithms.quicksort; | ||||
| 
 | ||||
| import org.junit.Assert; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class BentleyMcilroyPartitioningUnitTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void given_IntegerArray_whenSortedWithBentleyMcilroyPartitioning_thenGetSortedArray() { | ||||
|         int[] actual = {3, 2, 2, 2, 3, 7, 7, 3, 2, 2, 7, 3, 3}; | ||||
|         int[] expected = {2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 7, 7, 7}; | ||||
|         BentleyMcIlroyPartioning.quicksort(actual, 0, actual.length - 1); | ||||
|         Assert.assertArrayEquals(expected, actual); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,15 @@ | ||||
| package com.baeldung.algorithms.quicksort; | ||||
| 
 | ||||
| import org.junit.Assert; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class DNFThreeWayQuickSortUnitTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenIntegerArray_whenSortedWithThreeWayQuickSort_thenGetSortedArray() { | ||||
|         int[] actual = {3, 5, 5, 5, 3, 7, 7, 3, 5, 5, 7, 3, 3}; | ||||
|         int[] expected = {3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 7, 7, 7}; | ||||
|         DutchNationalFlagPartioning.quicksort(actual, 0, actual.length - 1); | ||||
|         Assert.assertArrayEquals(expected, actual); | ||||
|     } | ||||
| } | ||||
| @ -18,19 +18,19 @@ | ||||
|         <dependency> | ||||
|             <groupId>javax.ws.rs</groupId> | ||||
|             <artifactId>javax.ws.rs-api</artifactId> | ||||
|             <version>2.1</version> | ||||
|             <version>${rs-api.version}</version> | ||||
|             <scope>provided</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>javax.enterprise</groupId> | ||||
|             <artifactId>cdi-api</artifactId> | ||||
|             <version>2.0</version> | ||||
|             <version>${cdi-api.version}</version> | ||||
|             <scope>provided</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>javax.json.bind</groupId> | ||||
|             <artifactId>javax.json.bind-api</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${bind-api.version}</version> | ||||
|             <scope>provided</scope> | ||||
|         </dependency> | ||||
| 
 | ||||
| @ -80,6 +80,9 @@ | ||||
|         <liberty-maven-plugin.version>2.4.2</liberty-maven-plugin.version> | ||||
|         <failOnMissingWebXml>false</failOnMissingWebXml> | ||||
|         <openliberty-version>18.0.0.2</openliberty-version> | ||||
|         <rs-api.version>2.1</rs-api.version> | ||||
|         <cdi-api.version>2.0</cdi-api.version> | ||||
|         <bind-api.version>1.0</bind-api.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -17,11 +17,12 @@ | ||||
|         <dependency> | ||||
|             <groupId>org.apache.rocketmq</groupId> | ||||
|             <artifactId>rocketmq-spring-boot-starter</artifactId> | ||||
|             <version>2.0.4</version> | ||||
|             <version>${rocketmq.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <properties> | ||||
|         <geode.core>1.6.0</geode.core> | ||||
|         <rocketmq.version>2.0.4</rocketmq.version> | ||||
|     </properties> | ||||
| </project> | ||||
|  | ||||
| @ -81,10 +81,10 @@ of testing facilities designed for use with TestNG (http://testng.org/), so it's | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-compiler-plugin</artifactId> | ||||
|                 <version>2.3.2</version> | ||||
|                 <version>${compiler.plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <source>1.8</source> | ||||
|                     <target>1.8</target> | ||||
|                     <source>${source.version}</source> | ||||
|                     <target>${target.version}</target> | ||||
|                     <optimize>true</optimize> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
| @ -92,7 +92,7 @@ of testing facilities designed for use with TestNG (http://testng.org/), so it's | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-surefire-plugin</artifactId> | ||||
|                 <version>2.7.2</version> | ||||
|                 <version>${compiler.surefire.version}</version> | ||||
|                 <configuration> | ||||
|                     <systemPropertyVariables> | ||||
|                         <tapestry.execution-mode>Qa</tapestry.execution-mode> | ||||
| @ -104,7 +104,7 @@ of testing facilities designed for use with TestNG (http://testng.org/), so it's | ||||
|             <plugin> | ||||
|                 <groupId>org.mortbay.jetty</groupId> | ||||
|                 <artifactId>maven-jetty-plugin</artifactId> | ||||
|                 <version>6.1.16</version> | ||||
|                 <version>${compiler.jetty.version}</version> | ||||
|                 <configuration> | ||||
|                     <!-- Log to the console. --> | ||||
|                     <requestLog implementation="org.mortbay.jetty.NCSARequestLog"> | ||||
| @ -140,6 +140,11 @@ of testing facilities designed for use with TestNG (http://testng.org/), so it's | ||||
|     </repositories> | ||||
| 
 | ||||
|     <properties> | ||||
|         <compiler.jetty.version>6.1.16</compiler.jetty.version> | ||||
|         <compiler.surefire.version>2.7.2</compiler.surefire.version> | ||||
|         <compiler.plugin.version>2.3.2</compiler.plugin.version> | ||||
|         <source.version>1.8</source.version> | ||||
|         <target.version>1.8</target.version> | ||||
|         <tapestry-release-version>5.4.5</tapestry-release-version> | ||||
|         <servlet-api-release-version>2.5</servlet-api-release-version> | ||||
|         <testng-release-version>6.8.21</testng-release-version> | ||||
|  | ||||
| @ -17,6 +17,8 @@ | ||||
| 
 | ||||
| 	<properties> | ||||
| 		<java.version>1.8</java.version> | ||||
|         <spring.version>2.2.1.RELEASE</spring.version> | ||||
|         <awssdk.version>2.10.27</awssdk.version> | ||||
| 	</properties> | ||||
| 
 | ||||
| 	<dependencyManagement> | ||||
| @ -26,7 +28,7 @@ | ||||
| 				<!-- Import dependency management from Spring Boot --> | ||||
| 				<groupId>org.springframework.boot</groupId> | ||||
| 				<artifactId>spring-boot-dependencies</artifactId> | ||||
| 				<version>2.2.1.RELEASE</version> | ||||
| 				<version>${spring.version}</version> | ||||
| 				<type>pom</type> | ||||
| 				<scope>import</scope> | ||||
| 			</dependency> | ||||
| @ -34,7 +36,7 @@ | ||||
| 			<dependency> | ||||
| 				<groupId>software.amazon.awssdk</groupId> | ||||
| 				<artifactId>bom</artifactId> | ||||
| 				<version>2.10.27</version> | ||||
| 				<version>${awssdk.version}</version> | ||||
| 				<type>pom</type> | ||||
| 				<scope>import</scope> | ||||
| 			</dependency> | ||||
|  | ||||
| @ -124,7 +124,7 @@ | ||||
| 
 | ||||
|             <plugin> | ||||
|                 <artifactId>maven-assembly-plugin</artifactId> | ||||
|                 <version>3.1.0</version> | ||||
|                 <version>${assembly.plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <finalName>${project.build.finalName}</finalName> | ||||
|                     <appendAssemblyId>false</appendAssemblyId> | ||||
| @ -161,6 +161,7 @@ | ||||
|         <assertj-core.version>3.11.1</assertj-core.version> | ||||
|         <maven-failsafe-plugin.version>3.0.0-M3</maven-failsafe-plugin.version> | ||||
|         <process-exec-maven-plugin.version>0.7</process-exec-maven-plugin.version> | ||||
|         <assembly.plugin.version>3.1.0</assembly.plugin.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
							
								
								
									
										21
									
								
								cloud-foundry-uaa/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								cloud-foundry-uaa/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>cloud-foundry-uaa</artifactId> | ||||
|     <version>0.0.1-SNAPSHOT</version> | ||||
|     <name>cloud-foundry-uaa</name> | ||||
|     <packaging>pom</packaging> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung</groupId> | ||||
|         <artifactId>parent-modules</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
|     <modules> | ||||
|         <module>cf-uaa-oauth2-client</module> | ||||
|         <module>cf-uaa-oauth2-resource-server</module> | ||||
|     </modules> | ||||
| 
 | ||||
| </project> | ||||
| @ -62,12 +62,12 @@ | ||||
|             <plugin> | ||||
|                 <groupId>org.codehaus.groovy</groupId> | ||||
|                 <artifactId>groovy-eclipse-compiler</artifactId> | ||||
|                 <version>3.3.0-01</version> | ||||
|                 <version>${groovy.compiler.version}</version> | ||||
|                 <extensions>true</extensions> | ||||
|             </plugin> | ||||
|             <plugin> | ||||
|                 <artifactId>maven-compiler-plugin</artifactId> | ||||
|                 <version>3.8.0</version> | ||||
|                 <version>${compiler.plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <compilerId>groovy-eclipse-compiler</compilerId> | ||||
|                     <source>${java.version}</source> | ||||
| @ -113,7 +113,7 @@ | ||||
|             </plugin> | ||||
|             <plugin> | ||||
|                 <artifactId>maven-surefire-plugin</artifactId> | ||||
|                 <version>2.20.1</version> | ||||
|                 <version>${surefire.plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <useFile>false</useFile> | ||||
|                     <includes> | ||||
| @ -126,7 +126,7 @@ | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-assembly-plugin</artifactId> | ||||
|                 <version>3.1.0</version> | ||||
|                 <version>${assembly.plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <!-- get all project dependencies --> | ||||
|                     <descriptorRefs> | ||||
| @ -183,6 +183,10 @@ | ||||
|         <groovy-wslite.version>1.1.3</groovy-wslite.version> | ||||
|         <logback.version>1.2.3</logback.version> | ||||
|         <groovy.version>2.5.7</groovy.version> | ||||
|         <assembly.plugin.version>3.1.0</assembly.plugin.version> | ||||
|         <surefire.plugin.version>2.20.1</surefire.plugin.version> | ||||
|         <compiler.plugin.version>3.8.0</compiler.plugin.version> | ||||
|         <groovy.compiler.version>3.3.0-01</groovy.compiler.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -28,16 +28,17 @@ class CategoryUnitTest extends GroovyTestCase { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     void test_whenUsingTimeCategory_thenOperationOnNumber() { | ||||
|         SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy") | ||||
|         use (TimeCategory) { | ||||
|             assert sdf.format(5.days.from.now) == sdf.format(new Date() + 5.days) | ||||
| 
 | ||||
|             sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss") | ||||
|             assert sdf.format(10.minutes.from.now) == sdf.format(new Date() + 10.minutes) | ||||
|             assert sdf.format(2.hours.ago) == sdf.format(new Date() - 2.hours) | ||||
|         } | ||||
|     } | ||||
| //	http://team.baeldung.com/browse/BAEL-20687 | ||||
| //    void test_whenUsingTimeCategory_thenOperationOnNumber() { | ||||
| //        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy") | ||||
| //        use (TimeCategory) { | ||||
| //            assert sdf.format(5.days.from.now) == sdf.format(new Date() + 5.days) | ||||
| // | ||||
| //            sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss") | ||||
| //            assert sdf.format(10.minutes.from.now) == sdf.format(new Date() + 10.minutes) | ||||
| //            assert sdf.format(2.hours.ago) == sdf.format(new Date() - 2.hours) | ||||
| //        } | ||||
| //    } | ||||
| 
 | ||||
|     void test_whenUsingDOMCategory_thenOperationOnXML() { | ||||
| 
 | ||||
|  | ||||
| @ -9,7 +9,7 @@ import wslite.soap.SOAPMessageBuilder | ||||
| import wslite.http.auth.HTTPBasicAuthorization | ||||
| import org.junit.Test | ||||
| 
 | ||||
| class WebserviceUnitTest extends GroovyTestCase { | ||||
| class WebserviceManualTest extends GroovyTestCase { | ||||
| 
 | ||||
|     JsonSlurper jsonSlurper = new JsonSlurper() | ||||
| 
 | ||||
|  | ||||
| @ -99,7 +99,7 @@ | ||||
|             </plugin> | ||||
|             <plugin> | ||||
|                 <artifactId>maven-surefire-plugin</artifactId> | ||||
|                 <version>2.20.1</version> | ||||
|                 <version>${surefire.plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <useFile>false</useFile> | ||||
|                     <includes> | ||||
| @ -126,6 +126,7 @@ | ||||
|         <hsqldb.version>2.4.0</hsqldb.version> | ||||
|         <spock-core.version>1.1-groovy-2.4</spock-core.version> | ||||
|         <gmavenplus-plugin.version>1.6</gmavenplus-plugin.version> | ||||
|         <surefire.plugin.version>2.20.1</surefire.plugin.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| package com.baeldung.file | ||||
| 
 | ||||
| import spock.lang.Specification | ||||
| import spock.lang.Ignore | ||||
| 
 | ||||
| class ReadFileUnitTest extends Specification { | ||||
| 
 | ||||
| @ -32,6 +33,7 @@ class ReadFileUnitTest extends Specification { | ||||
|             assert lines.size(), 3 | ||||
|     } | ||||
|      | ||||
|     @Ignore | ||||
|     def 'Should return file content in string using ReadFile.readFileString given filePath' () { | ||||
|         given: | ||||
|             def filePath = "src/main/resources/fileContent.txt" | ||||
|  | ||||
| @ -42,12 +42,12 @@ | ||||
|         <dependency> | ||||
|             <groupId>org.eclipse.collections</groupId> | ||||
|             <artifactId>eclipse-collections</artifactId> | ||||
|             <version>10.0.0</version> | ||||
|             <version>${eclipse.collections.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.eclipse.collections</groupId> | ||||
|             <artifactId>eclipse-collections-api</artifactId> | ||||
|             <version>10.0.0</version> | ||||
|             <version>${eclipse.collections.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
| @ -108,6 +108,7 @@ | ||||
|         <assertj.version>3.11.1</assertj.version> | ||||
|         <uberjar.name>benchmarks</uberjar.name> | ||||
|         <jmh.version>1.22</jmh.version> | ||||
|         <eclipse.collections.version>10.0.0</eclipse.collections.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -41,7 +41,7 @@ | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-surefire-plugin</artifactId> | ||||
|                 <version>3.0.0-M3</version> | ||||
|                 <version>${surefire.plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <argLine>--enable-preview</argLine> | ||||
|                 </configuration> | ||||
| @ -53,6 +53,7 @@ | ||||
|         <maven.compiler.source.version>13</maven.compiler.source.version> | ||||
|         <maven.compiler.target.version>13</maven.compiler.target.version> | ||||
|         <assertj.version>3.6.1</assertj.version> | ||||
|         <surefire.plugin.version>3.0.0-M3</surefire.plugin.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -0,0 +1,27 @@ | ||||
| package com.baeldung.newfeatures; | ||||
| 
 | ||||
| import static org.junit.Assert.assertEquals; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class SwitchExpressionsWithYieldUnitTest { | ||||
| 
 | ||||
|     @Test | ||||
|     @SuppressWarnings("preview") | ||||
|     public void whenSwitchingOnOperationSquareMe_thenWillReturnSquare() { | ||||
|         var me = 4; | ||||
|         var operation = "squareMe"; | ||||
|         var result = switch (operation) { | ||||
|         case "doubleMe" -> { | ||||
|             yield me * 2; | ||||
|         } | ||||
|         case "squareMe" -> { | ||||
|             yield me * me; | ||||
|         } | ||||
|         default -> me; | ||||
|         }; | ||||
| 
 | ||||
|         assertEquals(16, result); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,39 @@ | ||||
| package com.baeldung.newfeatures; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class TextBlocksUnitTest { | ||||
| 
 | ||||
|     private static final String JSON_STRING = "{\r\n" + "\"name\" : \"Baeldung\",\r\n" + "\"website\" : \"https://www.%s.com/\"\r\n" + "}"; | ||||
| 
 | ||||
|     @SuppressWarnings("preview") | ||||
|     private static final String TEXT_BLOCK_JSON = """ | ||||
|             { | ||||
|             "name" : "Baeldung", | ||||
|             "website" : "https://www.%s.com/" | ||||
|             } | ||||
|         """; | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenTextBlocks_thenStringOperationsWork() { | ||||
| 
 | ||||
|         assertThat(TEXT_BLOCK_JSON.contains("Baeldung")).isTrue(); | ||||
|         assertThat(TEXT_BLOCK_JSON.indexOf("www")).isGreaterThan(0); | ||||
|         assertThat(TEXT_BLOCK_JSON.length()).isGreaterThan(0); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     @SuppressWarnings("removal") | ||||
|     @Test | ||||
|     public void whenTextBlocks_thenFormattedWorksAsFormat() { | ||||
|         assertThat(TEXT_BLOCK_JSON.formatted("baeldung") | ||||
|             .contains("www.baeldung.com")).isTrue(); | ||||
| 
 | ||||
|         assertThat(String.format(JSON_STRING, "baeldung") | ||||
|             .contains("www.baeldung.com")).isTrue(); | ||||
| 
 | ||||
|     } | ||||
|     | ||||
| } | ||||
| @ -36,7 +36,7 @@ | ||||
| 			<plugin> | ||||
| 				<groupId>org.apache.maven.plugins</groupId> | ||||
| 				<artifactId>maven-surefire-plugin</artifactId> | ||||
| 				<version>3.0.0-M3</version> | ||||
| 				<version>${surefire.plugin.version}</version> | ||||
| 				<configuration> | ||||
| 					<argLine>--enable-preview</argLine> | ||||
| 				</configuration> | ||||
| @ -47,6 +47,7 @@ | ||||
| 	<properties> | ||||
| 		<maven.compiler.source.version>14</maven.compiler.source.version> | ||||
| 		<maven.compiler.target.version>14</maven.compiler.target.version> | ||||
|         <surefire.plugin.version>3.0.0-M3</surefire.plugin.version> | ||||
| 	</properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -51,7 +51,7 @@ | ||||
| 			<plugin> | ||||
| 				<groupId>org.apache.maven.plugins</groupId> | ||||
| 				<artifactId>maven-shade-plugin</artifactId> | ||||
| 				<version>3.2.0</version> | ||||
| 				<version>${shade.plugin.version}</version> | ||||
| 				<executions> | ||||
| 					<execution> | ||||
| 						<phase>package</phase> | ||||
| @ -79,6 +79,7 @@ | ||||
|         <commons-lang3.version>3.9</commons-lang3.version> | ||||
|         <!-- testing --> | ||||
|         <assertj-core.version>3.10.0</assertj-core.version> | ||||
|         <shade.plugin.version>3.2.0</shade.plugin.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -183,8 +183,8 @@ | ||||
|                 <artifactId>maven-javadoc-plugin</artifactId> | ||||
|                 <version>${maven-javadoc-plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <source>1.8</source> | ||||
|                     <target>1.8</target> | ||||
|                     <source>${source.version}</source> | ||||
|                     <target>${target.version}</target> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
| @ -373,6 +373,8 @@ | ||||
|         <maven-shade-plugin.version>3.1.1</maven-shade-plugin.version> | ||||
|         <spring-boot-maven-plugin.version>2.0.3.RELEASE</spring-boot-maven-plugin.version> | ||||
|         <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version> | ||||
|         <source.version>1.8</source.version> | ||||
|         <target.version>1.8</target.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -23,6 +23,37 @@ | ||||
|             <version>${assertj.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|          | ||||
|         <dependency> | ||||
|             <groupId>com.jcabi</groupId> | ||||
|             <artifactId>jcabi-aspects</artifactId> | ||||
|             <version>${jcabi-aspects.version}</version> | ||||
|         </dependency> | ||||
|          | ||||
|         <dependency> | ||||
|             <groupId>org.aspectj</groupId> | ||||
|             <artifactId>aspectjrt</artifactId> | ||||
|             <version>${aspectjrt.version}</version> | ||||
|             <scope>runtime</scope> | ||||
|         </dependency> | ||||
|          | ||||
|         <dependency> | ||||
|             <groupId>com.google.guava</groupId> | ||||
|             <artifactId>guava</artifactId> | ||||
|             <version>${guava.version}</version> | ||||
|         </dependency> | ||||
|          | ||||
|         <dependency> | ||||
|             <groupId>org.cactoos</groupId> | ||||
|             <artifactId>cactoos</artifactId> | ||||
|             <version>${cactoos.version}</version> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>com.ea.async</groupId> | ||||
|             <artifactId>ea-async</artifactId> | ||||
|             <version>${ea-async.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <build> | ||||
| @ -36,6 +67,30 @@ | ||||
|                     <target>${maven.compiler.target}</target> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|             <plugin> | ||||
|                 <groupId>com.jcabi</groupId> | ||||
|                 <artifactId>jcabi-maven-plugin</artifactId> | ||||
|                 <version>${jcabi-maven-plugin.version}</version> | ||||
|                 <executions> | ||||
|                     <execution> | ||||
|                         <goals> | ||||
|                             <goal>ajc</goal> | ||||
|                         </goals> | ||||
|                     </execution> | ||||
|                 </executions> | ||||
|                 <dependencies> | ||||
|                     <dependency> | ||||
|                         <groupId>org.aspectj</groupId> | ||||
|                         <artifactId>aspectjtools</artifactId> | ||||
|                         <version>${aspectjtools.version}</version> | ||||
|                     </dependency> | ||||
|                     <dependency> | ||||
|                         <groupId>org.aspectj</groupId> | ||||
|                         <artifactId>aspectjweaver</artifactId> | ||||
|                         <version>${aspectjweaver.version}</version> | ||||
|                     </dependency> | ||||
|                 </dependencies> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
|         <resources> | ||||
|             <resource> | ||||
| @ -49,6 +104,14 @@ | ||||
|         <assertj.version>3.14.0</assertj.version> | ||||
|         <maven.compiler.source>1.8</maven.compiler.source> | ||||
|         <maven.compiler.target>1.8</maven.compiler.target> | ||||
|         <jcabi-aspects.version>0.22.6</jcabi-aspects.version> | ||||
|         <aspectjrt.version>1.9.5</aspectjrt.version> | ||||
|         <guava.version>28.2-jre</guava.version> | ||||
|         <cactoos.version>0.43</cactoos.version> | ||||
|         <ea-async.version>1.2.3</ea-async.version> | ||||
|         <jcabi-maven-plugin.version>0.14.1</jcabi-maven-plugin.version> | ||||
|         <aspectjtools.version>1.9.1</aspectjtools.version> | ||||
|         <aspectjweaver.version>1.9.1</aspectjweaver.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -0,0 +1,57 @@ | ||||
| package com.baeldung.async; | ||||
| 
 | ||||
| import static com.ea.async.Async.await; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
| import java.util.concurrent.ExecutionException; | ||||
| 
 | ||||
| import com.ea.async.Async; | ||||
| 
 | ||||
| public class EAAsyncExample { | ||||
| 
 | ||||
|     static { | ||||
|         Async.init(); | ||||
|     } | ||||
| 
 | ||||
|     public static void main(String[] args) throws Exception { | ||||
|         usingCompletableFuture(); | ||||
|         usingAsyncAwait(); | ||||
|     } | ||||
| 
 | ||||
|     public static void usingCompletableFuture() throws InterruptedException, ExecutionException, Exception { | ||||
|         CompletableFuture<Void> completableFuture = hello() | ||||
|             .thenComposeAsync(hello -> mergeWorld(hello)) | ||||
|             .thenAcceptAsync(helloWorld -> print(helloWorld)) | ||||
|             .exceptionally( throwable -> { | ||||
|                 System.out.println(throwable.getCause());  | ||||
|                 return null; | ||||
|             }); | ||||
|         completableFuture.get(); | ||||
|     } | ||||
| 
 | ||||
|     public static CompletableFuture<String> hello() { | ||||
|         CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> "Hello"); | ||||
|         return completableFuture; | ||||
|     } | ||||
| 
 | ||||
|     public static CompletableFuture<String> mergeWorld(String s) { | ||||
|         CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> { | ||||
|             return s + " World!"; | ||||
|         }); | ||||
|         return completableFuture; | ||||
|     } | ||||
| 
 | ||||
|     public static void print(String str) { | ||||
|         CompletableFuture.runAsync(() -> System.out.println(str)); | ||||
|     } | ||||
| 
 | ||||
|     private static void usingAsyncAwait() { | ||||
|         try { | ||||
|             String hello = await(hello()); | ||||
|             String helloWorld = await(mergeWorld(hello)); | ||||
|             await(CompletableFuture.runAsync(() -> print(helloWorld))); | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,183 @@ | ||||
| package com.baeldung.async; | ||||
| 
 | ||||
| import static com.ea.async.Async.await; | ||||
| 
 | ||||
| import java.util.concurrent.Callable; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
| import java.util.concurrent.ExecutionException; | ||||
| import java.util.concurrent.ExecutorService; | ||||
| import java.util.concurrent.Executors; | ||||
| import java.util.concurrent.Future; | ||||
| 
 | ||||
| import com.google.common.util.concurrent.AsyncCallable; | ||||
| import com.google.common.util.concurrent.Callables; | ||||
| import com.google.common.util.concurrent.Futures; | ||||
| import com.google.common.util.concurrent.ListenableFuture; | ||||
| import com.google.common.util.concurrent.ListeningExecutorService; | ||||
| import com.google.common.util.concurrent.MoreExecutors; | ||||
| import com.jcabi.aspects.Async; | ||||
| import com.jcabi.aspects.Loggable; | ||||
| 
 | ||||
| public class JavaAsync { | ||||
| 
 | ||||
|     static { | ||||
|         com.ea.async.Async.init(); | ||||
|     } | ||||
| 
 | ||||
|     private static final ExecutorService threadpool = Executors.newCachedThreadPool(); | ||||
| 
 | ||||
|     public static void main (String[] args) throws InterruptedException, ExecutionException { | ||||
|         int number = 20; | ||||
| 
 | ||||
|         //Thread Example | ||||
|         factorialUsingThread(number).start(); | ||||
| 
 | ||||
|         //FutureTask Example | ||||
|         Future<Long> futureTask = factorialUsingFutureTask(number); | ||||
|         System.out.println("Factorial of " + number + " is: " + futureTask.get()); | ||||
| 
 | ||||
|         // CompletableFuture Example | ||||
|         Future<Long> completableFuture = factorialUsingCompletableFuture(number); | ||||
|         System.out.println("Factorial of " + number + " is: " + completableFuture.get()); | ||||
| 
 | ||||
|         // EA Async example | ||||
|         System.out.println("Factorial of " + number + " is: " + factorialUsingEAAsync(number)); | ||||
| 
 | ||||
|         // cactoos async example | ||||
|         Future<Long> asyncFuture = factorialUsingCactoos(number); | ||||
|         System.out.println("Factorial of " + number + " is: " + asyncFuture.get()); | ||||
| 
 | ||||
|         // Guava example | ||||
|         ListenableFuture<Long> guavaFuture = factorialUsingGuavaServiceSubmit(number); | ||||
|         System.out.println("Factorial of " + number + " is: " + guavaFuture.get()); | ||||
| 
 | ||||
|         ListenableFuture<Long> guavaFutures = factorialUsingGuavaFutures(number); | ||||
|         System.out.println("Factorial of " + number + " is: " + guavaFutures.get()); | ||||
| 
 | ||||
|         // @async jcabi-aspect example | ||||
|         Future<Long> aspectFuture = factorialUsingJcabiAspect(number); | ||||
|         System.out.println("Factorial of " + number + " is: " + aspectFuture.get()); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Finds factorial of a number | ||||
|      * @param number | ||||
|      * @return | ||||
|      */ | ||||
|     public static long factorial(int number) { | ||||
|         long result = 1;  | ||||
|         for(int i=number;i>0;i--) { | ||||
|             result *= i;  | ||||
|         }  | ||||
|         return result;  | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Finds factorial of a number using Thread | ||||
|      * @param number | ||||
|      * @return | ||||
|      */ | ||||
|     @Loggable | ||||
|     public static Thread factorialUsingThread(int number) { | ||||
|         Thread newThread = new Thread(() -> { | ||||
|             System.out.println("Factorial of " + number + " is: " + factorial(number)); | ||||
|         }); | ||||
| 
 | ||||
|         return newThread; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Finds factorial of a number using FutureTask | ||||
|      * @param number | ||||
|      * @return | ||||
|      */ | ||||
|     @Loggable | ||||
|     public static Future<Long> factorialUsingFutureTask(int number) { | ||||
|         Future<Long> futureTask = threadpool.submit(() -> factorial(number));  | ||||
| 
 | ||||
|         while (!futureTask.isDone()) {  | ||||
|             System.out.println("FutureTask is not finished yet...");  | ||||
|         }  | ||||
| 
 | ||||
|         return futureTask; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Finds factorial of a number using CompletableFuture | ||||
|      * @param number | ||||
|      * @return | ||||
|      */ | ||||
|     @Loggable | ||||
|     public static Future<Long> factorialUsingCompletableFuture(int number) { | ||||
|         CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number)); | ||||
|         return completableFuture; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Finds factorial of a number using EA Async | ||||
|      * @param number | ||||
|      * @return | ||||
|      */ | ||||
|     @Loggable | ||||
|     public static long factorialUsingEAAsync(int number) { | ||||
|         CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number)); | ||||
|         long result = await(completableFuture); | ||||
|         return result; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Finds factorial of a number using Async of Cactoos | ||||
|      * @param number | ||||
|      * @return | ||||
|      * @throws InterruptedException | ||||
|      * @throws ExecutionException | ||||
|      */ | ||||
|     @Loggable | ||||
|     public static Future<Long> factorialUsingCactoos(int number) throws InterruptedException, ExecutionException { | ||||
|         org.cactoos.func.Async<Integer, Long> asyncFunction = new org.cactoos.func.Async<Integer, Long>(input -> factorial(input)); | ||||
|         Future<Long> asyncFuture = asyncFunction.apply(number); | ||||
|         return asyncFuture; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Finds factorial of a number using Guava's ListeningExecutorService.submit() | ||||
|      * @param number | ||||
|      * @return | ||||
|      */ | ||||
|     @Loggable | ||||
|     public static ListenableFuture<Long> factorialUsingGuavaServiceSubmit(int number) { | ||||
|         ListeningExecutorService service = MoreExecutors.listeningDecorator(threadpool); | ||||
|         ListenableFuture<Long> factorialFuture = (ListenableFuture<Long>) service.submit(()-> factorial(number)); | ||||
|         return factorialFuture; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Finds factorial of a number using Guava's Futures.submitAsync() | ||||
|      * @param number | ||||
|      * @return | ||||
|      */ | ||||
|     @Loggable | ||||
|     public static ListenableFuture<Long> factorialUsingGuavaFutures(int number) { | ||||
|         ListeningExecutorService service = MoreExecutors.listeningDecorator(threadpool); | ||||
|         AsyncCallable<Long> asyncCallable = Callables.asAsyncCallable(new Callable<Long>() { | ||||
|             public Long call() { | ||||
|                 return factorial(number); | ||||
|             } | ||||
|         }, service); | ||||
|         return Futures.submitAsync(asyncCallable, service); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Finds factorial of a number using @Async of jcabi-aspects | ||||
|      * @param number | ||||
|      * @return | ||||
|      */ | ||||
|     @Async | ||||
|     @Loggable | ||||
|     public static Future<Long> factorialUsingJcabiAspect(int number) { | ||||
|         Future<Long> factorialFuture = CompletableFuture.supplyAsync(() -> factorial(number)); | ||||
|         return factorialFuture; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,85 @@ | ||||
| package com.baeldung.workstealing; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.concurrent.ForkJoinTask; | ||||
| import java.util.concurrent.RecursiveAction; | ||||
| import java.util.concurrent.atomic.AtomicInteger; | ||||
| 
 | ||||
| public class PrimeNumbers extends RecursiveAction { | ||||
| 
 | ||||
|     private int lowerBound; | ||||
|     private int upperBound; | ||||
|     private int granularity; | ||||
|     static final List<Integer> GRANULARITIES | ||||
|       = Arrays.asList(1, 10, 100, 1000, 10000); | ||||
|     private AtomicInteger noOfPrimeNumbers; | ||||
| 
 | ||||
|     PrimeNumbers(int lowerBound, int upperBound, int granularity, AtomicInteger noOfPrimeNumbers) { | ||||
|         this.lowerBound = lowerBound; | ||||
|         this.upperBound = upperBound; | ||||
|         this.granularity = granularity; | ||||
|         this.noOfPrimeNumbers = noOfPrimeNumbers; | ||||
|     } | ||||
| 
 | ||||
|     PrimeNumbers(int upperBound) { | ||||
|         this(1, upperBound, 100, new AtomicInteger(0)); | ||||
|     } | ||||
| 
 | ||||
|     private PrimeNumbers(int lowerBound, int upperBound, AtomicInteger noOfPrimeNumbers) { | ||||
|         this(lowerBound, upperBound, 100, noOfPrimeNumbers); | ||||
|     } | ||||
| 
 | ||||
|     private List<PrimeNumbers> subTasks() { | ||||
|         List<PrimeNumbers> subTasks = new ArrayList<>(); | ||||
| 
 | ||||
|         for (int i = 1; i <= this.upperBound / granularity; i++) { | ||||
|             int upper = i * granularity; | ||||
|             int lower = (upper - granularity) + 1; | ||||
|             subTasks.add(new PrimeNumbers(lower, upper, noOfPrimeNumbers)); | ||||
|         } | ||||
|         return subTasks; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected void compute() { | ||||
|         if (((upperBound + 1) - lowerBound) > granularity) { | ||||
|             ForkJoinTask.invokeAll(subTasks()); | ||||
|         } else { | ||||
|             findPrimeNumbers(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     void findPrimeNumbers() { | ||||
|         for (int num = lowerBound; num <= upperBound; num++) { | ||||
|             if (isPrime(num)) { | ||||
|                 noOfPrimeNumbers.getAndIncrement(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private boolean isPrime(int number) { | ||||
|         if (number == 2) { | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         if (number == 1 || number % 2 == 0) { | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         int noOfNaturalNumbers = 0; | ||||
| 
 | ||||
|         for (int i = 1; i <= number; i++) { | ||||
|             if (number % i == 0) { | ||||
|                 noOfNaturalNumbers++; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return noOfNaturalNumbers == 2; | ||||
|     } | ||||
| 
 | ||||
|     public int noOfPrimeNumbers() { | ||||
|         return noOfPrimeNumbers.intValue(); | ||||
|     } | ||||
| } | ||||
| @ -1,6 +1,7 @@ | ||||
| package com.baeldung.rejection; | ||||
| 
 | ||||
| import org.junit.After; | ||||
| import org.junit.Ignore; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| @ -28,24 +29,26 @@ public class SaturationPolicyUnitTest { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Ignore | ||||
|     @Test | ||||
|     public void givenAbortPolicy_WhenSaturated_ThenShouldThrowRejectedExecutionException() { | ||||
|         executor = new ThreadPoolExecutor(1, 1, 0, MILLISECONDS, new SynchronousQueue<>(), new AbortPolicy()); | ||||
|         executor.execute(() -> waitFor(100)); | ||||
|         executor.execute(() -> waitFor(250)); | ||||
| 
 | ||||
|         assertThatThrownBy(() -> executor.execute(() -> System.out.println("Will be rejected"))).isInstanceOf(RejectedExecutionException.class); | ||||
|     } | ||||
| 
 | ||||
|     @Ignore | ||||
|     @Test | ||||
|     public void givenCallerRunsPolicy_WhenSaturated_ThenTheCallerThreadRunsTheTask() { | ||||
|         executor = new ThreadPoolExecutor(1, 1, 0, MILLISECONDS, new SynchronousQueue<>(), new CallerRunsPolicy()); | ||||
|         executor.execute(() -> waitFor(100)); | ||||
|         executor.execute(() -> waitFor(250)); | ||||
| 
 | ||||
|         long startTime = System.nanoTime(); | ||||
|         executor.execute(() -> waitFor(100)); | ||||
|         double blockedDuration = (System.nanoTime() - startTime) / 1_000_000.0; | ||||
|         long startTime = System.currentTimeMillis(); | ||||
|         executor.execute(() -> waitFor(500)); | ||||
|         long blockedDuration = System.currentTimeMillis() - startTime; | ||||
| 
 | ||||
|         assertThat(blockedDuration).isGreaterThanOrEqualTo(100); | ||||
|         assertThat(blockedDuration).isGreaterThanOrEqualTo(500); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|  | ||||
| @ -0,0 +1,101 @@ | ||||
| package com.baeldung.workstealing; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| import org.openjdk.jmh.annotations.*; | ||||
| import org.openjdk.jmh.runner.Runner; | ||||
| import org.openjdk.jmh.runner.RunnerException; | ||||
| import org.openjdk.jmh.runner.options.Options; | ||||
| import org.openjdk.jmh.runner.options.OptionsBuilder; | ||||
| 
 | ||||
| import java.util.concurrent.Executors; | ||||
| import java.util.concurrent.ForkJoinPool; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| import java.util.concurrent.atomic.AtomicInteger; | ||||
| import java.util.logging.Logger; | ||||
| 
 | ||||
| import static org.junit.Assert.fail; | ||||
| 
 | ||||
| public class PrimeNumbersUnitTest { | ||||
| 
 | ||||
|     private static Logger logger = Logger.getAnonymousLogger(); | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenPrimesCalculated_whenUsingPoolsAndOneThread_thenOneThreadSlowest() { | ||||
|         Options opt = new OptionsBuilder() | ||||
|           .include(Benchmarker.class.getSimpleName()) | ||||
|           .forks(1) | ||||
|           .build(); | ||||
| 
 | ||||
|         try { | ||||
|             new Runner(opt).run(); | ||||
|         } catch (RunnerException e) { | ||||
|             fail(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenNewWorkStealingPool_whenGettingPrimes_thenStealCountChanges() { | ||||
|         StringBuilder info = new StringBuilder(); | ||||
| 
 | ||||
|         for (int granularity : PrimeNumbers.GRANULARITIES) { | ||||
|             int parallelism = ForkJoinPool.getCommonPoolParallelism(); | ||||
|             ForkJoinPool pool = | ||||
|               (ForkJoinPool) Executors.newWorkStealingPool(parallelism); | ||||
| 
 | ||||
|             stealCountInfo(info, granularity, pool); | ||||
|         } | ||||
|         logger.info("\nExecutors.newWorkStealingPool ->" + info.toString()); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenCommonPool_whenGettingPrimes_thenStealCountChangesSlowly() { | ||||
|         StringBuilder info = new StringBuilder(); | ||||
| 
 | ||||
|         for (int granularity : PrimeNumbers.GRANULARITIES) { | ||||
|             ForkJoinPool pool = ForkJoinPool.commonPool(); | ||||
|             stealCountInfo(info, granularity, pool); | ||||
|         } | ||||
|         logger.info("\nForkJoinPool.commonPool ->" + info.toString()); | ||||
|     } | ||||
| 
 | ||||
|     private void stealCountInfo(StringBuilder info, int granularity, ForkJoinPool forkJoinPool) { | ||||
|         PrimeNumbers primes = new PrimeNumbers(1, 10000, granularity, new AtomicInteger(0)); | ||||
|         forkJoinPool.invoke(primes); | ||||
|         forkJoinPool.shutdown(); | ||||
| 
 | ||||
|         long steals = forkJoinPool.getStealCount(); | ||||
|         String output = "\nGranularity: [" + granularity + "], Steals: [" + steals + "]"; | ||||
|         info.append(output); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @BenchmarkMode(Mode.AverageTime) | ||||
|     @OutputTimeUnit(TimeUnit.MILLISECONDS) | ||||
|     @State(Scope.Benchmark) | ||||
|     @Fork(value = 2, warmups = 1, jvmArgs = {"-Xms2G", "-Xmx2G"}) | ||||
|     public static class Benchmarker { | ||||
| 
 | ||||
|         @Benchmark | ||||
|         public void singleThread() { | ||||
|             PrimeNumbers primes = new PrimeNumbers(10000); | ||||
|             primes.findPrimeNumbers(); // get prime numbers using a single thread | ||||
|         } | ||||
| 
 | ||||
|         @Benchmark | ||||
|         public void commonPoolBenchmark() { | ||||
|             PrimeNumbers primes = new PrimeNumbers(10000); | ||||
|             ForkJoinPool pool = ForkJoinPool.commonPool(); | ||||
|             pool.invoke(primes); | ||||
|             pool.shutdown(); | ||||
|         } | ||||
| 
 | ||||
|         @Benchmark | ||||
|         public void newWorkStealingPoolBenchmark() { | ||||
|             PrimeNumbers primes = new PrimeNumbers(10000); | ||||
|             int parallelism = ForkJoinPool.getCommonPoolParallelism(); | ||||
|             ForkJoinPool stealer = (ForkJoinPool) Executors.newWorkStealingPool(parallelism); | ||||
|             stealer.invoke(primes); | ||||
|             stealer.shutdown(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -31,11 +31,18 @@ | ||||
|             <artifactId>hirondelle-date4j</artifactId> | ||||
|             <version>${hirondelle-date4j.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.assertj</groupId> | ||||
|             <artifactId>assertj-core</artifactId> | ||||
|             <version>${assertj.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <properties> | ||||
|         <joda-time.version>2.10</joda-time.version> | ||||
|         <hirondelle-date4j.version>1.5.1</hirondelle-date4j.version> | ||||
|         <assertj.version>3.14.0</assertj.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -0,0 +1,19 @@ | ||||
| package com.baeldung.timer; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.TimerTask; | ||||
| 
 | ||||
| public class DatabaseMigrationTask extends TimerTask { | ||||
|     private List<String> oldDatabase; | ||||
|     private List<String> newDatabase; | ||||
| 
 | ||||
|     public DatabaseMigrationTask(List<String> oldDatabase, List<String> newDatabase) { | ||||
|         this.oldDatabase = oldDatabase; | ||||
|         this.newDatabase = newDatabase; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void run() { | ||||
|         newDatabase.addAll(oldDatabase); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,14 @@ | ||||
| package com.baeldung.timer; | ||||
| 
 | ||||
| import java.time.Instant; | ||||
| import java.time.LocalDateTime; | ||||
| import java.time.ZoneId; | ||||
| import java.util.TimerTask; | ||||
| 
 | ||||
| public class NewsletterTask extends TimerTask { | ||||
|     @Override | ||||
|     public void run() { | ||||
|         System.out.println("Email sent at: " | ||||
|           + LocalDateTime.ofInstant(Instant.ofEpochMilli(scheduledExecutionTime()), ZoneId.systemDefault())); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,44 @@ | ||||
| package com.baeldung.timer; | ||||
| 
 | ||||
| import org.junit.jupiter.api.Test; | ||||
| 
 | ||||
| import java.time.LocalDateTime; | ||||
| import java.time.ZoneId; | ||||
| import java.util.*; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| 
 | ||||
| class DatabaseMigrationTaskUnitTest { | ||||
|     @Test | ||||
|     void givenDatabaseMigrationTask_whenTimerScheduledForNowPlusTwoSeconds_thenDataMigratedAfterTwoSeconds() throws Exception { | ||||
|         List<String> oldDatabase = Arrays.asList("Harrison Ford", "Carrie Fisher", "Mark Hamill"); | ||||
|         List<String> newDatabase = new ArrayList<>(); | ||||
| 
 | ||||
|         LocalDateTime twoSecondsLater = LocalDateTime.now().plusSeconds(2); | ||||
|         Date twoSecondsLaterAsDate = Date.from(twoSecondsLater.atZone(ZoneId.systemDefault()).toInstant()); | ||||
| 
 | ||||
|         new Timer().schedule(new DatabaseMigrationTask(oldDatabase, newDatabase), twoSecondsLaterAsDate); | ||||
| 
 | ||||
|         while (LocalDateTime.now().isBefore(twoSecondsLater)) { | ||||
|             assertThat(newDatabase).isEmpty(); | ||||
|             Thread.sleep(500); | ||||
|         } | ||||
|         assertThat(newDatabase).containsExactlyElementsOf(oldDatabase); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void givenDatabaseMigrationTask_whenTimerScheduledInTwoSeconds_thenDataMigratedAfterTwoSeconds() throws Exception { | ||||
|         List<String> oldDatabase = Arrays.asList("Harrison Ford", "Carrie Fisher", "Mark Hamill"); | ||||
|         List<String> newDatabase = new ArrayList<>(); | ||||
| 
 | ||||
|         new Timer().schedule(new DatabaseMigrationTask(oldDatabase, newDatabase), 2000); | ||||
| 
 | ||||
|         LocalDateTime twoSecondsLater = LocalDateTime.now().plusSeconds(2); | ||||
| 
 | ||||
|         while (LocalDateTime.now().isBefore(twoSecondsLater)) { | ||||
|             assertThat(newDatabase).isEmpty(); | ||||
|             Thread.sleep(500); | ||||
|         } | ||||
|         assertThat(newDatabase).containsExactlyElementsOf(oldDatabase); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,33 @@ | ||||
| package com.baeldung.timer; | ||||
| 
 | ||||
| import org.junit.jupiter.api.AfterEach; | ||||
| import org.junit.jupiter.api.Test; | ||||
| 
 | ||||
| import java.util.Timer; | ||||
| 
 | ||||
| class NewsletterTaskUnitTest { | ||||
|     private final Timer timer = new Timer(); | ||||
| 
 | ||||
|     @AfterEach | ||||
|     void afterEach() { | ||||
|         timer.cancel(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void givenNewsletterTask_whenTimerScheduledEachSecondFixedDelay_thenNewsletterSentEachSecond() throws Exception { | ||||
|         timer.schedule(new NewsletterTask(), 0, 1000); | ||||
| 
 | ||||
|         for (int i = 0; i < 3; i++) { | ||||
|             Thread.sleep(1000); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     void givenNewsletterTask_whenTimerScheduledEachSecondFixedRate_thenNewsletterSentEachSecond() throws Exception { | ||||
|         timer.scheduleAtFixedRate(new NewsletterTask(), 0, 1000); | ||||
| 
 | ||||
|         for (int i = 0; i < 3; i++) { | ||||
|             Thread.sleep(1000); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										72
									
								
								core-java-modules/core-java-datetime-java8-2/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								core-java-modules/core-java-datetime-java8-2/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>core-java-datetime-java8</artifactId> | ||||
|     <version>${project.parent.version}</version> | ||||
|     <name>core-java-datetime-java8</name> | ||||
|     <packaging>jar</packaging> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung</groupId> | ||||
|         <artifactId>parent-java</artifactId> | ||||
|         <version>0.0.1-SNAPSHOT</version> | ||||
|         <relativePath>../../parent-java</relativePath> | ||||
|     </parent> | ||||
| 
 | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
|             <groupId>org.apache.commons</groupId> | ||||
|             <artifactId>commons-lang3</artifactId> | ||||
|             <version>${commons-lang3.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>joda-time</groupId> | ||||
|             <artifactId>joda-time</artifactId> | ||||
|             <version>${joda-time.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.assertj</groupId> | ||||
|             <artifactId>assertj-core</artifactId> | ||||
|             <version>${assertj.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>log4j</groupId> | ||||
|             <artifactId>log4j</artifactId> | ||||
|             <version>${log4j.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <build> | ||||
|         <finalName>core-java-datetime-java8</finalName> | ||||
|         <resources> | ||||
|             <resource> | ||||
|                 <directory>src/main/resources</directory> | ||||
|                 <filtering>true</filtering> | ||||
|             </resource> | ||||
|         </resources> | ||||
| 
 | ||||
|         <plugins> | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-compiler-plugin</artifactId> | ||||
|                 <version>${maven-compiler-plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <source>${maven.compiler.source}</source> | ||||
|                     <target>${maven.compiler.target}</target> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
|     </build> | ||||
| 
 | ||||
|     <properties> | ||||
|         <maven.compiler.source>1.9</maven.compiler.source> | ||||
|         <maven.compiler.target>1.9</maven.compiler.target> | ||||
|         <joda-time.version>2.10</joda-time.version> | ||||
|         <!-- testing --> | ||||
|         <assertj.version>3.6.1</assertj.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -0,0 +1,31 @@ | ||||
| package com.baeldung.localdate; | ||||
| 
 | ||||
| import java.time.LocalDate; | ||||
| import java.time.Month; | ||||
| import java.time.format.DateTimeFormatter; | ||||
| 
 | ||||
| public class LocalDateExample { | ||||
|     public LocalDate getCustomDateOne(int year, int month, int dayOfMonth) { | ||||
|         return LocalDate.of(year, month, dayOfMonth); | ||||
|     } | ||||
| 
 | ||||
|     public LocalDate getCustomDateTwo(int year, Month month, int dayOfMonth) { | ||||
|         return LocalDate.of(year, month, dayOfMonth); | ||||
|     } | ||||
| 
 | ||||
|     public LocalDate getDateFromEpochDay(long epochDay) { | ||||
|         return LocalDate.ofEpochDay(epochDay); | ||||
|     } | ||||
| 
 | ||||
|     public LocalDate getDateFromYearAndDayOfYear(int year, int dayOfYear) { | ||||
|         return LocalDate.ofYearDay(year, dayOfYear); | ||||
|     } | ||||
| 
 | ||||
|     public LocalDate getDateFromString(String date) { | ||||
|         return LocalDate.parse(date); | ||||
|     } | ||||
| 
 | ||||
|     public LocalDate getDateFromStringAndFormatter(String date, String pattern) { | ||||
|         return LocalDate.parse(date, DateTimeFormatter.ofPattern(pattern)); | ||||
|     } | ||||
| } | ||||
| @ -1,4 +1,4 @@ | ||||
| package com.baeldung.datebasics; | ||||
| package com.baeldung.localdate; | ||||
| 
 | ||||
| import static org.junit.Assert.assertEquals; | ||||
| 
 | ||||
| @ -6,23 +6,8 @@ import java.time.Month; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class CreateDateUnitTest { | ||||
|     private CreateDate date = new CreateDate(); | ||||
|      | ||||
|     @Test | ||||
|     public void whenUsingNowMethod_thenLocalDate() { | ||||
|         assertEquals("2020-01-08", date.getTodaysDate()); | ||||
|     } | ||||
|      | ||||
|     @Test | ||||
|     public void whenUsingClock_thenLocalDate() { | ||||
|         assertEquals("2020-01-08", date.getTodaysDateFromClock()); | ||||
|     } | ||||
|      | ||||
|     @Test | ||||
|     public void givenValues_whenUsingZone_thenLocalDate() { | ||||
|         assertEquals("2020-01-08", date.getTodaysDateFromZone("Asia/Kolkata")); | ||||
|     } | ||||
| public class LocalDateExampleUnitTest { | ||||
|     private LocalDateExample date = new LocalDateExample(); | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenValues_whenUsingOfMethod_thenLocalDate() { | ||||
| @ -1,45 +0,0 @@ | ||||
| package com.baeldung.datebasics; | ||||
| 
 | ||||
| import java.time.Clock; | ||||
| import java.time.LocalDate; | ||||
| import java.time.Month; | ||||
| import java.time.ZoneId; | ||||
| import java.time.format.DateTimeFormatter; | ||||
| 
 | ||||
| public class CreateDate { | ||||
| 	public LocalDate getTodaysDate() { | ||||
| 		return LocalDate.now(); | ||||
| 	} | ||||
| 
 | ||||
| 	public LocalDate getTodaysDateFromClock() { | ||||
| 		return LocalDate.now(Clock.systemDefaultZone()); | ||||
| 	} | ||||
| 
 | ||||
| 	public LocalDate getTodaysDateFromZone(String zone) { | ||||
| 		return LocalDate.now(ZoneId.of(zone)); | ||||
| 	} | ||||
| 
 | ||||
| 	public LocalDate getCustomDateOne(int year, int month, int dayOfMonth) { | ||||
| 		return LocalDate.of(year, month, dayOfMonth); | ||||
| 	} | ||||
| 
 | ||||
| 	public LocalDate getCustomDateTwo(int year, Month month, int dayOfMonth) { | ||||
| 		return LocalDate.of(year, month, dayOfMonth); | ||||
| 	} | ||||
| 
 | ||||
| 	public LocalDate getDateFromEpochDay(long epochDay) { | ||||
| 		return LocalDate.ofEpochDay(epochDay); | ||||
| 	} | ||||
| 
 | ||||
| 	public LocalDate getDateFromYearAndDayOfYear(int year, int dayOfYear) { | ||||
| 		return LocalDate.ofYearDay(year, dayOfYear); | ||||
| 	} | ||||
| 
 | ||||
| 	public LocalDate getDateFromString(String date) { | ||||
| 		return LocalDate.parse(date); | ||||
| 	} | ||||
| 
 | ||||
| 	public LocalDate getDateFromStringAndFormatter(String date, String pattern) { | ||||
| 		return LocalDate.parse(date, DateTimeFormatter.ofPattern(pattern)); | ||||
| 	} | ||||
| } | ||||
| @ -14,11 +14,23 @@ | ||||
| 		<relativePath>../../parent-java</relativePath> | ||||
| 	</parent> | ||||
| 	 | ||||
| 	<dependencies> | ||||
| 		<!-- test scoped --> | ||||
| 		<dependency> | ||||
|             <groupId>org.assertj</groupId> | ||||
|             <artifactId>assertj-core</artifactId> | ||||
|             <version>${assertj-core.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
| 	</dependencies> | ||||
| 
 | ||||
| 	<description> </description> | ||||
| 	<url>http://maven.apache.org</url> | ||||
| 
 | ||||
| 	<properties> | ||||
| 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||
| 		<!-- testing --> | ||||
| 		<assertj-core.version>3.10.0</assertj-core.version> | ||||
| 	</properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -0,0 +1,28 @@ | ||||
| package com.baeldung.exceptions; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.net.HttpURLConnection; | ||||
| import java.net.URL; | ||||
| import java.net.UnknownHostException; | ||||
| 
 | ||||
| public class UnknownHostExceptionHandling { | ||||
| 
 | ||||
|     public static int getResponseCode(String hostname) throws IOException { | ||||
|         URL url = new URL(hostname.trim()); | ||||
|         HttpURLConnection con = (HttpURLConnection) url.openConnection(); | ||||
|         int resCode = -1; | ||||
|         try { | ||||
|             resCode = con.getResponseCode(); | ||||
|         } catch (UnknownHostException e){ | ||||
|             con.disconnect(); | ||||
|         } | ||||
|         return resCode; | ||||
|     } | ||||
|      | ||||
|     public static int getResponseCodeUnhandled(String hostname) throws IOException { | ||||
|         URL url = new URL(hostname.trim()); | ||||
|         HttpURLConnection con = (HttpURLConnection) url.openConnection(); | ||||
|         int resCode = con.getResponseCode(); | ||||
|         return resCode; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,15 @@ | ||||
| package com.baeldung.exceptions; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.net.UnknownHostException; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class UnknownHostExceptionHandlingUnitTest { | ||||
| 
 | ||||
|     @Test(expected = UnknownHostException.class) | ||||
|     public void givenUnknownHost_whenResolve_thenUnknownHostException() throws IOException { | ||||
|         UnknownHostExceptionHandling.getResponseCodeUnhandled("http://locaihost"); | ||||
|     } | ||||
|      | ||||
| } | ||||
| @ -1,5 +1,6 @@ | ||||
| package com.baeldung.file; | ||||
| 
 | ||||
| import org.junit.Ignore; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import java.io.*; | ||||
| @ -73,6 +74,7 @@ public class FileClassUnitTest { | ||||
|         assertFalse(writable); | ||||
|     } | ||||
| 
 | ||||
|     @Ignore | ||||
|     @Test | ||||
|     public void givenWriteOnlyFile_whenCreateNewFile_thenCantReadFile() { | ||||
|         File parentDir = makeDir("writeDir"); | ||||
|  | ||||
| @ -207,8 +207,8 @@ | ||||
|                 <artifactId>maven-javadoc-plugin</artifactId> | ||||
|                 <version>${maven-javadoc-plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <source>1.8</source> | ||||
|                     <target>1.8</target> | ||||
|                     <source>${source.version}</source> | ||||
|                     <target>${target.version}</target> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
| @ -397,6 +397,8 @@ | ||||
|         <maven-shade-plugin.version>3.1.1</maven-shade-plugin.version> | ||||
|         <spring-boot-maven-plugin.version>2.0.3.RELEASE</spring-boot-maven-plugin.version> | ||||
|         <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version> | ||||
|         <source.version>1.8</source.version> | ||||
|         <target.version>1.8</target.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -9,44 +9,49 @@ | ||||
|     <name>core-java-jndi</name> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung</groupId> | ||||
|         <artifactId>parent-modules</artifactId> | ||||
|         <groupId>com.baeldung.core-java-modules</groupId> | ||||
|         <artifactId>core-java-modules</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|         <relativePath>../../</relativePath> | ||||
|     </parent> | ||||
| 
 | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
|             <groupId>org.junit.jupiter</groupId> | ||||
|             <artifactId>junit-jupiter</artifactId> | ||||
|             <version>${jupiter.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.junit.jupiter</groupId> | ||||
|             <artifactId>junit-jupiter-api</artifactId> | ||||
|             <version>5.5.1</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.springframework</groupId> | ||||
|             <artifactId>spring-core</artifactId> | ||||
|             <version>5.0.9.RELEASE</version> | ||||
|             <version>${spring.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.springframework</groupId> | ||||
|             <artifactId>spring-context</artifactId> | ||||
|             <version>5.0.9.RELEASE</version> | ||||
|             <version>${spring.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.springframework</groupId> | ||||
|             <artifactId>spring-jdbc</artifactId> | ||||
|             <version>5.0.9.RELEASE</version> | ||||
|             <version>${spring.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.springframework</groupId> | ||||
|             <artifactId>spring-test</artifactId> | ||||
|             <version>5.0.9.RELEASE</version> | ||||
|             <version>${spring.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.h2database</groupId> | ||||
|             <artifactId>h2</artifactId> | ||||
|             <version>1.4.199</version> | ||||
|             <version>${h2.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
| @ -56,11 +61,19 @@ | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-compiler-plugin</artifactId> | ||||
|                 <configuration> | ||||
|                     <source>1.8</source> | ||||
|                     <target>1.8</target> | ||||
|                     <source>${source.version}</source> | ||||
|                     <target>${target.version}</target> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
|     </build> | ||||
|      | ||||
|     <properties> | ||||
|         <spring.version>5.0.9.RELEASE</spring.version> | ||||
|         <h2.version>1.4.199</h2.version> | ||||
|         <jupiter.version>5.5.1</jupiter.version> | ||||
|         <source.version>1.8</source.version> | ||||
|         <target.version>1.8</target.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -1,5 +1,12 @@ | ||||
| package com.baeldung.jndi.exceptions; | ||||
| 
 | ||||
| import static org.junit.jupiter.api.Assertions.assertThrows; | ||||
| 
 | ||||
| import javax.naming.InitialContext; | ||||
| import javax.naming.NameNotFoundException; | ||||
| import javax.naming.NoInitialContextException; | ||||
| 
 | ||||
| import org.junit.jupiter.api.Disabled; | ||||
| import org.junit.jupiter.api.MethodOrderer; | ||||
| import org.junit.jupiter.api.Order; | ||||
| import org.junit.jupiter.api.Test; | ||||
| @ -7,15 +14,10 @@ import org.junit.jupiter.api.TestMethodOrder; | ||||
| import org.springframework.jndi.JndiTemplate; | ||||
| import org.springframework.mock.jndi.SimpleNamingContextBuilder; | ||||
| 
 | ||||
| import javax.naming.InitialContext; | ||||
| import javax.naming.NameNotFoundException; | ||||
| import javax.naming.NoInitialContextException; | ||||
| 
 | ||||
| import static org.junit.jupiter.api.Assertions.assertThrows; | ||||
| 
 | ||||
| @TestMethodOrder(MethodOrderer.OrderAnnotation.class) | ||||
| public class JndiExceptionsUnitTest { | ||||
| 
 | ||||
|     @Disabled | ||||
|     @Test | ||||
|     @Order(1) | ||||
|     void givenNoContext_whenLookupObject_thenThrowNoInitialContext() { | ||||
|  | ||||
| @ -16,7 +16,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>com.baeldung.servicemodule</groupId> | ||||
|             <artifactId>servicemodule</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${servicemodule.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
| @ -29,4 +29,8 @@ | ||||
|         </plugins> | ||||
|     </build> | ||||
| 
 | ||||
|     <properties> | ||||
|         <servicemodule.version>1.0</servicemodule.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -19,10 +19,10 @@ | ||||
|                 <plugin> | ||||
|                     <groupId>org.apache.maven.plugins</groupId> | ||||
|                     <artifactId>maven-compiler-plugin</artifactId> | ||||
|                     <version>3.8.0</version> | ||||
|                     <version>${compiler.plugin.version}</version> | ||||
|                     <configuration> | ||||
|                         <source>11</source> | ||||
|                         <target>11</target> | ||||
|                         <source>${source.version}</source> | ||||
|                         <target>${target.version}</target> | ||||
|                     </configuration> | ||||
|                 </plugin> | ||||
|             </plugins> | ||||
| @ -31,6 +31,9 @@ | ||||
| 
 | ||||
|     <properties> | ||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||
|         <compiler.plugin.version>3.8.0</compiler.plugin.version> | ||||
|         <source.version>11</source.version> | ||||
|         <target.version>11</target.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -2,7 +2,6 @@ | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <groupId>com.baeldung.servicemodule</groupId> | ||||
|     <artifactId>servicemodule</artifactId> | ||||
|     <packaging>jar</packaging> | ||||
| 
 | ||||
|  | ||||
| @ -8,8 +8,8 @@ | ||||
|     <version>1.0</version> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>decoupling-pattern2</groupId> | ||||
|         <artifactId>com.baeldung.decoupling-pattern2</artifactId> | ||||
|         <groupId>com.baeldung.decoupling-pattern2</groupId> | ||||
|         <artifactId>decoupling-pattern2</artifactId> | ||||
|         <version>1.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
| @ -17,12 +17,12 @@ | ||||
|         <dependency> | ||||
|             <groupId>com.baeldung.servicemodule</groupId> | ||||
|             <artifactId>servicemodule</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${servicemodule.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.baeldung.providermodule</groupId> | ||||
|             <artifactId>providermodule</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${providermodule.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
| @ -35,4 +35,9 @@ | ||||
|         </plugins> | ||||
|     </build> | ||||
| 	 | ||||
|     <properties> | ||||
|         <servicemodule.version>1.0</servicemodule.version> | ||||
|         <providermodule.version>1.0</providermodule.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -20,14 +20,20 @@ | ||||
|                 <plugin> | ||||
|                     <groupId>org.apache.maven.plugins</groupId> | ||||
|                     <artifactId>maven-compiler-plugin</artifactId> | ||||
|                     <version>3.8.0</version> | ||||
|                     <version>${compiler.plugin.version}</version> | ||||
|                     <configuration> | ||||
|                         <source>11</source> | ||||
|                         <target>11</target> | ||||
|                         <source>${source.version}</source> | ||||
|                         <target>${target.version}</target> | ||||
|                     </configuration> | ||||
|                 </plugin> | ||||
|             </plugins> | ||||
|         </pluginManagement> | ||||
|     </build> | ||||
| 	 | ||||
|     <properties> | ||||
|         <compiler.plugin.version>3.8.0</compiler.plugin.version> | ||||
|         <source.version>11</source.version> | ||||
|         <target.version>11</target.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -8,8 +8,8 @@ | ||||
|     <version>1.0</version> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>decoupling-pattern2</groupId> | ||||
|         <artifactId>com.baeldung.decoupling-pattern2</artifactId> | ||||
|         <groupId>com.baeldung.decoupling-pattern2</groupId> | ||||
|         <artifactId>decoupling-pattern2</artifactId> | ||||
|         <version>1.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
| @ -17,7 +17,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>com.baeldung.servicemodule</groupId> | ||||
|             <artifactId>servicemodule</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${servicemodule.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
| @ -30,4 +30,9 @@ | ||||
|         </plugins> | ||||
|     </build> | ||||
| 
 | ||||
|     <properties> | ||||
|         <servicemodule.version>1.0</servicemodule.version> | ||||
| 	</properties> | ||||
| 
 | ||||
| 
 | ||||
| </project> | ||||
| @ -3,13 +3,12 @@ | ||||
|          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <groupId>com.baeldung.servicemodule</groupId> | ||||
|     <artifactId>servicemodule</artifactId> | ||||
|     <version>1.0</version> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>decoupling-pattern2</groupId> | ||||
|         <artifactId>>com.baeldung.decoupling-pattern2</artifactId> | ||||
|         <groupId>com.baeldung.decoupling-pattern2</groupId> | ||||
|         <artifactId>decoupling-pattern2</artifactId> | ||||
|         <version>1.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										21
									
								
								core-java-modules/core-java-jpms/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								core-java-modules/core-java-jpms/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>core-java-jpms</artifactId> | ||||
|     <version>0.0.1-SNAPSHOT</version> | ||||
|     <name>core-java-jpms</name> | ||||
|     <packaging>pom</packaging> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung.core-java-modules</groupId> | ||||
|         <artifactId>core-java-modules</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
|     <modules> | ||||
|         <module>decoupling-pattern1</module> | ||||
|         <module>decoupling-pattern2</module> | ||||
|     </modules> | ||||
| 
 | ||||
| </project> | ||||
| @ -2,7 +2,7 @@ package com.baeldung.exitvshalt; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class JvmExitDemoUnitTest { | ||||
| public class JvmExitDemoManualTest { | ||||
| 
 | ||||
|     JvmExitAndHaltDemo jvmExitAndHaltDemo = new JvmExitAndHaltDemo(); | ||||
| 
 | ||||
| @ -2,7 +2,7 @@ package com.baeldung.exitvshalt; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class JvmHaltDemoUnitTest { | ||||
| public class JvmHaltDemoManualTest { | ||||
| 
 | ||||
|     JvmExitAndHaltDemo jvmExitAndHaltDemo = new JvmExitAndHaltDemo(); | ||||
| 
 | ||||
| @ -18,7 +18,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>commons-beanutils</groupId> | ||||
|             <artifactId>commons-beanutils</artifactId> | ||||
|             <version>1.9.4</version> | ||||
|             <version>${commons.beanutils.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.openjdk.jmh</groupId> | ||||
| @ -57,6 +57,7 @@ | ||||
|         <jmh-core.version>1.19</jmh-core.version> | ||||
|         <jmh-generator.version>1.19</jmh-generator.version> | ||||
|         <assertj.version>3.12.2</assertj.version> | ||||
|         <commons.beanutils.version>1.9.4</commons.beanutils.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| package com.baeldung.optional; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.Optional; | ||||
| import java.util.stream.Collectors; | ||||
| 
 | ||||
| public class Person { | ||||
|     private String name; | ||||
| @ -21,7 +23,7 @@ public class Person { | ||||
|     } | ||||
| 
 | ||||
|     public Optional<Integer> getAge() { | ||||
|         return Optional.ofNullable(age); | ||||
|         return Optional.of(age); | ||||
|     } | ||||
| 
 | ||||
|     public void setAge(int age) { | ||||
| @ -36,4 +38,37 @@ public class Person { | ||||
|         return Optional.ofNullable(password); | ||||
|     } | ||||
| 
 | ||||
|     public static List<Person> search(List<Person> people, String name, Optional<Integer> age) { | ||||
|         // Null checks for people and name | ||||
|         return people.stream() | ||||
|                 .filter(p -> p.getName().equals(name)) | ||||
|                 .filter(p -> p.getAge().get() >= age.orElse(0)) | ||||
|                 .collect(Collectors.toList()); | ||||
|     } | ||||
| 
 | ||||
|     public static List<Person> search(List<Person> people, String name, Integer age) { | ||||
|         // Null checks for people and name | ||||
|         final Integer ageFilter = age != null ? age : 0; | ||||
| 
 | ||||
|         return people.stream() | ||||
|                 .filter(p -> p.getName().equals(name)) | ||||
|                 .filter(p -> p.getAge().get() >= ageFilter) | ||||
|                 .collect(Collectors.toList()); | ||||
|     } | ||||
| 
 | ||||
|     public static List<Person> search(List<Person> people, String name) { | ||||
|         return doSearch(people, name, 0); | ||||
|     } | ||||
| 
 | ||||
|     public static List<Person> search(List<Person> people, String name, int age) { | ||||
|         return doSearch(people, name, age); | ||||
|     } | ||||
| 
 | ||||
|     private static List<Person> doSearch(List<Person> people, String name, int age) { | ||||
|         // Null checks for people and name | ||||
|         return people.stream() | ||||
|                 .filter(p -> p.getName().equals(name)) | ||||
|                 .filter(p -> p.getAge().get().intValue() >= age) | ||||
|                 .collect(Collectors.toList()); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -37,8 +37,8 @@ | ||||
|                 <artifactId>maven-compiler-plugin</artifactId> | ||||
|                 <version>${maven-compiler-plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <source>1.8</source> | ||||
|                     <target>1.8</target> | ||||
|                     <source>${source.version}</source> | ||||
|                     <target>${target.version}</target> | ||||
|                     <compilerArgument>-parameters</compilerArgument> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
| @ -48,5 +48,7 @@ | ||||
|     <properties> | ||||
|         <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> | ||||
|         <assertj-core.version>3.10.0</assertj-core.version> | ||||
|         <source.version>1.8</source.version> | ||||
|         <target.version>1.8</target.version> | ||||
|     </properties> | ||||
| </project> | ||||
| @ -0,0 +1,7 @@ | ||||
| package com.baeldung.reflection.exception.invocationtarget; | ||||
| 
 | ||||
| public class InvocationTargetExample { | ||||
|     public int divideByZeroExample() { | ||||
|         return 1 / 0; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,23 @@ | ||||
| package com.baeldung.reflection.exception.invocationtarget; | ||||
| 
 | ||||
| import static org.junit.jupiter.api.Assertions.assertEquals; | ||||
| import static org.junit.jupiter.api.Assertions.assertThrows; | ||||
| 
 | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
| import java.lang.reflect.Method; | ||||
| 
 | ||||
| import org.junit.jupiter.api.Test; | ||||
| 
 | ||||
| public class InvocationTargetUnitTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenCallingMethodThrowsException_thenAssertCauseOfInvocationTargetException() throws Exception { | ||||
| 
 | ||||
|         InvocationTargetExample targetExample = new InvocationTargetExample(); | ||||
|         Method method = InvocationTargetExample.class.getMethod("divideByZeroExample"); | ||||
|          | ||||
|         Exception exception = assertThrows(InvocationTargetException.class, () -> method.invoke(targetExample)); | ||||
|          | ||||
|         assertEquals(ArithmeticException.class, exception.getCause().getClass()); | ||||
|     } | ||||
| } | ||||
| @ -25,7 +25,7 @@ | ||||
| 		<dependency> | ||||
| 			<groupId>com.google.guava</groupId> | ||||
| 			<artifactId>guava</artifactId> | ||||
| 			<version>28.1-jre</version> | ||||
| 			<version>${guava.version}</version> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<dependency> | ||||
| @ -62,7 +62,7 @@ | ||||
| 	<properties> | ||||
| 		<commons-lang3.version>3.8.1</commons-lang3.version> | ||||
| 		<assertj.version>3.6.1</assertj.version> | ||||
| 		<guava.version>27.0.1-jre</guava.version> | ||||
| 		<guava.version>28.1-jre</guava.version> | ||||
| 		<junit-jupiter-api.version>5.3.1</junit-jupiter-api.version> | ||||
| 	</properties> | ||||
| 
 | ||||
|  | ||||
| @ -0,0 +1,63 @@ | ||||
| package com.baeldung.regex.matcher; | ||||
| 
 | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertFalse; | ||||
| import static org.junit.Assert.assertTrue; | ||||
| 
 | ||||
| import java.util.regex.Matcher; | ||||
| import java.util.regex.Pattern; | ||||
| 
 | ||||
| import org.junit.jupiter.api.Test; | ||||
| 
 | ||||
| public class MatcherUnitTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenFindFourDigitWorks_thenCorrect() { | ||||
|         Pattern stringPattern = Pattern.compile("\\d\\d\\d\\d"); | ||||
|         Matcher m = stringPattern.matcher("goodbye 2019 and welcome 2020"); | ||||
| 
 | ||||
|         assertTrue(m.find()); | ||||
|         assertEquals(8, m.start()); | ||||
|         assertEquals("2019", m.group()); | ||||
|         assertEquals(12, m.end()); | ||||
| 
 | ||||
|         assertTrue(m.find()); | ||||
|         assertEquals(25, m.start()); | ||||
|         assertEquals("2020", m.group()); | ||||
|         assertEquals(29, m.end()); | ||||
| 
 | ||||
|         assertFalse(m.find()); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenStartIndex_whenFindFourDigitWorks_thenCorrect() { | ||||
|         Pattern stringPattern = Pattern.compile("\\d\\d\\d\\d"); | ||||
|         Matcher m = stringPattern.matcher("goodbye 2019 and welcome 2020"); | ||||
| 
 | ||||
|         assertTrue(m.find(20)); | ||||
|         assertEquals(25, m.start()); | ||||
|         assertEquals("2020", m.group()); | ||||
|         assertEquals(29, m.end()); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenMatchFourDigitWorks_thenFail() { | ||||
|         Pattern stringPattern = Pattern.compile("\\d\\d\\d\\d"); | ||||
|         Matcher m = stringPattern.matcher("goodbye 2019 and welcome 2020"); | ||||
|         assertFalse(m.matches()); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenMatchFourDigitWorks_thenCorrect() { | ||||
|         Pattern stringPattern = Pattern.compile("\\d\\d\\d\\d"); | ||||
|         Matcher m = stringPattern.matcher("2019"); | ||||
| 
 | ||||
|         assertTrue(m.matches()); | ||||
|         assertEquals(0, m.start()); | ||||
|         assertEquals("2019", m.group()); | ||||
|         assertEquals(4, m.end()); | ||||
| 
 | ||||
|         assertTrue(m.matches());// matches will always return the same return | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -207,8 +207,8 @@ | ||||
|                 <artifactId>maven-javadoc-plugin</artifactId> | ||||
|                 <version>${maven-javadoc-plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <source>1.8</source> | ||||
|                     <target>1.8</target> | ||||
|                     <source>${source.version}</source> | ||||
|                     <target>${target.version}</target> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
| @ -397,6 +397,8 @@ | ||||
|         <maven-shade-plugin.version>3.1.1</maven-shade-plugin.version> | ||||
|         <spring-boot-maven-plugin.version>2.0.3.RELEASE</spring-boot-maven-plugin.version> | ||||
|         <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version> | ||||
|         <source.version>1.8</source.version> | ||||
|         <target.version>1.8</target.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -17,17 +17,17 @@ | ||||
|         <dependency> | ||||
|             <groupId>com.baeldung.entitymodule</groupId> | ||||
|             <artifactId>entitymodule</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${entitymodule.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.baeldung.daomodule</groupId> | ||||
|             <artifactId>daomodule</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${daomodule.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.baeldung.userdaomodule</groupId> | ||||
|             <artifactId>userdaomodule</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${userdaomodule.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
| @ -43,6 +43,9 @@ | ||||
|     <properties> | ||||
|         <maven.compiler.source>9</maven.compiler.source> | ||||
|         <maven.compiler.target>9</maven.compiler.target> | ||||
|         <entitymodule.version>1.0</entitymodule.version> | ||||
|         <daomodule.version>1.0</daomodule.version> | ||||
|         <userdaomodule.version>1.0</userdaomodule.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -45,10 +45,10 @@ | ||||
|                 <plugin> | ||||
|                     <groupId>org.apache.maven.plugins</groupId> | ||||
|                     <artifactId>maven-compiler-plugin</artifactId> | ||||
|                     <version>3.8.0</version> | ||||
|                     <version>${compiler.plugin.version}</version> | ||||
|                     <configuration> | ||||
|                         <source>1.9</source> | ||||
|                         <target>1.9</target> | ||||
|                         <source>${source.version}</source> | ||||
|                         <target>${target.version}</target> | ||||
|                     </configuration> | ||||
|                 </plugin> | ||||
|             </plugins> | ||||
| @ -56,6 +56,9 @@ | ||||
|     </build> | ||||
| 
 | ||||
|     <properties> | ||||
|         <compiler.plugin.version>3.8.0</compiler.plugin.version> | ||||
|         <source.version>1.9</source.version> | ||||
|         <target.version>1.9</target.version> | ||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||
|         <assertj-core.version>3.12.2</assertj-core.version> | ||||
|     </properties> | ||||
|  | ||||
| @ -17,12 +17,12 @@ | ||||
|         <dependency> | ||||
|             <groupId>com.baeldung.entitymodule</groupId> | ||||
|             <artifactId>entitymodule</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${entitymodule.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.baeldung.daomodule</groupId> | ||||
|             <artifactId>daomodule</artifactId> | ||||
|             <version>1.0</version> | ||||
|             <version>${daomodule.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
| @ -38,6 +38,8 @@ | ||||
|     <properties> | ||||
|         <maven.compiler.source>9</maven.compiler.source> | ||||
|         <maven.compiler.target>9</maven.compiler.target> | ||||
|         <entitymodule.version>1.0</entitymodule.version> | ||||
|         <daomodule.version>1.0</daomodule.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -14,11 +14,110 @@ | ||||
|     </parent> | ||||
| 
 | ||||
|     <modules> | ||||
|         <module>pre-jpms</module> | ||||
|         <module>core-java-optional</module> | ||||
|         <module>core-java-lang-operators</module> | ||||
|         <module>core-java-networking-2</module> | ||||
|         <module>core-java</module> | ||||
|         <!-- <module>core-java-10</module> --> <!-- We haven't upgraded to java 10. Fixing in BAEL-10841 --> | ||||
|         <!-- <module>core-java-11</module> --> <!-- We haven't upgraded to java 11. Fixing in BAEL-10841 --> | ||||
|         <!-- <module>core-java-12</module> --> <!-- We haven't upgraded to java 12. Fixing in BAEL-10841 --> | ||||
|         <!-- <module>core-java-13</module> --> <!-- We haven't upgraded to java 12. Fixing in BAEL-10841 --> | ||||
|         <module>core-java-8</module> | ||||
|         <module>core-java-8-2</module> | ||||
| 
 | ||||
|         <!-- <module>core-java-9</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 --> | ||||
|         <!-- <module>core-java-9-improvements</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 --> | ||||
|         <!-- <module>core-java-9-jigsaw</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 --> | ||||
|         <!-- <module>core-java-9-new-features</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 --> | ||||
|         <!-- <module>core-java-9-streams</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 --> | ||||
| 
 | ||||
|         <module>core-java-annotations</module> | ||||
|         <module>core-java-arrays</module> | ||||
|         <module>core-java-arrays-2</module> | ||||
| 
 | ||||
|         <module>core-java-collections</module> | ||||
|         <module>core-java-collections-2</module> | ||||
|         <module>core-java-collections-3</module> | ||||
|         <module>core-java-collections-array-list</module> | ||||
|         <module>core-java-collections-list</module> | ||||
|         <module>core-java-collections-list-2</module> | ||||
|         <module>core-java-collections-list-3</module> | ||||
|         <module>core-java-collections-set</module> | ||||
| 
 | ||||
|         <module>core-java-concurrency-2</module> | ||||
|         <module>core-java-concurrency-advanced</module> | ||||
|         <module>core-java-concurrency-advanced-2</module> | ||||
|         <module>core-java-concurrency-advanced-3</module> | ||||
|         <module>core-java-concurrency-basic</module> | ||||
|         <module>core-java-concurrency-basic-2</module> | ||||
|         <module>core-java-concurrency-collections</module> | ||||
| 
 | ||||
|         <!-- <module>core-java-date-operations-1</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 --> | ||||
|         <module>core-java-date-operations-2</module> | ||||
|         <!-- We haven't upgraded to java 9.--> | ||||
|         <!-- | ||||
|         <module>core-java-datetime-computations</module> | ||||
|         <module>core-java-datetime-conversion</module> | ||||
|         <module>core-java-datetime-java8</module> | ||||
|         <module>core-java-datetime-string</module> | ||||
|         --> | ||||
| 
 | ||||
|         <module>core-java-exceptions</module> | ||||
|         <module>core-java-exceptions-2</module> | ||||
| 
 | ||||
|         <module>core-java-function</module> | ||||
| 
 | ||||
|         <module>core-java-io</module> | ||||
|         <module>core-java-io-2</module> | ||||
|         <module>core-java-io-apis</module> | ||||
|         <module>core-java-io-conversions</module> | ||||
| 
 | ||||
|         <module>core-java-jar</module> | ||||
|         <module>core-java-jndi</module> | ||||
|         <!-- <module>core-java-jpms</module> --> <!-- We haven't upgraded to java 10. Fixing in BAEL-10841 --> | ||||
|         <module>core-java-jvm</module>		 | ||||
| 
 | ||||
|         <module>core-java-lambdas</module> | ||||
|         <module>core-java-lang</module> | ||||
|         <module>core-java-lang-2</module> | ||||
|         <module>core-java-lang-math</module> | ||||
|         <module>core-java-lang-oop</module> | ||||
|         <module>core-java-lang-oop-2</module> | ||||
|         <module>core-java-lang-oop-3</module> | ||||
|         <module>core-java-lang-oop-4</module> | ||||
|         <module>core-java-lang-operators</module> | ||||
|         <module>core-java-lang-syntax</module> | ||||
|         <module>core-java-lang-syntax-2</module> | ||||
| 
 | ||||
|         <module>core-java-networking</module> | ||||
|         <module>core-java-networking-2</module> | ||||
|         <module>core-java-nio</module> | ||||
|         <module>core-java-nio-2</module> | ||||
| 
 | ||||
|         <module>core-java-optional</module> | ||||
|         <!--<module>core-java-os</module> --> <!-- We haven't upgraded to java 9.--> | ||||
| 
 | ||||
|         <module>core-java-perf</module> | ||||
| 
 | ||||
|         <module>core-java-reflection</module> | ||||
| 
 | ||||
|         <module>core-java-security</module> | ||||
|         <module>core-java-streams</module> | ||||
|         <module>core-java-streams-2</module> | ||||
|         <module>core-java-streams-3</module> | ||||
|         <module>core-java-string-algorithms</module> | ||||
|         <module>core-java-string-algorithms-2</module> | ||||
|         <module>core-java-string-algorithms-3</module> | ||||
|         <module>core-java-string-apis</module> | ||||
|         <module>core-java-string-conversions</module> | ||||
|         <module>core-java-string-conversions-2</module> | ||||
|         <module>core-java-string-operations</module> | ||||
|         <module>core-java-string-operations-2</module> | ||||
|         <module>core-java-strings</module> | ||||
|         <module>core-java-sun</module> | ||||
| 
 | ||||
|         <module>core-java-text</module> | ||||
|         <!-- <module>core-java-time-measurements</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 --> | ||||
| 
 | ||||
|         <!-- <module>multimodulemavenproject</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 --> | ||||
|         <module>pre-jpms</module> | ||||
|     </modules> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
| @ -29,16 +29,16 @@ | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-compiler-plugin</artifactId> | ||||
|                 <version>3.8.0</version> | ||||
|                 <version>${compiler.plugin.version}</version> | ||||
|                 <configuration> | ||||
|                     <source>1.8</source> | ||||
|                     <target>1.8</target> | ||||
|                     <source>${source.version}</source> | ||||
|                     <target>${target.version}</target> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|             <plugin> | ||||
|                 <groupId>org.apache.maven.plugins</groupId> | ||||
|                 <artifactId>maven-dependency-plugin</artifactId> | ||||
|                 <version>3.1.1</version> | ||||
|                 <version>${dependency.plugin.version}</version> | ||||
|                 <executions> | ||||
|                     <execution> | ||||
|                         <id>copy-dependencies</id> | ||||
| @ -70,4 +70,11 @@ | ||||
|         </plugins> | ||||
|     </build> | ||||
| 	 | ||||
|     <properties> | ||||
|         <dependency.plugin.version>3.1.1</dependency.plugin.version> | ||||
|         <compiler.plugin.version>3.8.0</compiler.plugin.version> | ||||
|         <source.version>1.8</source.version> | ||||
|         <target.version>1.8</target.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
|  | ||||
							
								
								
									
										14
									
								
								core-kotlin-2/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								core-kotlin-2/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -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 | ||||
| @ -1,14 +0,0 @@ | ||||
| ## Core Kotlin | ||||
| 
 | ||||
| This module contains articles about core Kotlin. | ||||
| 
 | ||||
| ### Relevant articles: | ||||
| 
 | ||||
| - [Kotlin Scope Functions](https://www.baeldung.com/kotlin-scope-functions) | ||||
| - [Kotlin Annotations](https://www.baeldung.com/kotlin-annotations) | ||||
| - [Split a List into Parts in Kotlin](https://www.baeldung.com/kotlin-split-list-into-parts) | ||||
| - [String Comparison in Kotlin](https://www.baeldung.com/kotlin-string-comparison) | ||||
| - [Guide to JVM Platform Annotations in Kotlin](https://www.baeldung.com/kotlin-jvm-annotations) | ||||
| - [Finding an Element in a List Using Kotlin](https://www.baeldung.com/kotlin-finding-element-in-list) | ||||
| - [Kotlin Ternary Conditional Operator](https://www.baeldung.com/kotlin-ternary-conditional-operator) | ||||
| - More articles: [[<-- prev]](/core-kotlin) | ||||
| @ -1,58 +0,0 @@ | ||||
| 
 | ||||
| 
 | ||||
| group 'com.baeldung.ktor' | ||||
| version '1.0-SNAPSHOT' | ||||
| 
 | ||||
| 
 | ||||
| buildscript { | ||||
|     ext.kotlin_version = '1.3.30' | ||||
| 
 | ||||
|     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" } | ||||
| 
 | ||||
| repositories { | ||||
|     mavenCentral() | ||||
|     jcenter() | ||||
|     maven { url "https://dl.bintray.com/kotlin/ktor" } | ||||
| } | ||||
| sourceSets { | ||||
|     main{ | ||||
|         kotlin{ | ||||
|             srcDirs 'com/baeldung/ktor' | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| test { | ||||
|     useJUnitPlatform() | ||||
|     testLogging { | ||||
|         events "passed", "skipped", "failed" | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| dependencies { | ||||
|     implementation "ch.qos.logback:logback-classic:1.2.1" | ||||
|     implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlin_version}" | ||||
|     testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' | ||||
|     testImplementation 'junit:junit:4.12' | ||||
|     testImplementation 'org.assertj:assertj-core:3.12.2' | ||||
|     testImplementation 'org.mockito:mockito-core:2.27.0' | ||||
|     testImplementation "org.jetbrains.kotlin:kotlin-test:${kotlin_version}" | ||||
|     testImplementation "org.jetbrains.kotlin:kotlin-test-junit5:${kotlin_version}" | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								core-kotlin-2/gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								core-kotlin-2/gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -1,5 +0,0 @@ | ||||
| distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
							
								
								
									
										188
									
								
								core-kotlin-2/gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										188
									
								
								core-kotlin-2/gradlew
									
									
									
									
										vendored
									
									
								
							| @ -1,188 +0,0 @@ | ||||
| #!/usr/bin/env sh | ||||
| 
 | ||||
| # | ||||
| # Copyright 2015 the original author or authors. | ||||
| # | ||||
| # Licensed 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. | ||||
| # | ||||
| 
 | ||||
| ############################################################################## | ||||
| ## | ||||
| ##  Gradle start up script for UN*X | ||||
| ## | ||||
| ############################################################################## | ||||
| 
 | ||||
| # Attempt to set APP_HOME | ||||
| # Resolve links: $0 may be a link | ||||
| 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 | ||||
| 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='"-Xmx64m" "-Xms64m"' | ||||
| 
 | ||||
| # 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" "$@" | ||||
							
								
								
									
										100
									
								
								core-kotlin-2/gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										100
									
								
								core-kotlin-2/gradlew.bat
									
									
									
									
										vendored
									
									
								
							| @ -1,100 +0,0 @@ | ||||
| @rem | ||||
| @rem Copyright 2015 the original author or authors. | ||||
| @rem | ||||
| @rem Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| @rem you may not use this file except in compliance with the License. | ||||
| @rem 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, software | ||||
| @rem distributed under the License is distributed on an "AS IS" BASIS, | ||||
| @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| @rem See the License for the specific language governing permissions and | ||||
| @rem limitations under the License. | ||||
| @rem | ||||
| 
 | ||||
| @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="-Xmx64m" "-Xms64m" | ||||
| 
 | ||||
| @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 | ||||
| @ -1,97 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>core-kotlin-2</artifactId> | ||||
|     <name>core-kotlin-2</name> | ||||
|     <packaging>jar</packaging> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung</groupId> | ||||
|         <artifactId>parent-kotlin</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|         <relativePath>../parent-kotlin</relativePath> | ||||
|     </parent> | ||||
| 
 | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
|             <groupId>org.jetbrains.kotlin</groupId> | ||||
|             <artifactId>kotlin-stdlib-jdk8</artifactId> | ||||
|             <version>${kotlin.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.junit.jupiter</groupId> | ||||
|             <artifactId>junit-jupiter</artifactId> | ||||
|             <version>${junit.jupiter.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.mockito</groupId> | ||||
|             <artifactId>mockito-core</artifactId> | ||||
|             <version>${mockito.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>net.bytebuddy</groupId> | ||||
|             <artifactId>byte-buddy</artifactId> | ||||
|             <version>${byte-buddy.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.assertj</groupId> | ||||
|             <artifactId>assertj-core</artifactId> | ||||
|             <version>${assertj.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.jetbrains.kotlin</groupId> | ||||
|             <artifactId>kotlin-test</artifactId> | ||||
|             <version>${kotlin.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.jetbrains.kotlin</groupId> | ||||
|             <artifactId>kotlin-test-junit5</artifactId> | ||||
|             <version>${kotlin.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <build> | ||||
|         <plugins> | ||||
|             <plugin> | ||||
|                 <groupId>org.jetbrains.kotlin</groupId> | ||||
|                 <artifactId>kotlin-maven-plugin</artifactId> | ||||
|                 <version>${kotlin.version}</version> | ||||
|                 <executions> | ||||
|                     <execution> | ||||
|                         <id>compile</id> | ||||
|                         <phase>compile</phase> | ||||
|                         <goals> | ||||
|                             <goal>compile</goal> | ||||
|                         </goals> | ||||
|                     </execution> | ||||
|                     <execution> | ||||
|                         <id>test-compile</id> | ||||
|                         <phase>test-compile</phase> | ||||
|                         <goals> | ||||
|                             <goal>test-compile</goal> | ||||
|                         </goals> | ||||
|                     </execution> | ||||
|                 </executions> | ||||
|                 <configuration> | ||||
|                     <jvmTarget>1.8</jvmTarget> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
|     </build> | ||||
| 
 | ||||
|     <properties> | ||||
|         <kotlin.version>1.3.30</kotlin.version> | ||||
|         <junit.jupiter.version>5.4.2</junit.jupiter.version> | ||||
|         <mockito.version>2.27.0</mockito.version> | ||||
|         <byte-buddy.version>1.9.12</byte-buddy.version> | ||||
|         <assertj.version>3.10.0</assertj.version> | ||||
|     </properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -1,11 +0,0 @@ | ||||
| <configuration> | ||||
|   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||||
|     <encoder> | ||||
|       <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> | ||||
|     </encoder> | ||||
|   </appender> | ||||
| 
 | ||||
|   <root level="INFO"> | ||||
|     <appender-ref ref="STDOUT"/> | ||||
|   </root> | ||||
| </configuration> | ||||
| @ -1,2 +0,0 @@ | ||||
| rootProject.name = 'KtorWithKotlin' | ||||
| 
 | ||||
| @ -1,5 +0,0 @@ | ||||
| Hello to Kotlin. Its: | ||||
| 1. Concise | ||||
| 2. Safe | ||||
| 3. Interoperable | ||||
| 4. Tool-friendly | ||||
| @ -1,2 +0,0 @@ | ||||
| Kotlin | ||||
| Concise, Safe, Interoperable, Tool-friendly | ||||
							
								
								
									
										8
									
								
								core-kotlin-modules/core-kotlin-2/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								core-kotlin-modules/core-kotlin-2/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| ## Core Kotlin 2 | ||||
| 
 | ||||
| This module contains articles about Kotlin core features. | ||||
| 
 | ||||
| ### Relevant articles: | ||||
| - [Working with Dates in Kotlin](https://www.baeldung.com/kotlin-dates) | ||||
| - [Kotlin Ternary Conditional Operator](https://www.baeldung.com/kotlin-ternary-conditional-operator) | ||||
| - [[<-- Prev]](/core-kotlin-modules/core-kotlin) | ||||
							
								
								
									
										25
									
								
								core-kotlin-modules/core-kotlin-2/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								core-kotlin-modules/core-kotlin-2/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>core-kotlin-2</artifactId> | ||||
|     <name>core-kotlin-2</name> | ||||
|     <packaging>jar</packaging> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung.core-kotlin-modules</groupId> | ||||
|         <artifactId>core-kotlin-modules</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
|             <groupId>org.assertj</groupId> | ||||
|             <artifactId>assertj-core</artifactId> | ||||
|             <version>${assertj.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| 
 | ||||
| </project> | ||||
| @ -1,4 +1,4 @@ | ||||
| package com.baeldung.datetime | ||||
| package com.baeldung.dates.datetime | ||||
| 
 | ||||
| import java.time.Duration | ||||
| import java.time.LocalTime | ||||
| @ -1,4 +1,4 @@ | ||||
| package com.baeldung.datetime | ||||
| package com.baeldung.dates.datetime | ||||
| 
 | ||||
| import java.time.DayOfWeek | ||||
| import java.time.LocalDate | ||||
| @ -1,4 +1,4 @@ | ||||
| package com.baeldung.datetime | ||||
| package com.baeldung.dates.datetime | ||||
| 
 | ||||
| import java.time.LocalDateTime | ||||
| 
 | ||||
| @ -1,6 +1,5 @@ | ||||
| package com.baeldung.datetime | ||||
| package com.baeldung.dates.datetime | ||||
| 
 | ||||
| import java.time.LocalDateTime | ||||
| import java.time.LocalTime | ||||
| import java.time.temporal.ChronoUnit | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package com.baeldung.datetime | ||||
| package com.baeldung.dates.datetime | ||||
| 
 | ||||
| import java.time.LocalDate | ||||
| import java.time.Period | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user