From 7c0af736049d5c57a6fe4c6b04ce45a67dab47de Mon Sep 17 00:00:00 2001 From: i032048 Date: Thu, 28 Jul 2016 18:03:48 +0300 Subject: [PATCH 01/17] initial push for core-java-9 tutorials --- core-java-9/.gitignore | 13 ++ core-java-9/README.md | 5 + core-java-9/pom.xml | 138 +++++++++++++++++ core-java-9/src/main/java/.gitignore | 13 ++ .../baeldung/java9/process/ProcessUtils.java | 48 ++++++ .../baeldung/java9/process/ServiceMain.java | 22 +++ core-java-9/src/main/resources/logback.xml | 16 ++ core-java-9/src/test/build.bat | 10 ++ .../test/java/com/baeldung/java9/Main.java | 22 +++ .../java9/MultiResultionImageTest.java | 48 ++++++ .../com/baeldung/java9/httpclient/Main.java | 14 ++ .../java9/httpclient/SimpleHttpRequests.java | 146 ++++++++++++++++++ .../baeldung/java9/language/DiamondTest.java | 36 +++++ .../java9/language/PrivateInterface.java | 23 +++ .../java9/language/TryWithResourcesTest.java | 70 +++++++++ .../java/com/baeldung/java9/process/Main.java | 18 +++ .../baeldung/java9/process/ProcessApi.java | 112 ++++++++++++++ core-java-9/src/test/resources/.gitignore | 13 ++ 18 files changed, 767 insertions(+) create mode 100644 core-java-9/.gitignore create mode 100644 core-java-9/README.md create mode 100644 core-java-9/pom.xml create mode 100644 core-java-9/src/main/java/.gitignore create mode 100644 core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java create mode 100644 core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java create mode 100644 core-java-9/src/main/resources/logback.xml create mode 100644 core-java-9/src/test/build.bat create mode 100644 core-java-9/src/test/java/com/baeldung/java9/Main.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/process/Main.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java create mode 100644 core-java-9/src/test/resources/.gitignore diff --git a/core-java-9/.gitignore b/core-java-9/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-9/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/core-java-9/README.md b/core-java-9/README.md new file mode 100644 index 0000000000..b5d4dbef95 --- /dev/null +++ b/core-java-9/README.md @@ -0,0 +1,5 @@ +========= + +## Core Java 9 Examples + +http://inprogress.baeldung.com/java-9-new-features/ \ No newline at end of file diff --git a/core-java-9/pom.xml b/core-java-9/pom.xml new file mode 100644 index 0000000000..06421915a3 --- /dev/null +++ b/core-java-9/pom.xml @@ -0,0 +1,138 @@ + + 4.0.0 + com.baeldung + core-java9 + 0.1-SNAPSHOT + + core-java9 + + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + junit + junit + ${junit.version} + test + + + + org.mockito + mockito-core + ${mockito.version} + test + + + + + + core-java-9 + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + true + C:\develop\jdks\jdk-9_ea122\bin\javac + 1.9 + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + 1.7.13 + 1.0.13 + + + 5.1.3.Final + + + 19.0 + 3.4 + + + 1.3 + 4.12 + 1.10.19 + + + 3.5.1 + + + 2.6 + 2.19.1 + 2.7 + + + + diff --git a/core-java-9/src/main/java/.gitignore b/core-java-9/src/main/java/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-9/src/main/java/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java new file mode 100644 index 0000000000..b9c1cf1880 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java @@ -0,0 +1,48 @@ +package com.baeldung.java9.process; + +import java.io.File; +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.time.Duration; +import java.time.Instant; +import java.util.stream.Stream; + +import org.junit.Before; +import org.junit.Test; + +import junit.framework.Assert; + +public class ProcessUtils { + + public static String getClassPath(){ + String cp = System.getProperty("java.class.path"); + System.out.println("ClassPath is "+cp); + return cp; + } + + public static File getJavaCmd() throws IOException{ + String javaHome = System.getProperty("java.home"); + File javaCmd; + if(System.getProperty("os.name").startsWith("Win")){ + javaCmd = new File(javaHome, "bin/java.exe"); + }else{ + javaCmd = new File(javaHome, "bin/java"); + } + if(javaCmd.canExecute()){ + return javaCmd; + }else{ + throw new UnsupportedOperationException(javaCmd.getCanonicalPath() + " is not executable"); + } + } + + public static String getMainClass(){ + return System.getProperty("sun.java.command"); + } + + public static String getSystemProperties(){ + StringBuilder sb = new StringBuilder(); + System.getProperties().forEach((s1, s2) -> sb.append(s1 +" - "+ s2) ); + return sb.toString(); + } +} diff --git a/core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java b/core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java new file mode 100644 index 0000000000..458f746496 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java @@ -0,0 +1,22 @@ +package com.baeldung.java9.process; + +import java.util.Optional; + +public class ServiceMain { + + public static void main(String[] args) throws InterruptedException { + ProcessHandle thisProcess = ProcessHandle.current(); + long pid = thisProcess.getPid(); + + + Optional opArgs = Optional.ofNullable(args); + String procName = opArgs.map(str -> str.length > 0 ? str[0] : null).orElse(System.getProperty("sun.java.command")); + + for (int i = 0; i < 10000; i++) { + System.out.println("Process " + procName + " with ID " + pid + " is running!"); + Thread.sleep(10000); + } + + } + +} diff --git a/core-java-9/src/main/resources/logback.xml b/core-java-9/src/main/resources/logback.xml new file mode 100644 index 0000000000..eefdc7a337 --- /dev/null +++ b/core-java-9/src/main/resources/logback.xml @@ -0,0 +1,16 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + \ No newline at end of file diff --git a/core-java-9/src/test/build.bat b/core-java-9/src/test/build.bat new file mode 100644 index 0000000000..c6208b89d2 --- /dev/null +++ b/core-java-9/src/test/build.bat @@ -0,0 +1,10 @@ +@echo off +REM C:\develop\jdks\jdk-9_ea123\bin\javac +REM +REM C:\develop\jdks\jdk1.8.0_45\bin\javac +@echo on +C:\develop\jdks\jdk-9_ea123\bin\javac -Werror -cp C:\Users\i032048\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\i032048\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\i032048\.m2\repository\junit\junit\4.4\junit-4.4.jar;C:\develop\git-repos\baeldung-tutorials\core-java-9\target\test-classes;C:\develop\git-repos\baeldung-tutorials\core-java-9\src\test %1 + + +@echo off +REM com\baeldung\java9\language\TryWithResourcesTest.java diff --git a/core-java-9/src/test/java/com/baeldung/java9/Main.java b/core-java-9/src/test/java/com/baeldung/java9/Main.java new file mode 100644 index 0000000000..a41541f000 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/Main.java @@ -0,0 +1,22 @@ +package com.baeldung.java9; + +import com.baeldung.java9.language.PrivateInterface; +import com.baeldung.java9.language.TryWithResourcesTest; + +public class Main { + + public static void main(String args[]){ + PrivateInterface pi =new PrivateInterface() { + }; + pi.check(); + } + +// public static void main(String[] args) throws Exception { +// MultiResultionImageTest mri = new MultiResultionImageTest(); +// mri.baseMultiResImageTest(); +// +// TryWithResourcesTest tt = new TryWithResourcesTest(); +// // tt.test1(); +// } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java new file mode 100644 index 0000000000..d6c16b91bc --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java @@ -0,0 +1,48 @@ +package com.baeldung.java9; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; + +import java.awt.Image; +import java.awt.image.BaseMultiResolutionImage; +import java.awt.image.BufferedImage; +import java.awt.image.MultiResolutionImage; +import java.util.List; + +import org.junit.Test; + +public class MultiResultionImageTest { + + + @Test + public void baseMultiResImageTest() { + int baseIndex = 1; + int length = 4; + BufferedImage[] resolutionVariants = new BufferedImage[length]; + for (int i = 0; i < length; i++) { + resolutionVariants[i] = createImage(i); + } + MultiResolutionImage bmrImage = new BaseMultiResolutionImage(baseIndex, resolutionVariants); + List rvImageList = bmrImage.getResolutionVariants(); + assertEquals("MultiResoltion Image shoudl contain the same number of resolution variants!", rvImageList.size(), length); + + for (int i = 0; i < length; i++) { + int imageSize = getSize(i); + Image testRVImage = bmrImage.getResolutionVariant(imageSize, imageSize); + assertSame("Images should be the same", testRVImage, resolutionVariants[i]); + } + + } + + private static int getSize(int i) { + return 8 * (i + 1); + } + + + private static BufferedImage createImage(int i) { + return new BufferedImage(getSize(i), getSize(i), + BufferedImage.TYPE_INT_RGB); + } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java new file mode 100644 index 0000000000..c7d2f43800 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java @@ -0,0 +1,14 @@ +package com.baeldung.java9.httpclient; + +public class Main { + + public static void main(String[] args) throws Exception { + SimpleHttpRequests shr = new SimpleHttpRequests(); + shr.quickGet(); + shr.PostMehtod(); + + shr.configureHttpClient(); + shr.asyncGet(); + } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java new file mode 100644 index 0000000000..78a38f3357 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java @@ -0,0 +1,146 @@ +package com.baeldung.java9.httpclient; + +import static java.net.HttpURLConnection.HTTP_OK; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.net.CookieManager; +import java.net.CookiePolicy; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLParameters; + +import org.junit.Before; +import org.junit.Test; + +public class SimpleHttpRequests { + + // private URI httpURI = + + @Before + public void init() { + + } + + @Test + public void quickGet() throws IOException, InterruptedException, URISyntaxException { + HttpRequest request = HttpRequest.create(new URI("http://localhost:8080")).GET(); + HttpResponse response = request.response(); + System.out.println(printHeaders(response.headers())); + String responseBody = response.body(HttpResponse.asString()); + assertTrue("Get response body size", responseBody.length() > 10); + } + + @Test + public void asyncGet() throws URISyntaxException, IOException, InterruptedException, ExecutionException{ + HttpRequest request = HttpRequest.create(new URI("http://localhost:8080")).GET(); + long before = System.currentTimeMillis(); + CompletableFuture futureResponse = request.responseAsync(); + futureResponse.thenAccept( response -> { + HttpHeaders hs = response.headers(); + System.out.println(Thread.currentThread()+"\nHeaders:----------------------\n"+ printHeaders(hs)); + String responseBody = response.body(HttpResponse.asString()); + + + //System.out.println(responseBody); + }); + + + + + long after = System.currentTimeMillis(); + System.out.println(Thread.currentThread()+" waits "+ (after - before)); + assertTrue("Thread waits", (after - before) < 1500); + + futureResponse.join(); + + // Calculate some other thing in this Thread + //HttpResponse response = futureResponse.get(); + long afterAfter = System.currentTimeMillis(); + System.out.println(Thread.currentThread()+ "(afterAfter - before)"+ (afterAfter - before)); + + //String responseBody = response.body(HttpResponse.asString()); + //HttpHeaders hs = response.headers(); + //System.out.println(responseBody); + // assertTrue("Get response body size", responseBody.length() > 10); + } + + @Test + public void PostMehtod() throws URISyntaxException, IOException, InterruptedException { + HttpRequest.Builder requestBuilder = HttpRequest.create(new URI("http://localhost:8080")); + requestBuilder.body(HttpRequest.fromString("param1=foo,param2=bar")).followRedirects(HttpClient.Redirect.SECURE); + HttpRequest request = requestBuilder.POST(); + HttpResponse response = request.response(); + int statusCode = response.statusCode(); + assertTrue("HTTP return code", statusCode == HTTP_OK); + } + + @Test + public void configureHttpClient() throws NoSuchAlgorithmException, URISyntaxException, IOException, InterruptedException{ + CookieManager cManager = new CookieManager(); + cManager.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER); + + SSLParameters sslParam = new SSLParameters (new String[] { "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" }, new String[] { "TLSv1.2" }); + + HttpClient.Builder hcBuilder = HttpClient.create(); + hcBuilder.cookieManager(cManager).sslContext(SSLContext.getDefault()).sslParameters(sslParam); + HttpClient httpClient = hcBuilder.build(); + HttpRequest.Builder reqBuilder = httpClient.request(new URI("https://localhost:8443")); + + HttpRequest request = reqBuilder.followRedirects(HttpClient.Redirect.ALWAYS).GET(); + HttpResponse response = request.response(); + int statusCode = response.statusCode(); + System.out.println(response.body(HttpResponse.asString())); + assertTrue("HTTP return code", statusCode == HTTP_OK); + } + + SSLParameters getDefaultSSLParameters() throws NoSuchAlgorithmException{ + SSLParameters sslP1 = SSLContext.getDefault().getSupportedSSLParameters(); + String [] proto = sslP1.getApplicationProtocols(); + String [] cifers = sslP1.getCipherSuites(); + System.out.println(printStringArr(proto)); + System.out.println(printStringArr(cifers)); + return sslP1; + } + + String printStringArr(String ... args ){ + if(args == null){ + return null; + } + StringBuilder sb = new StringBuilder(); + for (String s : args){ + sb.append(s); + sb.append("\n"); + } + return sb.toString(); + } + + String printHeaders(HttpHeaders h){ + if(h == null){ + return null; + } + + StringBuilder sb = new StringBuilder(); + Map> hMap = h.map(); + for(String k : hMap.keySet()){ + sb.append(k).append(":"); + List l = hMap.get(k); + if( l != null ){ + l.forEach( s -> { sb.append(s).append(","); } ); + } + sb.append("\n"); + } + return sb.toString(); + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java new file mode 100644 index 0000000000..33da6486f4 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java @@ -0,0 +1,36 @@ +package com.baeldung.java9.language; + +import org.junit.Test; + +public class DiamondTest { + + static class FooClass { + FooClass(X x) { + } + + FooClass(X x, Z z) { + } + } + + @Test + public void diamondTest() { + FooClass fc = new FooClass<>(1) { + }; + FooClass fc0 = new FooClass<>(1) { + }; + FooClass fc1 = new FooClass<>(1) { + }; + FooClass fc2 = new FooClass<>(1) { + }; + + FooClass fc3 = new FooClass<>(1, "") { + }; + FooClass fc4 = new FooClass<>(1, "") { + }; + FooClass fc5 = new FooClass<>(1, "") { + }; + FooClass fc6 = new FooClass<>(1, "") { + }; + + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java new file mode 100644 index 0000000000..fd6a496b18 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java @@ -0,0 +1,23 @@ +package com.baeldung.java9.language; + +public interface PrivateInterface { + + private static String staticPrivate() { + return "static private"; + } + + private String instancePrivate() { + return "instance private"; + } + + public default void check(){ + String result = staticPrivate(); + if (!result.equals("static private")) + throw new AssertionError("Incorrect result for static private interface method"); + PrivateInterface pvt = new PrivateInterface() { + }; + result = pvt.instancePrivate(); + if (!result.equals("instance private")) + throw new AssertionError("Incorrect result for instance private interface method"); + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java new file mode 100644 index 0000000000..687dfbc390 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java @@ -0,0 +1,70 @@ +package com.baeldung.java9.language; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class TryWithResourcesTest { + + static int closeCount = 0; + + static class MyAutoCloseable implements AutoCloseable{ + final FinalWrapper finalWrapper = new FinalWrapper(); + + public void close() { + closeCount++; + } + + static class FinalWrapper { + public final AutoCloseable finalCloseable = new AutoCloseable() { + @Override + public void close() throws Exception { + closeCount++; + } + }; + } + } + + @Test + public void tryWithResourcesTest() { + MyAutoCloseable mac = new MyAutoCloseable(); + + try (mac) { + assertEquals("Expected and Actual does not match", 0, closeCount); + } + + try (mac.finalWrapper.finalCloseable) { + assertEquals("Expected and Actual does not match", 1, closeCount); + } catch (Exception ex) { + } + + try (new MyAutoCloseable() { }.finalWrapper.finalCloseable) { + assertEquals("Expected and Actual does not match", 2, closeCount); + } catch (Exception ex) { + } + + try ((closeCount > 0 ? mac : new MyAutoCloseable()).finalWrapper.finalCloseable) { + assertEquals("Expected and Actual does not match", 3, closeCount); + } catch (Exception ex) { + } + + try { + throw new CloseableException(); + } catch (CloseableException ex) { + try (ex) { + assertEquals("Expected and Actual does not match", 4, closeCount); + } + } + assertEquals("Expected and Actual does not match", 5, closeCount); + } + + + static class CloseableException extends Exception implements AutoCloseable { + @Override + public void close() { + closeCount++; + } + } + +} + + diff --git a/core-java-9/src/test/java/com/baeldung/java9/process/Main.java b/core-java-9/src/test/java/com/baeldung/java9/process/Main.java new file mode 100644 index 0000000000..b16baf4676 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/process/Main.java @@ -0,0 +1,18 @@ +package com.baeldung.java9.process; + +import java.security.NoSuchAlgorithmException; + +public class Main { + + public static void main(String[] args) throws Exception { + ProcessApi procApi = new ProcessApi(); + procApi.createAndDestroyProcess(); + + procApi.processInfoExample(); + + Thread.sleep(40200); + System.out.println("_______END!___________"); + + } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java b/core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java new file mode 100644 index 0000000000..419516cb64 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java @@ -0,0 +1,112 @@ +package com.baeldung.java9.process; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Stream; + +import org.junit.Before; +import org.junit.Test; + +import junit.framework.Assert; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class ProcessApi { + + + @Before + public void init() { + + } + + @Test + public void processInfoExample()throws NoSuchAlgorithmException{ + ProcessHandle self = ProcessHandle.current(); + long PID = self.getPid(); + ProcessHandle.Info procInfo = self.info(); + Optional args = procInfo.arguments(); + Optional cmd = procInfo.commandLine(); + Optional startTime = procInfo.startInstant(); + Optional cpuUsage = procInfo.totalCpuDuration(); + + waistCPU(); + System.out.println("Args "+ args); + System.out.println("Command " +cmd.orElse("EmptyCmd")); + System.out.println("Start time: "+ startTime.get().toString()); + System.out.println(cpuUsage.get().toMillis()); + + Stream allProc = ProcessHandle.current().children(); + allProc.forEach(p -> { + System.out.println("Proc "+ p.getPid()); + }); + + } + + @Test + public void createAndDestroyProcess() throws IOException, InterruptedException{ + int numberOfChildProcesses = 5; + for(int i=0; i < numberOfChildProcesses; i++){ + createNewJVM(ServiceMain.class, i).getPid(); + } + + Stream childProc = ProcessHandle.current().children(); + assertEquals( childProc.count(), numberOfChildProcesses); + + childProc = ProcessHandle.current().children(); + childProc.forEach(processHandle -> { + assertTrue("Process "+ processHandle.getPid() +" should be alive!", processHandle.isAlive()); + CompletableFuture onProcExit = processHandle.onExit(); + onProcExit.thenAccept(procHandle -> { + System.out.println("Process with PID "+ procHandle.getPid() + " has stopped"); + }); + }); + + Thread.sleep(10000); + + childProc = ProcessHandle.current().children(); + childProc.forEach(procHandle -> { + assertTrue("Could not kill process "+procHandle.getPid(), procHandle.destroy()); + }); + + Thread.sleep(5000); + + childProc = ProcessHandle.current().children(); + childProc.forEach(procHandle -> { + assertFalse("Process "+ procHandle.getPid() +" should not be alive!", procHandle.isAlive()); + }); + + } + + private Process createNewJVM(Class mainClass, int number) throws IOException{ + ArrayList cmdParams = new ArrayList(5); + cmdParams.add(ProcessUtils.getJavaCmd().getAbsolutePath()); + cmdParams.add("-cp"); + cmdParams.add(ProcessUtils.getClassPath()); + cmdParams.add(mainClass.getName()); + cmdParams.add("Service "+ number); + ProcessBuilder myService = new ProcessBuilder(cmdParams); + myService.inheritIO(); + return myService.start(); + } + + private void waistCPU() throws NoSuchAlgorithmException{ + ArrayList randArr = new ArrayList(4096); + SecureRandom sr = SecureRandom.getInstanceStrong(); + Duration somecpu = Duration.ofMillis(4200L); + Instant end = Instant.now().plus(somecpu); + while (Instant.now().isBefore(end)) { + //System.out.println(sr.nextInt()); + randArr.add( sr.nextInt() ); + } + } + +} diff --git a/core-java-9/src/test/resources/.gitignore b/core-java-9/src/test/resources/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-9/src/test/resources/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file From 9cf6ea22537a8e5c1f1bd0de8bb5b045d8d45e25 Mon Sep 17 00:00:00 2001 From: antonk Date: Sat, 27 Aug 2016 10:42:13 +0300 Subject: [PATCH 02/17] Fixed Maven build with experimental java 9 Maven compiler plug-in. Minor code changes --- .../java9/language/PrivateInterface.java | 23 ------------------- .../PrivateInterfaceTest.java} | 0 pom.xml | 1 + 3 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java rename core-java-9/src/test/java/com/baeldung/java9/{Main.java => language/PrivateInterfaceTest.java} (100%) diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java deleted file mode 100644 index fd6a496b18..0000000000 --- a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.java9.language; - -public interface PrivateInterface { - - private static String staticPrivate() { - return "static private"; - } - - private String instancePrivate() { - return "instance private"; - } - - public default void check(){ - String result = staticPrivate(); - if (!result.equals("static private")) - throw new AssertionError("Incorrect result for static private interface method"); - PrivateInterface pvt = new PrivateInterface() { - }; - result = pvt.instancePrivate(); - if (!result.equals("instance private")) - throw new AssertionError("Incorrect result for instance private interface method"); - } -} diff --git a/core-java-9/src/test/java/com/baeldung/java9/Main.java b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java similarity index 100% rename from core-java-9/src/test/java/com/baeldung/java9/Main.java rename to core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java diff --git a/pom.xml b/pom.xml index d2f5d83b46..cbe3055dbe 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ apache-fop core-java core-java-8 + core-java-9 couchbase-sdk-intro couchbase-sdk-spring-service From 3f204ebd59d754a66b018e16dd6c291a6a4b3009 Mon Sep 17 00:00:00 2001 From: anton-k Date: Fri, 2 Sep 2016 01:43:49 +0300 Subject: [PATCH 03/17] Running maven build and changes to some of tests. --- .../java/com/baeldung/java9/httpclient/Main.java | 14 -------------- ...tpRequests.java => SimpleHttpRequestsTest.java} | 0 2 files changed, 14 deletions(-) delete mode 100644 core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java rename core-java-9/src/test/java/com/baeldung/java9/httpclient/{SimpleHttpRequests.java => SimpleHttpRequestsTest.java} (100%) diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java deleted file mode 100644 index c7d2f43800..0000000000 --- a/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.java9.httpclient; - -public class Main { - - public static void main(String[] args) throws Exception { - SimpleHttpRequests shr = new SimpleHttpRequests(); - shr.quickGet(); - shr.PostMehtod(); - - shr.configureHttpClient(); - shr.asyncGet(); - } - -} diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java similarity index 100% rename from core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java rename to core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java From 27f540c9bfe15c16c156eeed3098feef3ddb2c10 Mon Sep 17 00:00:00 2001 From: anton-k Date: Fri, 2 Sep 2016 01:48:15 +0300 Subject: [PATCH 04/17] Fixed maven build and modifications ot some tests --- core-java-9/pom.xml | 192 +++++++----------- .../java9/language/PrivateInterface.java | 23 +++ .../baeldung/java9/process/ProcessUtils.java | 4 - .../httpclient/SimpleHttpRequestsTest.java | 58 ++---- .../java9/language/PrivateInterfaceTest.java | 21 +- 5 files changed, 127 insertions(+), 171 deletions(-) create mode 100644 core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java diff --git a/core-java-9/pom.xml b/core-java-9/pom.xml index 06421915a3..b29838d283 100644 --- a/core-java-9/pom.xml +++ b/core-java-9/pom.xml @@ -1,138 +1,102 @@ - - 4.0.0 - com.baeldung - core-java9 - 0.1-SNAPSHOT + + 4.0.0 + com.baeldung + core-java9 + 0.2-SNAPSHOT - core-java9 + core-java9 - + + + apache.snapshots + http://repository.apache.org/snapshots/ + + - - - org.slf4j - slf4j-api - ${org.slf4j.version} - + + org.slf4j + slf4j-api + ${org.slf4j.version} + - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + - - junit - junit - ${junit.version} - test - + + junit + junit + ${junit.version} + test + - - org.mockito - mockito-core - ${mockito.version} - test - + + org.mockito + mockito-core + ${mockito.version} + test + - + - - core-java-9 - - - src/main/resources - true - - + + core-java-9 - + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - true - C:\develop\jdks\jdk-9_ea122\bin\javac - 1.9 - - - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.9 + 1.9 - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - + true + + - + - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + - - - 1.7.13 - 1.0.13 + - - 5.1.3.Final + - - 19.0 - 3.4 + + + 1.7.13 + 1.0.13 - - 1.3 - 4.12 - 1.10.19 - - 3.5.1 - - - 2.6 - 2.19.1 - 2.7 + + + 3.6-jigsaw-SNAPSHOT - + + 2.19.1 + + + 1.3 + 4.12 + 1.10.19 + diff --git a/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java b/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java new file mode 100644 index 0000000000..fd6a496b18 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java @@ -0,0 +1,23 @@ +package com.baeldung.java9.language; + +public interface PrivateInterface { + + private static String staticPrivate() { + return "static private"; + } + + private String instancePrivate() { + return "instance private"; + } + + public default void check(){ + String result = staticPrivate(); + if (!result.equals("static private")) + throw new AssertionError("Incorrect result for static private interface method"); + PrivateInterface pvt = new PrivateInterface() { + }; + result = pvt.instancePrivate(); + if (!result.equals("instance private")) + throw new AssertionError("Incorrect result for instance private interface method"); + } +} diff --git a/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java index b9c1cf1880..d6682bd0c8 100644 --- a/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java +++ b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java @@ -8,10 +8,6 @@ import java.time.Duration; import java.time.Instant; import java.util.stream.Stream; -import org.junit.Before; -import org.junit.Test; - -import junit.framework.Assert; public class ProcessUtils { diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java index 78a38f3357..ab28b0a805 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java @@ -1,4 +1,6 @@ -package com.baeldung.java9.httpclient; +package com.baeldung.java9.httpclient; + + import static java.net.HttpURLConnection.HTTP_OK; import static org.junit.Assert.assertTrue; @@ -24,61 +26,40 @@ import javax.net.ssl.SSLParameters; import org.junit.Before; import org.junit.Test; -public class SimpleHttpRequests { +public class SimpleHttpRequestsTest { - // private URI httpURI = + private URI httpURI; @Before - public void init() { - + public void init() throws URISyntaxException { + httpURI = new URI("http://www.baeldung.com/"); } @Test public void quickGet() throws IOException, InterruptedException, URISyntaxException { - HttpRequest request = HttpRequest.create(new URI("http://localhost:8080")).GET(); + HttpRequest request = HttpRequest.create( httpURI ).GET(); HttpResponse response = request.response(); - System.out.println(printHeaders(response.headers())); + int responseStatusCode = response.statusCode(); String responseBody = response.body(HttpResponse.asString()); - assertTrue("Get response body size", responseBody.length() > 10); + assertTrue("Get response status code is bigger then 400", responseStatusCode < 400); } @Test - public void asyncGet() throws URISyntaxException, IOException, InterruptedException, ExecutionException{ - HttpRequest request = HttpRequest.create(new URI("http://localhost:8080")).GET(); + public void asynchronousGet() throws URISyntaxException, IOException, InterruptedException, ExecutionException{ + HttpRequest request = HttpRequest.create(httpURI).GET(); long before = System.currentTimeMillis(); CompletableFuture futureResponse = request.responseAsync(); futureResponse.thenAccept( response -> { - HttpHeaders hs = response.headers(); - System.out.println(Thread.currentThread()+"\nHeaders:----------------------\n"+ printHeaders(hs)); String responseBody = response.body(HttpResponse.asString()); - - - //System.out.println(responseBody); - }); - - - - - long after = System.currentTimeMillis(); - System.out.println(Thread.currentThread()+" waits "+ (after - before)); - assertTrue("Thread waits", (after - before) < 1500); - - futureResponse.join(); - - // Calculate some other thing in this Thread - //HttpResponse response = futureResponse.get(); - long afterAfter = System.currentTimeMillis(); - System.out.println(Thread.currentThread()+ "(afterAfter - before)"+ (afterAfter - before)); - - //String responseBody = response.body(HttpResponse.asString()); - //HttpHeaders hs = response.headers(); - //System.out.println(responseBody); - // assertTrue("Get response body size", responseBody.length() > 10); + }); + HttpResponse resp = futureResponse.get(); + HttpHeaders hs = resp.headers(); + assertTrue("There should be more then 1 header.", hs.map().size() >1); } @Test - public void PostMehtod() throws URISyntaxException, IOException, InterruptedException { - HttpRequest.Builder requestBuilder = HttpRequest.create(new URI("http://localhost:8080")); + public void postMehtod() throws URISyntaxException, IOException, InterruptedException { + HttpRequest.Builder requestBuilder = HttpRequest.create(httpURI); requestBuilder.body(HttpRequest.fromString("param1=foo,param2=bar")).followRedirects(HttpClient.Redirect.SECURE); HttpRequest request = requestBuilder.POST(); HttpResponse response = request.response(); @@ -96,12 +77,11 @@ public class SimpleHttpRequests { HttpClient.Builder hcBuilder = HttpClient.create(); hcBuilder.cookieManager(cManager).sslContext(SSLContext.getDefault()).sslParameters(sslParam); HttpClient httpClient = hcBuilder.build(); - HttpRequest.Builder reqBuilder = httpClient.request(new URI("https://localhost:8443")); + HttpRequest.Builder reqBuilder = httpClient.request(new URI("https://www.facebook.com")); HttpRequest request = reqBuilder.followRedirects(HttpClient.Redirect.ALWAYS).GET(); HttpResponse response = request.response(); int statusCode = response.statusCode(); - System.out.println(response.body(HttpResponse.asString())); assertTrue("HTTP return code", statusCode == HTTP_OK); } diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java index a41541f000..29ef3930f8 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java @@ -1,22 +1,15 @@ -package com.baeldung.java9; +package com.baeldung.java9.language; import com.baeldung.java9.language.PrivateInterface; -import com.baeldung.java9.language.TryWithResourcesTest; +import org.junit.Test; -public class Main { +public class PrivateInterfaceTest { - public static void main(String args[]){ - PrivateInterface pi =new PrivateInterface() { + @Test + public void test() { + PrivateInterface piClass = new PrivateInterface() { }; - pi.check(); + piClass.check(); } - -// public static void main(String[] args) throws Exception { -// MultiResultionImageTest mri = new MultiResultionImageTest(); -// mri.baseMultiResImageTest(); -// -// TryWithResourcesTest tt = new TryWithResourcesTest(); -// // tt.test1(); -// } } From 7b6200728d93a528c0be27f075becf7c121a6446 Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Fri, 2 Sep 2016 02:08:55 +0300 Subject: [PATCH 05/17] Removing unnecessary files --- core-java-9/src/test/build.bat | 10 ---------- .../java/com/baeldung/java9/process/Main.java | 18 ------------------ 2 files changed, 28 deletions(-) delete mode 100644 core-java-9/src/test/build.bat delete mode 100644 core-java-9/src/test/java/com/baeldung/java9/process/Main.java diff --git a/core-java-9/src/test/build.bat b/core-java-9/src/test/build.bat deleted file mode 100644 index c6208b89d2..0000000000 --- a/core-java-9/src/test/build.bat +++ /dev/null @@ -1,10 +0,0 @@ -@echo off -REM C:\develop\jdks\jdk-9_ea123\bin\javac -REM -REM C:\develop\jdks\jdk1.8.0_45\bin\javac -@echo on -C:\develop\jdks\jdk-9_ea123\bin\javac -Werror -cp C:\Users\i032048\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\i032048\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\i032048\.m2\repository\junit\junit\4.4\junit-4.4.jar;C:\develop\git-repos\baeldung-tutorials\core-java-9\target\test-classes;C:\develop\git-repos\baeldung-tutorials\core-java-9\src\test %1 - - -@echo off -REM com\baeldung\java9\language\TryWithResourcesTest.java diff --git a/core-java-9/src/test/java/com/baeldung/java9/process/Main.java b/core-java-9/src/test/java/com/baeldung/java9/process/Main.java deleted file mode 100644 index b16baf4676..0000000000 --- a/core-java-9/src/test/java/com/baeldung/java9/process/Main.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.java9.process; - -import java.security.NoSuchAlgorithmException; - -public class Main { - - public static void main(String[] args) throws Exception { - ProcessApi procApi = new ProcessApi(); - procApi.createAndDestroyProcess(); - - procApi.processInfoExample(); - - Thread.sleep(40200); - System.out.println("_______END!___________"); - - } - -} From 6b7b8be33309ecc101fcff0dfae4a4f7412c8059 Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Tue, 6 Sep 2016 08:56:29 +0300 Subject: [PATCH 06/17] Comment out the new project until Java 9 is available on the build server. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cbe3055dbe..60f33c4e2a 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ apache-fop core-java core-java-8 - core-java-9 + couchbase-sdk-intro couchbase-sdk-spring-service From ef54cd43cbaa2b938aa3595fb415dab933503812 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Sun, 18 Sep 2016 17:05:52 +0530 Subject: [PATCH 07/17] Add sample code to get current date in Java 8 --- .../com/baeldung/util/GetCurrentDate.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java new file mode 100644 index 0000000000..7bbf8b48bb --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java @@ -0,0 +1,20 @@ +package com.baeldung.util; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; + +public class GetCurrentDate { + + public static void main(String args[]) { + + LocalDate localDate = LocalDate.now(); + System.out.println("Today's date is: " + localDate); + + localDate = LocalDate.now(ZoneId.of("GMT+02:30")); + System.out.println("Current date in GMT +02:30 timezone: " + localDate); + + LocalDateTime localDateTime = LocalDateTime.now(); + System.out.println("Today's date is: " + localDateTime.toLocalDate()); + } +} From ba4fb5bf42c062bcd38b51e6e2d4625337894f41 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Sun, 18 Sep 2016 17:06:12 +0530 Subject: [PATCH 08/17] Add sample code to get current time in Java 8 --- .../com/baeldung/util/GetCurrentTime.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java new file mode 100644 index 0000000000..39934c94bf --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java @@ -0,0 +1,20 @@ +package com.baeldung.util; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; + +public class GetCurrentTime { + + public static void main(String args[]) { + + LocalTime localTime = LocalTime.now(); + System.out.println("Current time is: " + localTime); + + localTime = LocalTime.now(ZoneId.of("GMT+02:30")); + System.out.println("Current time in GMT +02:30 timezone: " + localTime); + + LocalDateTime localDateTime = LocalDateTime.now(); + System.out.println("Current time is: " + localDateTime.toLocalTime()); + } +} From 1b4714c214236ae4d7a8a25bdfce3feff74e0932 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Sun, 18 Sep 2016 17:06:34 +0530 Subject: [PATCH 09/17] Add sample code to get current timestamp in Java 8 --- .../com/baeldung/util/GetCurrentTimestamp.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java new file mode 100644 index 0000000000..2387a721cf --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java @@ -0,0 +1,14 @@ +package com.baeldung.util; + +import java.time.Instant; + +public class GetCurrentTimestamp { + + public static void main(String args[]) { + + Instant instant = Instant.now(); + System.out.println("Current timestamp is: " + instant.toEpochMilli()); + + System.out.println("Number of seconds: " + instant.getEpochSecond()); + } +} From f1cfc706df085310b50fcd3df1f9690e34d8257c Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Tue, 20 Sep 2016 17:59:43 +0300 Subject: [PATCH 10/17] Adding Optional 2 Stream and Set.of examples. --- .../baeldung/java9/OptionalToStreamTest.java | 21 +++++++++++++++ .../com/baeldung/java9/SetExamplesTest.java | 27 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java diff --git a/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java b/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java new file mode 100644 index 0000000000..966c03fe17 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java @@ -0,0 +1,21 @@ +package com.baeldung.java9; + +import java.util.Optional; +import java.util.stream.Stream; + +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +public class OptionalToStreamTest { + + @Test + public void testOptionalToStream(){ + Optional op = Optional.ofNullable("String value"); + Stream strOptionalStream = op.stream(); + Stream filteredStream = strOptionalStream.filter( + (str) -> { return str != null && str.startsWith("String"); } + ); + assertEquals(1, filteredStream.count()); + + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java b/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java new file mode 100644 index 0000000000..c534ba9d47 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java @@ -0,0 +1,27 @@ +package com.baeldung.java9; + + +import java.util.Set; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class SetExamplesTest { + + @Test + public void testUnmutableSet(){ + Set strKeySet = Set.of("key1", "key2", "key3"); + try{ + strKeySet.add("newKey"); + }catch(UnsupportedOperationException uoe){ + } + assertEquals(strKeySet.size(), 3); + } + + @Test + public void testArrayToSet(){ + Integer [] intArray = new Integer[]{1,2,3,4,5,6,7,8,9,0}; + Set intSet = Set.of(intArray); + assertEquals(intSet.size(), intArray.length); + } +} From be6939bd97e23f7bda3c9c540dd61a5824e7347f Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Thu, 22 Sep 2016 00:04:53 +0300 Subject: [PATCH 11/17] Removing comments, reformatting. --- core-java-9/pom.xml | 11 +---------- .../baeldung/java9/MultiResultionImageTest.java | 1 - .../com/baeldung/java9/OptionalToStreamTest.java | 12 ++++++------ .../java/com/baeldung/java9/SetExamplesTest.java | 15 +++++++-------- 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/core-java-9/pom.xml b/core-java-9/pom.xml index b29838d283..844ad6a782 100644 --- a/core-java-9/pom.xml +++ b/core-java-9/pom.xml @@ -60,12 +60,8 @@ 1.9 1.9 - true - - @@ -85,12 +81,7 @@ - - 3.6-jigsaw-SNAPSHOT - - + 3.6-jigsaw-SNAPSHOT 2.19.1 diff --git a/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java index d6c16b91bc..0805e06794 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java @@ -1,6 +1,5 @@ package com.baeldung.java9; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; diff --git a/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java b/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java index 966c03fe17..56b4bb7b8c 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java @@ -7,15 +7,15 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; public class OptionalToStreamTest { - + @Test - public void testOptionalToStream(){ + public void testOptionalToStream() { Optional op = Optional.ofNullable("String value"); Stream strOptionalStream = op.stream(); - Stream filteredStream = strOptionalStream.filter( - (str) -> { return str != null && str.startsWith("String"); } - ); + Stream filteredStream = strOptionalStream.filter((str) -> { + return str != null && str.startsWith("String"); + }); assertEquals(1, filteredStream.count()); - + } } diff --git a/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java b/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java index c534ba9d47..0f8db83d9c 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java @@ -1,6 +1,5 @@ package com.baeldung.java9; - import java.util.Set; import org.junit.Test; @@ -9,18 +8,18 @@ import static org.junit.Assert.assertEquals; public class SetExamplesTest { @Test - public void testUnmutableSet(){ + public void testUnmutableSet() { Set strKeySet = Set.of("key1", "key2", "key3"); - try{ + try { strKeySet.add("newKey"); - }catch(UnsupportedOperationException uoe){ + } catch (UnsupportedOperationException uoe) { } - assertEquals(strKeySet.size(), 3); + assertEquals(strKeySet.size(), 3); } - + @Test - public void testArrayToSet(){ - Integer [] intArray = new Integer[]{1,2,3,4,5,6,7,8,9,0}; + public void testArrayToSet() { + Integer[] intArray = new Integer[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; Set intSet = Set.of(intArray); assertEquals(intSet.size(), intArray.length); } From 7aaae1d1433995ffd5a25a5d24d817a1bc072737 Mon Sep 17 00:00:00 2001 From: Nancy Bosecker Date: Mon, 26 Sep 2016 22:40:46 -0700 Subject: [PATCH 12/17] Moved project to core-java from eclipse folder (#703) --- .../equalshashcode/entities/ComplexClass.java | 65 +++++++++++++++++++ .../entities/PrimitiveClass.java | 0 .../equalshashcode/entities/Rectangle.java | 2 - .../equalshashcode/entities/Shape.java | 0 .../equalshashcode/entities/Square.java | 0 .../entities/ComplexClassTest.java | 5 +- .../entities/PrimitiveClassTest.java | 5 +- .../entities/SquareClassTest.java | 5 +- .../equalshashcode/entities/ComplexClass.java | 63 ------------------ 9 files changed, 71 insertions(+), 74 deletions(-) create mode 100644 core-java/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java rename {eclipse => core-java}/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java (100%) rename {eclipse => core-java}/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java (96%) rename {eclipse => core-java}/src/main/java/org/baeldung/equalshashcode/entities/Shape.java (100%) rename {eclipse => core-java}/src/main/java/org/baeldung/equalshashcode/entities/Square.java (100%) rename {eclipse => core-java}/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java (90%) rename {eclipse => core-java}/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java (84%) rename {eclipse => core-java}/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java (84%) delete mode 100644 eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java diff --git a/core-java/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java new file mode 100644 index 0000000000..d4a6a0f42e --- /dev/null +++ b/core-java/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java @@ -0,0 +1,65 @@ +package org.baeldung.equalshashcode.entities; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class ComplexClass { + + private List genericList; + private Set integerSet; + + public ComplexClass(ArrayList genericArrayList, HashSet integerHashSet) { + super(); + this.genericList = genericArrayList; + this.integerSet = integerHashSet; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((genericList == null) ? 0 : genericList.hashCode()); + result = prime * result + ((integerSet == null) ? 0 : integerSet.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof ComplexClass)) + return false; + ComplexClass other = (ComplexClass) obj; + if (genericList == null) { + if (other.genericList != null) + return false; + } else if (!genericList.equals(other.genericList)) + return false; + if (integerSet == null) { + if (other.integerSet != null) + return false; + } else if (!integerSet.equals(other.integerSet)) + return false; + return true; + } + + protected List getGenericList() { + return genericList; + } + + protected void setGenericArrayList(List genericList) { + this.genericList = genericList; + } + + protected Set getIntegerSet() { + return integerSet; + } + + protected void setIntegerSet(Set integerSet) { + this.integerSet = integerSet; + } +} diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java similarity index 100% rename from eclipse/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java rename to core-java/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java similarity index 96% rename from eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java rename to core-java/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java index 315ef41a12..1e1423f0b3 100644 --- a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java +++ b/core-java/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java @@ -11,13 +11,11 @@ public class Rectangle extends Shape { @Override public double area() { - // A = w * l return width * length; } @Override public double perimeter() { - // P = 2(w + l) return 2 * (width + length); } diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Shape.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/Shape.java similarity index 100% rename from eclipse/src/main/java/org/baeldung/equalshashcode/entities/Shape.java rename to core-java/src/main/java/org/baeldung/equalshashcode/entities/Shape.java diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Square.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/Square.java similarity index 100% rename from eclipse/src/main/java/org/baeldung/equalshashcode/entities/Square.java rename to core-java/src/main/java/org/baeldung/equalshashcode/entities/Square.java diff --git a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java b/core-java/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java similarity index 90% rename from eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java rename to core-java/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java index 09123e988b..75d96e5989 100644 --- a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java +++ b/core-java/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java @@ -22,11 +22,10 @@ public class ComplexClassTest { strArrayListD.add("pqr"); ComplexClass dObject = new ComplexClass(strArrayListD, new HashSet(45, 67)); - // equals() Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); - // hashCode() + Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); - // non-equal objects are not equals() and have different hashCode() + Assert.assertFalse(aObject.equals(dObject)); Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); } diff --git a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java b/core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java similarity index 84% rename from eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java rename to core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java index feb04d65ff..16f25ae021 100644 --- a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java +++ b/core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java @@ -12,11 +12,10 @@ public class PrimitiveClassTest { PrimitiveClass bObject = new PrimitiveClass(false, 2); PrimitiveClass dObject = new PrimitiveClass(true, 2); - // equals() Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); - // hashCode() + Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); - // non-equal objects are not equals() and have different hashCode() + Assert.assertFalse(aObject.equals(dObject)); Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); } diff --git a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java b/core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java similarity index 84% rename from eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java rename to core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java index 53ca199405..52d024a696 100644 --- a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java +++ b/core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java @@ -15,11 +15,10 @@ public class SquareClassTest { Square dObject = new Square(20, Color.BLUE); - // equals() Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); - // hashCode() + Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); - // non-equal objects are not equals() and have different hashCode() + Assert.assertFalse(aObject.equals(dObject)); Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); } diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java deleted file mode 100644 index 3f7723facd..0000000000 --- a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.baeldung.equalshashcode.entities; - -import java.util.ArrayList; -import java.util.HashSet; - -public class ComplexClass { - - private ArrayList genericArrayList; - private HashSet integerHashSet; - - public ComplexClass(ArrayList genericArrayList, HashSet integerHashSet) { - super(); - this.genericArrayList = genericArrayList; - this.integerHashSet = integerHashSet; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((genericArrayList == null) ? 0 : genericArrayList.hashCode()); - result = prime * result + ((integerHashSet == null) ? 0 : integerHashSet.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof ComplexClass)) - return false; - ComplexClass other = (ComplexClass) obj; - if (genericArrayList == null) { - if (other.genericArrayList != null) - return false; - } else if (!genericArrayList.equals(other.genericArrayList)) - return false; - if (integerHashSet == null) { - if (other.integerHashSet != null) - return false; - } else if (!integerHashSet.equals(other.integerHashSet)) - return false; - return true; - } - - protected ArrayList getGenericArrayList() { - return genericArrayList; - } - - protected void setGenericArrayList(ArrayList genericArrayList) { - this.genericArrayList = genericArrayList; - } - - protected HashSet getIntegerHashSet() { - return integerHashSet; - } - - protected void setIntegerHashSet(HashSet integerHashSet) { - this.integerHashSet = integerHashSet; - } -} From e1d32226f370c190ce2ef3b379373a2cb79d8535 Mon Sep 17 00:00:00 2001 From: Catalin Date: Tue, 27 Sep 2016 12:24:47 +0300 Subject: [PATCH 13/17] Updated broken link --- spring-data-neo4j/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-data-neo4j/README.md b/spring-data-neo4j/README.md index e62c69f8b9..0f13d9dbc9 100644 --- a/spring-data-neo4j/README.md +++ b/spring-data-neo4j/README.md @@ -1,7 +1,7 @@ ## Spring Data Neo4j ### Relevant Articles: -- [Introduction to Spring Data Neo4j](http://www.baeldung.com/spring-data-neo4j-tutorial) +- [Introduction to Spring Data Neo4j](http://www.baeldung.com/spring-data-neo4j-intro) ### Build the Project with Tests Running ``` From 719d4e5aa1e1830c8d7403bdf64721ce376ac485 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Tue, 27 Sep 2016 22:13:11 +0530 Subject: [PATCH 14/17] Converting date/time retrieval methods to JUnits --- .../com/baeldung/util/GetCurrentDate.java | 20 -------- .../com/baeldung/util/GetCurrentTime.java | 20 -------- .../baeldung/util/GetCurrentTimestamp.java | 14 ------ .../baeldung/util/CurrentDateTimeTest.java | 47 +++++++++++++++++++ 4 files changed, 47 insertions(+), 54 deletions(-) delete mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java delete mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java delete mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java create mode 100644 core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java deleted file mode 100644 index 7bbf8b48bb..0000000000 --- a/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.util; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneId; - -public class GetCurrentDate { - - public static void main(String args[]) { - - LocalDate localDate = LocalDate.now(); - System.out.println("Today's date is: " + localDate); - - localDate = LocalDate.now(ZoneId.of("GMT+02:30")); - System.out.println("Current date in GMT +02:30 timezone: " + localDate); - - LocalDateTime localDateTime = LocalDateTime.now(); - System.out.println("Today's date is: " + localDateTime.toLocalDate()); - } -} diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java deleted file mode 100644 index 39934c94bf..0000000000 --- a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.util; - -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; - -public class GetCurrentTime { - - public static void main(String args[]) { - - LocalTime localTime = LocalTime.now(); - System.out.println("Current time is: " + localTime); - - localTime = LocalTime.now(ZoneId.of("GMT+02:30")); - System.out.println("Current time in GMT +02:30 timezone: " + localTime); - - LocalDateTime localDateTime = LocalDateTime.now(); - System.out.println("Current time is: " + localDateTime.toLocalTime()); - } -} diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java deleted file mode 100644 index 2387a721cf..0000000000 --- a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.util; - -import java.time.Instant; - -public class GetCurrentTimestamp { - - public static void main(String args[]) { - - Instant instant = Instant.now(); - System.out.println("Current timestamp is: " + instant.toEpochMilli()); - - System.out.println("Number of seconds: " + instant.getEpochSecond()); - } -} diff --git a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java new file mode 100644 index 0000000000..06d9394a5e --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java @@ -0,0 +1,47 @@ +package com.baeldung.util; + +import static org.junit.Assert.assertEquals; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.temporal.ChronoField; +import java.util.Calendar; +import java.util.GregorianCalendar; + +import org.junit.Test; + +public class CurrentDateTimeTest { + + @Test + public void shouldReturnCurrentDate() { + + final LocalDate now = LocalDate.now(); + final Calendar calendar = GregorianCalendar.getInstance(); + + assertEquals("10-10-2010".length(), now.toString().length()); + assertEquals(calendar.get(Calendar.DATE), now.get(ChronoField.DAY_OF_MONTH)); + assertEquals(calendar.get(Calendar.MONTH), now.get(ChronoField.MONTH_OF_YEAR) - 1); + assertEquals(calendar.get(Calendar.YEAR), now.get(ChronoField.YEAR)); + } + + @Test + public void shouldReturnCurrentTime() { + + final LocalTime now = LocalTime.now(); + final Calendar calendar = GregorianCalendar.getInstance(); + + assertEquals(calendar.get(Calendar.HOUR_OF_DAY), now.get(ChronoField.HOUR_OF_DAY)); + assertEquals(calendar.get(Calendar.MINUTE), now.get(ChronoField.MINUTE_OF_HOUR)); + assertEquals(calendar.get(Calendar.SECOND), now.get(ChronoField.SECOND_OF_MINUTE)); + } + + @Test + public void shouldReturnCurrentTimestamp() { + + final Instant now = Instant.now(); + final Calendar calendar = GregorianCalendar.getInstance(); + + assertEquals(calendar.getTimeInMillis() / 1000, now.getEpochSecond()); + } +} From 4db012d57ba6b0f0309100ac8662af7bcad7a773 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Wed, 28 Sep 2016 09:51:08 +0600 Subject: [PATCH 15/17] Update README.md --- core-java-8/README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/core-java-8/README.md b/core-java-8/README.md index e6bac2a4c9..c130e6bd41 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -11,4 +11,14 @@ - [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips) - [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator) - [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams) -- [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) \ No newline at end of file +- [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) +- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) +- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) +- [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) +- [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture) +- [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava) +- [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors) +- [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams) +- [New Features in Java 8](http://www.baeldung.com/java-8-new-features) +- [Introduction to Java 8 Streams](http://www.baeldung.com/java-8-streams-introduction) +- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join) From d1bd04d2dce4bbf8b67d0f3f0ab4b0ac62c2c85a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 28 Sep 2016 16:22:31 +0200 Subject: [PATCH 16/17] Add example --- .../baeldung/java9/Java9OptionalsStreamTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java b/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java index 102ceda18f..b0684a94f8 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java @@ -42,6 +42,19 @@ public class Java9OptionalsStreamTest { assertEquals("bar", filteredList.get(1)); } + @Test + public void filterOutPresentOptionalsWithFlatMap2() { + assertEquals(4, listOfOptionals.size()); + + List filteredList = listOfOptionals.stream() + .flatMap(o -> o.map(Stream::of).orElseGet(Stream::empty)) + .collect(Collectors.toList()); + assertEquals(2, filteredList.size()); + + assertEquals("foo", filteredList.get(0)); + assertEquals("bar", filteredList.get(1)); + } + @Test public void filterOutPresentOptionalsWithJava9() { assertEquals(4, listOfOptionals.size()); From ea85fa99eea7bd0611022e5c85f06f360969daf1 Mon Sep 17 00:00:00 2001 From: Sergey Petunin Date: Wed, 28 Sep 2016 19:24:03 +0500 Subject: [PATCH 17/17] Added samples for annotation processing article. (#705) * Added annotation processing examples. Fixed core-java8 build on OS X * Moved projects to separate submodule --- annotations/annotation-processing/pom.xml | 50 +++++++ .../processor/BuilderProcessor.java | 132 ++++++++++++++++++ .../annotation/processor/BuilderProperty.java | 8 ++ annotations/annotation-user/pom.xml | 51 +++++++ .../java/com/baeldung/annotation/Person.java | 29 ++++ .../annotation/PersonBuilderTest.java | 22 +++ annotations/pom.xml | 20 +++ core-java-8/pom.xml | 6 +- core-java-8/src/test/resources/.gitignore | 13 -- core-java-8/src/test/resources/test.txt | 1 + pom.xml | 1 + 11 files changed, 319 insertions(+), 14 deletions(-) create mode 100644 annotations/annotation-processing/pom.xml create mode 100644 annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProcessor.java create mode 100644 annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProperty.java create mode 100644 annotations/annotation-user/pom.xml create mode 100644 annotations/annotation-user/src/main/java/com/baeldung/annotation/Person.java create mode 100644 annotations/annotation-user/src/test/java/com/baeldung/annotation/PersonBuilderTest.java create mode 100644 annotations/pom.xml delete mode 100644 core-java-8/src/test/resources/.gitignore create mode 100644 core-java-8/src/test/resources/test.txt diff --git a/annotations/annotation-processing/pom.xml b/annotations/annotation-processing/pom.xml new file mode 100644 index 0000000000..6d07394b87 --- /dev/null +++ b/annotations/annotation-processing/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + + com.baeldung + 1.0.0-SNAPSHOT + annotations + ../ + + + annotation-processing + + + 1.0-rc2 + 3.5.1 + + + + + + com.google.auto.service + auto-service + ${auto-service.version} + provided + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + + + + \ No newline at end of file diff --git a/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProcessor.java b/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProcessor.java new file mode 100644 index 0000000000..0883e108e7 --- /dev/null +++ b/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProcessor.java @@ -0,0 +1,132 @@ +package com.baeldung.annotation.processor; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.processing.*; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.lang.model.type.ExecutableType; +import javax.tools.Diagnostic; +import javax.tools.JavaFileObject; + +import com.google.auto.service.AutoService; + +@SupportedAnnotationTypes("com.baeldung.annotation.processor.BuilderProperty") +@SupportedSourceVersion(SourceVersion.RELEASE_8) +@AutoService(Processor.class) +public class BuilderProcessor extends AbstractProcessor { + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + for (TypeElement annotation : annotations) { + + Set annotatedElements = roundEnv.getElementsAnnotatedWith(annotation); + + Map> annotatedMethods = annotatedElements.stream() + .collect(Collectors.partitioningBy(element -> + ((ExecutableType) element.asType()).getParameterTypes().size() == 1 + && element.getSimpleName().toString().startsWith("set"))); + + List setters = annotatedMethods.get(true); + List otherMethods = annotatedMethods.get(false); + + otherMethods.forEach(element -> + processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, + "@BuilderProperty must be applied to a setXxx method with a single argument", element)); + + if (setters.isEmpty()) { + continue; + } + + String className = ((TypeElement) setters.get(0).getEnclosingElement()).getQualifiedName().toString(); + + Map setterMap = setters.stream().collect(Collectors.toMap( + setter -> setter.getSimpleName().toString(), + setter -> ((ExecutableType) setter.asType()) + .getParameterTypes().get(0).toString() + )); + + try { + writeBuilderFile(className, setterMap); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + return true; + } + + private void writeBuilderFile(String className, Map setterMap) throws IOException { + + String packageName = null; + int lastDot = className.lastIndexOf('.'); + if (lastDot > 0) { + packageName = className.substring(0, lastDot); + } + + String simpleClassName = className.substring(lastDot + 1); + String builderClassName = className + "Builder"; + String builderSimpleClassName = builderClassName.substring(lastDot + 1); + + JavaFileObject builderFile = processingEnv.getFiler().createSourceFile(builderClassName); + try (PrintWriter out = new PrintWriter(builderFile.openWriter())) { + + if (packageName != null) { + out.print("package "); + out.print(packageName); + out.println(";"); + out.println(); + } + + out.print("public class "); + out.print(builderSimpleClassName); + out.println(" {"); + out.println(); + + out.print(" private "); + out.print(simpleClassName); + out.print(" object = new "); + out.print(simpleClassName); + out.println("();"); + out.println(); + + out.print(" public "); + out.print(simpleClassName); + out.println(" build() {"); + out.println(" return object;"); + out.println(" }"); + out.println(); + + setterMap.entrySet().forEach(setter -> { + String methodName = setter.getKey(); + String argumentType = setter.getValue(); + + out.print(" public "); + out.print(builderSimpleClassName); + out.print(" "); + out.print(methodName); + + out.print("("); + + out.print(argumentType); + out.println(" value) {"); + out.print(" object."); + out.print(methodName); + out.println("(value);"); + out.println(" return this;"); + out.println(" }"); + out.println(); + }); + + out.println("}"); + + } + } + +} diff --git a/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProperty.java b/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProperty.java new file mode 100644 index 0000000000..84fcc73850 --- /dev/null +++ b/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProperty.java @@ -0,0 +1,8 @@ +package com.baeldung.annotation.processor; + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.SOURCE) +public @interface BuilderProperty { +} diff --git a/annotations/annotation-user/pom.xml b/annotations/annotation-user/pom.xml new file mode 100644 index 0000000000..f76f691f93 --- /dev/null +++ b/annotations/annotation-user/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + + + annotations + com.baeldung + 1.0.0-SNAPSHOT + ../ + + + annotation-user + + + + + com.baeldung + annotation-processing + ${project.parent.version} + + + + junit + junit + 4.12 + test + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + + + \ No newline at end of file diff --git a/annotations/annotation-user/src/main/java/com/baeldung/annotation/Person.java b/annotations/annotation-user/src/main/java/com/baeldung/annotation/Person.java new file mode 100644 index 0000000000..23787ba4f4 --- /dev/null +++ b/annotations/annotation-user/src/main/java/com/baeldung/annotation/Person.java @@ -0,0 +1,29 @@ +package com.baeldung.annotation; + +import com.baeldung.annotation.processor.BuilderProperty; + +public class Person { + + private int age; + + private String name; + + public int getAge() { + return age; + } + + @BuilderProperty + public void setAge(int age) { + this.age = age; + } + + public String getName() { + return name; + } + + @BuilderProperty + public void setName(String name) { + this.name = name; + } + +} diff --git a/annotations/annotation-user/src/test/java/com/baeldung/annotation/PersonBuilderTest.java b/annotations/annotation-user/src/test/java/com/baeldung/annotation/PersonBuilderTest.java new file mode 100644 index 0000000000..72f9ac8bc7 --- /dev/null +++ b/annotations/annotation-user/src/test/java/com/baeldung/annotation/PersonBuilderTest.java @@ -0,0 +1,22 @@ +package com.baeldung.annotation; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class PersonBuilderTest { + + @Test + public void whenBuildPersonWithBuilder_thenObjectHasPropertyValues() { + + Person person = new PersonBuilder() + .setAge(25) + .setName("John") + .build(); + + assertEquals(25, person.getAge()); + assertEquals("John", person.getName()); + + } + +} diff --git a/annotations/pom.xml b/annotations/pom.xml new file mode 100644 index 0000000000..f691674cf1 --- /dev/null +++ b/annotations/pom.xml @@ -0,0 +1,20 @@ + + + + parent-modules + com.baeldung + 1.0.0-SNAPSHOT + + 4.0.0 + + annotations + pom + + + annotation-processing + annotation-user + + + \ No newline at end of file diff --git a/core-java-8/pom.xml b/core-java-8/pom.xml index 63df0e1b95..566eb4e43a 100644 --- a/core-java-8/pom.xml +++ b/core-java-8/pom.xml @@ -1,9 +1,10 @@ 4.0.0 + com.baeldung + 1.0.0-SNAPSHOT core-java8 - 0.1-SNAPSHOT core-java8 @@ -111,6 +112,9 @@ + + UTF-8 + 1.7.13 1.0.13 diff --git a/core-java-8/src/test/resources/.gitignore b/core-java-8/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/core-java-8/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/core-java-8/src/test/resources/test.txt b/core-java-8/src/test/resources/test.txt new file mode 100644 index 0000000000..652d70630f --- /dev/null +++ b/core-java-8/src/test/resources/test.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse facilisis neque sed turpis venenatis, non dignissim risus volutpat. \ No newline at end of file diff --git a/pom.xml b/pom.xml index 33162777b7..37ed734567 100644 --- a/pom.xml +++ b/pom.xml @@ -132,6 +132,7 @@ wicket xstream java-cassandra + annotations