From 7c0af736049d5c57a6fe4c6b04ce45a67dab47de Mon Sep 17 00:00:00 2001 From: i032048 Date: Thu, 28 Jul 2016 18:03:48 +0300 Subject: [PATCH 01/41] 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 d575b735ef1fff5cd9183f81d7b2ffce8a684725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Mon, 8 Aug 2016 06:54:49 +0200 Subject: [PATCH 02/41] Removed context loading tests. --- .../config/client/ConfigClientLiveTest.java | 17 ----------------- .../config/server/ConfigServerListTest.java | 18 ------------------ 2 files changed, 35 deletions(-) delete mode 100644 spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java delete mode 100644 spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java diff --git a/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java b/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java deleted file mode 100644 index 058fd45f35..0000000000 --- a/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.spring.cloud.config.client; - -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = ConfigClient.class) -@WebAppConfiguration -public class ConfigClientLiveTest { - @Test - public void contextLoads() { - } -} diff --git a/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java b/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java deleted file mode 100644 index 306c120e43..0000000000 --- a/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.spring.cloud.config.server; - -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = ConfigServer.class) -@WebAppConfiguration -@Ignore -public class ConfigServerListTest { - @Test - public void contextLoads() { - } -} From dfa48a82f838dff79b7758af71783b75761acc09 Mon Sep 17 00:00:00 2001 From: Christian Raedel Date: Fri, 26 Aug 2016 20:58:06 +0200 Subject: [PATCH 03/41] BAEL-90/BAEL-219: Better interaction between both tutorials. --- spring-cloud-config/README.md | 27 ++++++ spring-cloud-config/client/pom.xml | 79 ----------------- spring-cloud-config/docker/Dockerfile.client | 2 +- spring-cloud-config/docker/Dockerfile.server | 2 +- spring-cloud-config/docker/files/.gitignore | 2 + .../{ => files}/config-client-entrypoint.sh | 0 spring-cloud-config/pom.xml | 58 ++++++++----- spring-cloud-config/server/pom.xml | 82 ------------------ .../spring-cloud-config-client/pom.xml | 40 +++++++++ .../cloud/config/client/ConfigClient.java | 0 .../src/main/resources/bootstrap.properties | 2 +- .../spring-cloud-config-server/pom.xml | 44 ++++++++++ .../cloud/config/server/ConfigServer.java | 0 .../src/main/resources/application.properties | 5 +- .../src/main/resources/config-server.jks | Bin 15 files changed, 153 insertions(+), 190 deletions(-) create mode 100644 spring-cloud-config/README.md delete mode 100644 spring-cloud-config/client/pom.xml create mode 100644 spring-cloud-config/docker/files/.gitignore rename spring-cloud-config/docker/{ => files}/config-client-entrypoint.sh (100%) delete mode 100644 spring-cloud-config/server/pom.xml create mode 100644 spring-cloud-config/spring-cloud-config-client/pom.xml rename spring-cloud-config/{client => spring-cloud-config-client}/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java (100%) rename spring-cloud-config/{client => spring-cloud-config-client}/src/main/resources/bootstrap.properties (72%) create mode 100644 spring-cloud-config/spring-cloud-config-server/pom.xml rename spring-cloud-config/{server => spring-cloud-config-server}/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java (100%) rename spring-cloud-config/{server => spring-cloud-config-server}/src/main/resources/application.properties (68%) rename spring-cloud-config/{server => spring-cloud-config-server}/src/main/resources/config-server.jks (100%) diff --git a/spring-cloud-config/README.md b/spring-cloud-config/README.md new file mode 100644 index 0000000000..b8ebb2bfe9 --- /dev/null +++ b/spring-cloud-config/README.md @@ -0,0 +1,27 @@ +## Spring Cloud Config ## + +To get this example working, you have to initialize a new *Git* repository in +the ```client-config``` directory first *and* you have to set the environment variable +```CONFIG_REPO``` to an absolute path of that directory. + +``` +$> cd client-config +$> git init +$> git add . +$> git commit -m 'Initial commit' +$> export CONFIG_REPO=$(pwd) +``` + +Then you're able to run the examples with ```mvn install spring-boot:run```. + +### Docker ### + +To get the *Docker* examples working, you have to repackage the ```spring-cloud-config-server``` +and ```spring-cloud-config-client``` modules first: + +``` +$> mvn install spring-boot:repackage +``` + +Don't forget to download the *Java JCE* package from +(Oracle)[http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html]. diff --git a/spring-cloud-config/client/pom.xml b/spring-cloud-config/client/pom.xml deleted file mode 100644 index 0ef4b35581..0000000000 --- a/spring-cloud-config/client/pom.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 0.0.1-SNAPSHOT - - client - jar - - client - Demo project for Spring Cloud Config Client - - - UTF-8 - UTF-8 - 1.8 - - - - - org.springframework.cloud - spring-cloud-starter-config - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.BUILD-SNAPSHOT - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - diff --git a/spring-cloud-config/docker/Dockerfile.client b/spring-cloud-config/docker/Dockerfile.client index 5fbc0b98c0..0f9293bd22 100644 --- a/spring-cloud-config/docker/Dockerfile.client +++ b/spring-cloud-config/docker/Dockerfile.client @@ -1,6 +1,6 @@ FROM alpine-java:base MAINTAINER baeldung.com RUN apk --no-cache add netcat-openbsd -COPY files/config-client.jar /opt/spring-cloud/lib/ +COPY files/spring-cloud-config-client-1.0.0-SNAPSHOT.jar /opt/spring-cloud/lib/config-client.jar COPY files/config-client-entrypoint.sh /opt/spring-cloud/bin/ RUN chmod 755 /opt/spring-cloud/bin/config-client-entrypoint.sh diff --git a/spring-cloud-config/docker/Dockerfile.server b/spring-cloud-config/docker/Dockerfile.server index 4f7bd751e8..90d7e2a7cf 100644 --- a/spring-cloud-config/docker/Dockerfile.server +++ b/spring-cloud-config/docker/Dockerfile.server @@ -1,6 +1,6 @@ FROM alpine-java:base MAINTAINER baeldung.com -COPY files/config-server.jar /opt/spring-cloud/lib/ +COPY files/spring-cloud-config-server-1.0.0-SNAPSHOT.jar /opt/spring-cloud/lib/config-server.jar ENV SPRING_APPLICATION_JSON='{"spring": {"cloud": {"config": {"server": \ {"git": {"uri": "/var/lib/spring-cloud/config-repo", "clone-on-start": true}}}}}}' ENTRYPOINT ["/usr/bin/java"] diff --git a/spring-cloud-config/docker/files/.gitignore b/spring-cloud-config/docker/files/.gitignore new file mode 100644 index 0000000000..28ffcbffdb --- /dev/null +++ b/spring-cloud-config/docker/files/.gitignore @@ -0,0 +1,2 @@ +/UnlimitedJCEPolicyJDK8 +/*.jar diff --git a/spring-cloud-config/docker/config-client-entrypoint.sh b/spring-cloud-config/docker/files/config-client-entrypoint.sh similarity index 100% rename from spring-cloud-config/docker/config-client-entrypoint.sh rename to spring-cloud-config/docker/files/config-client-entrypoint.sh diff --git a/spring-cloud-config/pom.xml b/spring-cloud-config/pom.xml index 8e0e4b8706..3b1b59b037 100644 --- a/spring-cloud-config/pom.xml +++ b/spring-cloud-config/pom.xml @@ -5,38 +5,48 @@ com.baeldung.spring.cloud spring-cloud-config - 0.0.1-SNAPSHOT pom - server - client + spring-cloud-config-server + spring-cloud-config-client - org.springframework.boot - spring-boot-starter-parent - 1.3.5.RELEASE + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + .. + + + + org.springframework.boot + spring-boot-parent + 1.4.0.RELEASE + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR4 + pom + import + + + + - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - **/*LiveTest.java - - - - - + + + + org.springframework.boot + spring-boot-maven-plugin + 1.4.0.RELEASE + + + - - - 1.3.5.RELEASE - 2.19.1 - diff --git a/spring-cloud-config/server/pom.xml b/spring-cloud-config/server/pom.xml deleted file mode 100644 index c3f68854bb..0000000000 --- a/spring-cloud-config/server/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 0.0.1-SNAPSHOT - - server - - server - Demo project for Spring Cloud Config Server - - - UTF-8 - UTF-8 - 1.8 - - - - - org.springframework.cloud - spring-cloud-config-server - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.BUILD-SNAPSHOT - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - diff --git a/spring-cloud-config/spring-cloud-config-client/pom.xml b/spring-cloud-config/spring-cloud-config-client/pom.xml new file mode 100644 index 0000000000..968489bce2 --- /dev/null +++ b/spring-cloud-config/spring-cloud-config-client/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 1.0.0-SNAPSHOT + + spring-cloud-config-client + jar + + spring-cloud-config-client + + + + org.springframework.cloud + spring-cloud-starter-config + 1.1.3.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.4.0.RELEASE + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + ../docker/files + + + + + diff --git a/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java b/spring-cloud-config/spring-cloud-config-client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java similarity index 100% rename from spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java rename to spring-cloud-config/spring-cloud-config-client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java diff --git a/spring-cloud-config/client/src/main/resources/bootstrap.properties b/spring-cloud-config/spring-cloud-config-client/src/main/resources/bootstrap.properties similarity index 72% rename from spring-cloud-config/client/src/main/resources/bootstrap.properties rename to spring-cloud-config/spring-cloud-config-client/src/main/resources/bootstrap.properties index 18982a93b5..6c350bffcd 100644 --- a/spring-cloud-config/client/src/main/resources/bootstrap.properties +++ b/spring-cloud-config/spring-cloud-config-client/src/main/resources/bootstrap.properties @@ -1,5 +1,5 @@ spring.application.name=config-client spring.profiles.active=development -spring.cloud.config.uri=http://localhost:8888 +spring.cloud.config.uri=http://localhost:${PORT:8888} spring.cloud.config.username=root spring.cloud.config.password=s3cr3t diff --git a/spring-cloud-config/spring-cloud-config-server/pom.xml b/spring-cloud-config/spring-cloud-config-server/pom.xml new file mode 100644 index 0000000000..f2b8b69a6a --- /dev/null +++ b/spring-cloud-config/spring-cloud-config-server/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 1.0.0-SNAPSHOT + + spring-cloud-config-server + + spring-cloud-config-server + + + + org.springframework.cloud + spring-cloud-config-server + 1.1.3.RELEASE + + + org.springframework.boot + spring-boot-starter-security + 1.4.0.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.4.0.RELEASE + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + ../docker/files + + + + + diff --git a/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java b/spring-cloud-config/spring-cloud-config-server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java similarity index 100% rename from spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java rename to spring-cloud-config/spring-cloud-config-server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java diff --git a/spring-cloud-config/server/src/main/resources/application.properties b/spring-cloud-config/spring-cloud-config-server/src/main/resources/application.properties similarity index 68% rename from spring-cloud-config/server/src/main/resources/application.properties rename to spring-cloud-config/spring-cloud-config-server/src/main/resources/application.properties index 2131f3b249..c4f57f0a82 100644 --- a/spring-cloud-config/server/src/main/resources/application.properties +++ b/spring-cloud-config/spring-cloud-config-server/src/main/resources/application.properties @@ -1,6 +1,7 @@ -server.port=8888 -spring.cloud.config.server.git.uri=https://github.com/eugenp/tutorials/tree/master/spring-cloud-config/client-config +server.port=${PORT:8888} +spring.cloud.config.server.git.uri=${CONFIG_REPO} spring.cloud.config.server.git.clone-on-start=false +spring.cloud.config.fail-fast=true security.user.name=root security.user.password=s3cr3t encrypt.key-store.location=classpath:/config-server.jks diff --git a/spring-cloud-config/server/src/main/resources/config-server.jks b/spring-cloud-config/spring-cloud-config-server/src/main/resources/config-server.jks similarity index 100% rename from spring-cloud-config/server/src/main/resources/config-server.jks rename to spring-cloud-config/spring-cloud-config-server/src/main/resources/config-server.jks From 9cf6ea22537a8e5c1f1bd0de8bb5b045d8d45e25 Mon Sep 17 00:00:00 2001 From: antonk Date: Sat, 27 Aug 2016 10:42:13 +0300 Subject: [PATCH 04/41] 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 4e6d70d2cdec3c5aa62a9dc218008038b9575180 Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Tue, 30 Aug 2016 22:04:37 +0530 Subject: [PATCH 05/41] BAEL 298 | Intro to Selenium with JUnit / TestNg --- selenium-junit-testng/pom.xml | 36 +++++++++++++++++++ .../testng/TestSeleniumWithTestNG.java | 34 ++++++++++++++++++ .../selenium/junit/TestSeleniumWithJUnit.java | 34 ++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 selenium-junit-testng/pom.xml create mode 100644 selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java create mode 100644 selenium-junit-testng/test/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java diff --git a/selenium-junit-testng/pom.xml b/selenium-junit-testng/pom.xml new file mode 100644 index 0000000000..c6bd2b042c --- /dev/null +++ b/selenium-junit-testng/pom.xml @@ -0,0 +1,36 @@ + + 4.0.0 + com.baeldung + selenium-junit-testng + 0.0.1-SNAPSHOT + + src + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + + + + org.seleniumhq.selenium + selenium-java + 2.53.1 + + + junit + junit + 4.8.1 + + + org.testng + testng + 6.9.10 + + + \ No newline at end of file diff --git a/selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java b/selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java new file mode 100644 index 0000000000..dcdfafc4f1 --- /dev/null +++ b/selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java @@ -0,0 +1,34 @@ +package com.baeldun.selenium.testng; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.firefox.FirefoxDriver; +import org.testng.annotations.AfterSuite; +import org.testng.annotations.BeforeSuite; +import org.testng.annotations.Test; + +public class TestSeleniumWithTestNG { + + private WebDriver webDriver; + private final String url = "http://www.baeldung.com/"; + private final String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; + + @BeforeSuite + public void setUp() { + webDriver = new FirefoxDriver(); + webDriver.get(url); + } + + @AfterSuite + public void tearDown() { + webDriver.close(); + } + + @Test + public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { + String actualTitleReturned = webDriver.getTitle(); + assertNotNull(actualTitleReturned); + assertEquals(expectedTitle, actualTitleReturned); + } +} diff --git a/selenium-junit-testng/test/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java b/selenium-junit-testng/test/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java new file mode 100644 index 0000000000..a7b36c4e4e --- /dev/null +++ b/selenium-junit-testng/test/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java @@ -0,0 +1,34 @@ +package com.baeldung.selenium.junit; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.firefox.FirefoxDriver; + +public class TestSeleniumWithJUnit { + + private WebDriver webDriver; + private final String url = "http://www.baeldung.com/"; + private final String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; + + @Before + public void setUp() { + webDriver = new FirefoxDriver(); + webDriver.get(url); + } + + @After + public void tearDown() { + webDriver.close(); + } + + @Test + public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { + String actualTitleReturned = webDriver.getTitle(); + assertNotNull(actualTitleReturned); + assertEquals(expectedTitle, actualTitleReturned); + } +} From 9c5404ead8e1799ee5da18892fc07b3ae134f5f6 Mon Sep 17 00:00:00 2001 From: Christian Raedel Date: Wed, 31 Aug 2016 03:18:02 +0200 Subject: [PATCH 06/41] BAEL-305: Runnable demo application --- .../front-controller-pattern/pom.xml | 41 +++++++++++++++++ .../controller/FrontControllerServlet.java | 45 +++++++++++++++++++ .../controller/commands/BookCommand.java | 22 +++++++++ .../controller/commands/FrontCommand.java | 32 +++++++++++++ .../controller/commands/UnknownCommand.java | 11 +++++ .../patterns/front/controller/data/Book.java | 40 +++++++++++++++++ .../front/controller/data/Bookshelf.java | 32 +++++++++++++ .../src/main/webapp/WEB-INF/jboss-web.xml | 6 +++ .../main/webapp/WEB-INF/jsp/book-found.jsp | 4 ++ .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 2 + .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 1 + .../src/main/webapp/WEB-INF/web.xml | 11 +++++ enterprise-patterns/pom.xml | 35 +++++++++++++++ 13 files changed, 282 insertions(+) create mode 100644 enterprise-patterns/front-controller-pattern/pom.xml create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml create mode 100644 enterprise-patterns/pom.xml diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml new file mode 100644 index 0000000000..eefd52a52d --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + front-controller-pattern + war + + + enterprise-patterns-parent + com.baeldung.enterprise.patterns + 1.0.0-SNAPSHOT + + + + + javax.servlet + servlet-api + 2.5 + provided + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + ${env.DEPLOYMENTS} + + + + + diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java new file mode 100644 index 0000000000..4dfc12c050 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java @@ -0,0 +1,45 @@ +package com.baeldung.enterprise.patterns.front.controller; + +import com.baeldung.enterprise.patterns.front.controller.commands.FrontCommand; +import com.baeldung.enterprise.patterns.front.controller.commands.UnknownCommand; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class FrontControllerServlet extends HttpServlet { + @Override + protected void doGet( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + FrontCommand command = getCommand(request); + command.init(getServletContext(), request, response); + command.process(); + } + + private FrontCommand getCommand(HttpServletRequest request) { + try { + return (FrontCommand) getCommandClass(request) + .asSubclass(FrontCommand.class) + .newInstance(); + } catch (Exception e) { + throw new RuntimeException("Failed to get command!", e); + } + } + + private Class getCommandClass(HttpServletRequest request) { + try { + return Class.forName( + String.format( + "com.baeldung.enterprise.patterns.front.controller.commands.%sCommand", + request.getParameter("command") + ) + ); + } catch (ClassNotFoundException e) { + return UnknownCommand.class; + } + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java new file mode 100644 index 0000000000..e858cd98a9 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java @@ -0,0 +1,22 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import com.baeldung.enterprise.patterns.front.controller.data.Book; +import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class BookCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + Book book = Bookshelf.getInstance() + .findByTitle(request.getParameter("title")); + if (book != null) { + request.setAttribute("book", book); + forward("book-found"); + } else { + request.setAttribute("books", Bookshelf.getInstance().getBooks()); + forward("book-notfound"); + } + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java new file mode 100644 index 0000000000..12a008faeb --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java @@ -0,0 +1,32 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public abstract class FrontCommand { + protected ServletContext context; + protected HttpServletRequest request; + protected HttpServletResponse response; + + public void init( + ServletContext servletContext, + HttpServletRequest servletRequest, + HttpServletResponse servletResponse + ) { + this.context = servletContext; + this.request = servletRequest; + this.response = servletResponse; + } + + public abstract void process() throws ServletException, IOException; + + protected void forward(String target) throws ServletException, IOException { + target = String.format("/WEB-INF/jsp/%s.jsp", target); + RequestDispatcher dispatcher = context.getRequestDispatcher(target); + dispatcher.forward(request, response); + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java new file mode 100644 index 0000000000..90103c8f42 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java @@ -0,0 +1,11 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class UnknownCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + forward("unknown"); + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java new file mode 100644 index 0000000000..634e05c3a0 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java @@ -0,0 +1,40 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +public class Book { + private String author; + private String title; + private Double price; + + public Book() { + } + + public Book(String author, String title, Double price) { + this.author = author; + this.title = title; + this.price = price; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java new file mode 100644 index 0000000000..142435e2e3 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -0,0 +1,32 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +import java.util.ArrayList; +import java.util.List; + +public class Bookshelf { + private static Bookshelf INSTANCE = new Bookshelf(); + private List books = new ArrayList<>(); + + public static Bookshelf getInstance() { + if (INSTANCE.books.size() == 0) { + INSTANCE.init(); + } + return INSTANCE; + } + + private void init() { + books.add(new Book("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); + books.add(new Book("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); + } + + public Book findByTitle(String title) { + return books.stream() + .filter(book -> book.getTitle().equalsIgnoreCase(title)) + .findFirst() + .orElse(null); + } + + public List getBooks() { + return books; + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000000..db2d804135 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,6 @@ + + + + /front-controller/ + diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp new file mode 100644 index 0000000000..8fa82ee816 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -0,0 +1,4 @@ +

Our Bookshelf contains this title:

+

${book.getTitle()}

+

Author: ${book.getAuthor()}

+ diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp new file mode 100644 index 0000000000..e8ce67ac96 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -0,0 +1,2 @@ +

Our Bookshelf doesn't contains this title:

+

${param.get("title")}

diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp new file mode 100644 index 0000000000..d348f757d9 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -0,0 +1 @@ +

Sorry, this command is not known!

diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..372ee42800 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,11 @@ + + + + front-controller + com.baeldung.enterprise.patterns.front.controller.FrontControllerServlet + + + front-controller + / + + diff --git a/enterprise-patterns/pom.xml b/enterprise-patterns/pom.xml new file mode 100644 index 0000000000..2fba12547f --- /dev/null +++ b/enterprise-patterns/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.baeldung.enterprise.patterns + enterprise-patterns-parent + pom + + front-controller-pattern + + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + From ed03a59711764bbf5b90fc4761e19c1b2f84b605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Wed, 31 Aug 2016 03:38:46 +0200 Subject: [PATCH 07/41] BAEL-305: Some minor changes --- .../{BookCommand.java => SearchCommand.java} | 2 +- .../front/controller/data/Bookshelf.java | 2 +- .../src/main/webapp/WEB-INF/jsp/book-found.jsp | 16 ++++++++++++---- .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 12 ++++++++++-- .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 10 +++++++++- 5 files changed, 33 insertions(+), 9 deletions(-) rename enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/{BookCommand.java => SearchCommand.java} (93%) diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java similarity index 93% rename from enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java rename to enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java index e858cd98a9..4d9e5f7b79 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java @@ -6,7 +6,7 @@ import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; import javax.servlet.ServletException; import java.io.IOException; -public class BookCommand extends FrontCommand { +public class SearchCommand extends FrontCommand { @Override public void process() throws ServletException, IOException { Book book = Bookshelf.getInstance() diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java index 142435e2e3..ad9758bf76 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -21,7 +21,7 @@ public class Bookshelf { public Book findByTitle(String title) { return books.stream() - .filter(book -> book.getTitle().equalsIgnoreCase(title)) + .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase())) .findFirst() .orElse(null); } diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp index 8fa82ee816..42e08b4a46 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -1,4 +1,12 @@ -

Our Bookshelf contains this title:

-

${book.getTitle()}

-

Author: ${book.getAuthor()}

- + + + + Bookshelf: Title found + + +

Our Bookshelf contains this title:

+

${book.getTitle()}

+

Author: ${book.getAuthor()}

+ + + diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp index e8ce67ac96..2f8ac01755 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -1,2 +1,10 @@ -

Our Bookshelf doesn't contains this title:

-

${param.get("title")}

+ + + + Bookshelf: Title not found + + +

Our Bookshelf doesn't contains this title:

+

${param.get("title")}

+ + diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp index d348f757d9..b52b2de8d5 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -1 +1,9 @@ -

Sorry, this command is not known!

+ + + + Bookshelf: Command unknown + + +

Sorry, this command is not known!

+ + From ffe5ce630c2d1e991dde66c3be3b9759af6ad464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Thu, 1 Sep 2016 14:09:51 +0200 Subject: [PATCH 08/41] BAEL-305: Included embedded Jetty. Use more recent version of servlet api. --- .../front-controller-pattern/pom.xml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index eefd52a52d..dbcd4f1b1d 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -16,8 +16,8 @@ javax.servlet - servlet-api - 2.5 + javax.servlet-api + 3.1.0 provided @@ -29,11 +29,13 @@ maven-compiler-plugin - org.apache.maven.plugins - maven-war-plugin - 3.0.0 + org.eclipse.jetty + jetty-maven-plugin + 9.4.0.M1 - ${env.DEPLOYMENTS} + + /front-controller + From 525c93059c32f92da575177d0ec6c79d4b77f6fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Thu, 1 Sep 2016 21:41:37 +0200 Subject: [PATCH 09/41] BAEL-305: Refactored Book and Bookshelf as interfaces and implemented them. --- .../front-controller-pattern/pom.xml | 2 +- .../controller/commands/SearchCommand.java | 5 +- .../patterns/front/controller/data/Book.java | 39 +++------------- .../front/controller/data/BookImpl.java | 46 +++++++++++++++++++ .../front/controller/data/Bookshelf.java | 31 +++---------- .../front/controller/data/BookshelfImpl.java | 24 ++++++++++ 6 files changed, 87 insertions(+), 60 deletions(-) create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index dbcd4f1b1d..5f9152ad42 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -17,7 +17,7 @@ javax.servlet javax.servlet-api - 3.1.0 + 4.0.0-b01 provided diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java index 4d9e5f7b79..0c5bd64bbc 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java @@ -1,7 +1,7 @@ package com.baeldung.enterprise.patterns.front.controller.commands; import com.baeldung.enterprise.patterns.front.controller.data.Book; -import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; +import com.baeldung.enterprise.patterns.front.controller.data.BookshelfImpl; import javax.servlet.ServletException; import java.io.IOException; @@ -9,13 +9,12 @@ import java.io.IOException; public class SearchCommand extends FrontCommand { @Override public void process() throws ServletException, IOException { - Book book = Bookshelf.getInstance() + Book book = new BookshelfImpl().getInstance() .findByTitle(request.getParameter("title")); if (book != null) { request.setAttribute("book", book); forward("book-found"); } else { - request.setAttribute("books", Bookshelf.getInstance().getBooks()); forward("book-notfound"); } } diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java index 634e05c3a0..abadcc0d76 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java @@ -1,40 +1,15 @@ package com.baeldung.enterprise.patterns.front.controller.data; -public class Book { - private String author; - private String title; - private Double price; +public interface Book { + String getAuthor(); - public Book() { - } + void setAuthor(String author); - public Book(String author, String title, Double price) { - this.author = author; - this.title = title; - this.price = price; - } + String getTitle(); - public String getAuthor() { - return author; - } + void setTitle(String title); - public void setAuthor(String author) { - this.author = author; - } + Double getPrice(); - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public Double getPrice() { - return price; - } - - public void setPrice(Double price) { - this.price = price; - } + void setPrice(Double price); } diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java new file mode 100644 index 0000000000..b270bc7985 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java @@ -0,0 +1,46 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +public class BookImpl implements Book { + private String author; + private String title; + private Double price; + + public BookImpl() { + } + + public BookImpl(String author, String title, Double price) { + this.author = author; + this.title = title; + this.price = price; + } + + @Override + public String getAuthor() { + return author; + } + + @Override + public void setAuthor(String author) { + this.author = author; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public void setTitle(String title) { + this.title = title; + } + + @Override + public Double getPrice() { + return price; + } + + @Override + public void setPrice(Double price) { + this.price = price; + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java index ad9758bf76..1e30452d95 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -1,32 +1,15 @@ package com.baeldung.enterprise.patterns.front.controller.data; -import java.util.ArrayList; -import java.util.List; +public interface Bookshelf { -public class Bookshelf { - private static Bookshelf INSTANCE = new Bookshelf(); - private List books = new ArrayList<>(); - - public static Bookshelf getInstance() { - if (INSTANCE.books.size() == 0) { - INSTANCE.init(); - } - return INSTANCE; + default void init() { + add(new BookImpl("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); + add(new BookImpl("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); } - private void init() { - books.add(new Book("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); - books.add(new Book("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); - } + Bookshelf getInstance(); - public Book findByTitle(String title) { - return books.stream() - .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase())) - .findFirst() - .orElse(null); - } + boolean add(E book); - public List getBooks() { - return books; - } + Book findByTitle(String title); } diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java new file mode 100644 index 0000000000..3862418857 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java @@ -0,0 +1,24 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +import java.util.ArrayList; + +public class BookshelfImpl extends ArrayList implements Bookshelf { + private static Bookshelf INSTANCE; + + @Override + public Bookshelf getInstance() { + if (INSTANCE == null) { + INSTANCE = new BookshelfImpl(); + INSTANCE.init(); + } + return INSTANCE; + } + + @Override + public Book findByTitle(String title) { + return this.stream() + .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase())) + .findFirst() + .orElse(null); + } +} From 3f204ebd59d754a66b018e16dd6c291a6a4b3009 Mon Sep 17 00:00:00 2001 From: anton-k Date: Fri, 2 Sep 2016 01:43:49 +0300 Subject: [PATCH 10/41] 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 11/41] 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 12/41] 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 747c3169ee026fd68012eacdcc3378895331face Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sat, 3 Sep 2016 19:40:09 +0200 Subject: [PATCH 13/41] BAEL-305: Updated servlet spec to 3.1. --- enterprise-patterns/front-controller-pattern/pom.xml | 2 +- .../src/main/webapp/WEB-INF/web.xml | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index 5f9152ad42..dbcd4f1b1d 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -17,7 +17,7 @@ javax.servlet javax.servlet-api - 4.0.0-b01 + 3.1.0 provided diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml index 372ee42800..77113db09b 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml @@ -1,5 +1,9 @@ - + front-controller com.baeldung.enterprise.patterns.front.controller.FrontControllerServlet From eb6f0214ca6a08fbab2631e169667e7b6208be99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sat, 3 Sep 2016 20:13:55 +0200 Subject: [PATCH 14/41] BAEL-305: Simplified FrontControllerServlet. Removed unused JBoss deployment descriptor. --- .../controller/FrontControllerServlet.java | 19 ++++++------------- .../src/main/webapp/WEB-INF/jboss-web.xml | 6 ------ 2 files changed, 6 insertions(+), 19 deletions(-) delete mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java index 4dfc12c050..a8962f5108 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java @@ -22,24 +22,17 @@ public class FrontControllerServlet extends HttpServlet { private FrontCommand getCommand(HttpServletRequest request) { try { - return (FrontCommand) getCommandClass(request) - .asSubclass(FrontCommand.class) - .newInstance(); - } catch (Exception e) { - throw new RuntimeException("Failed to get command!", e); - } - } - - private Class getCommandClass(HttpServletRequest request) { - try { - return Class.forName( + Class type = Class.forName( String.format( "com.baeldung.enterprise.patterns.front.controller.commands.%sCommand", request.getParameter("command") ) ); - } catch (ClassNotFoundException e) { - return UnknownCommand.class; + return (FrontCommand) type + .asSubclass(FrontCommand.class) + .newInstance(); + } catch (Exception e) { + return new UnknownCommand(); } } } diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml deleted file mode 100644 index db2d804135..0000000000 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - /front-controller/ - From 6b7b8be33309ecc101fcff0dfae4a4f7412c8059 Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Tue, 6 Sep 2016 08:56:29 +0300 Subject: [PATCH 15/41] 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 2310cf87173f27d1a6e97735b7f8c012614f9ad3 Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Tue, 30 Aug 2016 22:04:37 +0530 Subject: [PATCH 16/41] BAEL 298 | Intro to Selenium with JUnit / TestNg --- selenium-junit-testng/pom.xml | 36 +++++++++++++++++++ .../baeldung/selenium/SeleniumExample.java | 29 +++++++++++++++ .../selenium/junit/TestSeleniumWithJUnit.java | 30 ++++++++++++++++ .../testng/TestSeleniumWithTestNG.java | 30 ++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 selenium-junit-testng/pom.xml create mode 100644 selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java create mode 100644 selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java create mode 100644 selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java diff --git a/selenium-junit-testng/pom.xml b/selenium-junit-testng/pom.xml new file mode 100644 index 0000000000..c6bd2b042c --- /dev/null +++ b/selenium-junit-testng/pom.xml @@ -0,0 +1,36 @@ + + 4.0.0 + com.baeldung + selenium-junit-testng + 0.0.1-SNAPSHOT + + src + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + + + + org.seleniumhq.selenium + selenium-java + 2.53.1 + + + junit + junit + 4.8.1 + + + org.testng + testng + 6.9.10 + + + \ No newline at end of file diff --git a/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java b/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java new file mode 100644 index 0000000000..6020b6bd2c --- /dev/null +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java @@ -0,0 +1,29 @@ +package main.java.com.baeldung.selenium; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.firefox.FirefoxDriver; + +public class SeleniumExample { + + private WebDriver webDriver; + private final String url = "http://www.baeldung.com/"; + private final String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; + + public SeleniumExample() { + webDriver = new FirefoxDriver(); + webDriver.get(url); + } + + public void closeWindow() { + webDriver.close(); + } + + public String getActualTitle() { + return webDriver.getTitle(); + } + + public String getExpectedTitle() { + return expectedTitle; + } + +} diff --git a/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java b/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java new file mode 100644 index 0000000000..371f730eb9 --- /dev/null +++ b/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java @@ -0,0 +1,30 @@ +package test.java.com.baeldung.selenium.junit; + +import static org.testng.Assert.assertEquals; +import main.java.com.baeldung.selenium.SeleniumExample; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class TestSeleniumWithJUnit { + + private SeleniumExample seleniumExample; + + @Before + public void setUp() { + seleniumExample = new SeleniumExample(); + } + + @After + public void tearDown() { + seleniumExample.closeWindow(); + } + + @Test + public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { + String expectedTitle = seleniumExample.getExpectedTitle(); + String actualTitle = seleniumExample.getActualTitle(); + assertEquals(actualTitle, expectedTitle); + } +} diff --git a/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java b/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java new file mode 100644 index 0000000000..ec10f9ca82 --- /dev/null +++ b/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java @@ -0,0 +1,30 @@ +package test.java.com.baeldung.selenium.testng; + +import static org.testng.Assert.assertEquals; +import main.java.com.baeldung.selenium.SeleniumExample; + +import org.testng.annotations.AfterSuite; +import org.testng.annotations.BeforeSuite; +import org.testng.annotations.Test; + +public class TestSeleniumWithTestNG { + + private SeleniumExample seleniumExample; + + @BeforeSuite + public void setUp() { + seleniumExample = new SeleniumExample(); + } + + @AfterSuite + public void tearDown() { + seleniumExample.closeWindow(); + } + + @Test + public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { + String expectedTitle = seleniumExample.getExpectedTitle(); + String actualTitle = seleniumExample.getActualTitle(); + assertEquals(actualTitle, expectedTitle); + } +} From bc8fd9a260249a5ac38244c503f97835c233a3ca Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Tue, 20 Sep 2016 16:00:07 +0200 Subject: [PATCH 17/41] BAEL-53 - moved to java8 foreach --- elasticsearch/pom.xml | 72 +++++++++++-------- .../elasticsearch/ElasticSearchUnitTests.java | 11 ++- pom.xml | 1 + 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/elasticsearch/pom.xml b/elasticsearch/pom.xml index c12f258b98..1c580529e6 100644 --- a/elasticsearch/pom.xml +++ b/elasticsearch/pom.xml @@ -1,35 +1,49 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.baeldung - elasticsearch - 0.0.1-SNAPSHOT - jar + com.baeldung + elasticsearch + 0.0.1-SNAPSHOT + jar - elasticsearch - http://maven.apache.org + elasticsearch + http://maven.apache.org - - UTF-8 - + + UTF-8 + - - - org.elasticsearch - elasticsearch - 2.3.5 - - - com.alibaba - fastjson - 1.2.13 - - - junit - junit - 4.12 - test - - + + + org.elasticsearch + elasticsearch + 2.3.5 + + + com.alibaba + fastjson + 1.2.13 + + + junit + junit + 4.12 + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + diff --git a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java index a5f103c005..db304ee78d 100644 --- a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java +++ b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java @@ -5,6 +5,7 @@ import static org.junit.Assert.*; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; @@ -102,13 +103,9 @@ public class ElasticSearchUnitTests { try { response2.getHits(); response3.getHits(); - SearchHit[] searchHits = response.getHits().getHits(); - List results = new ArrayList(); - for (SearchHit hit : searchHits) { - String sourceAsString = hit.getSourceAsString(); - Person person = JSON.parseObject(sourceAsString, Person.class); - results.add(person); - } + List searchHits = Arrays.asList(response.getHits().getHits()); + final List results = new ArrayList(); + searchHits.forEach(hit -> results.add(JSON.parseObject(hit.getSourceAsString(), Person.class))); } catch (Exception e) { isExecutedSuccessfully = false; } diff --git a/pom.xml b/pom.xml index 8115c1e902..a1d3e05302 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,7 @@ dozer dependency-injection deltaspike + elasticsearch enterprise-patterns feign-client From f1cfc706df085310b50fcd3df1f9690e34d8257c Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Tue, 20 Sep 2016 17:59:43 +0300 Subject: [PATCH 18/41] 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 19/41] 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 19798c4bd600d05178a58391dd9aa4e6c84d78e8 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 22 Sep 2016 18:16:22 +0200 Subject: [PATCH 20/41] Refactor ArrayListTest --- .../java/collections/ArrayListTest.java | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java index 9cafa179ab..30b0111555 100644 --- a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java +++ b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java @@ -18,18 +18,18 @@ public class ArrayListTest { @Before public void setUp() { - List xs = LongStream.range(0, 16) + List list = LongStream.range(0, 16) .boxed() .map(Long::toHexString) .collect(toCollection(ArrayList::new)); - stringsToSearch = new ArrayList<>(xs); - stringsToSearch.addAll(xs); + stringsToSearch = new ArrayList<>(list); + stringsToSearch.addAll(list); } @Test public void givenNewArrayList_whenCheckCapacity_thenDefaultValue() { - List xs = new ArrayList<>(); - assertTrue(xs.isEmpty()); + List list = new ArrayList<>(); + assertTrue(list.isEmpty()); } @Test @@ -37,29 +37,29 @@ public class ArrayListTest { Collection numbers = IntStream.range(0, 10).boxed().collect(toSet()); - List xs = new ArrayList<>(numbers); - assertEquals(10, xs.size()); - assertTrue(numbers.containsAll(xs)); + List list = new ArrayList<>(numbers); + assertEquals(10, list.size()); + assertTrue(numbers.containsAll(list)); } @Test public void givenElement_whenAddToArrayList_thenIsAdded() { - List xs = new ArrayList<>(); + List list = new ArrayList<>(); - xs.add(1L); - xs.add(2L); - xs.add(1, 3L); + list.add(1L); + list.add(2L); + list.add(1, 3L); - assertThat(Arrays.asList(1L, 3L, 2L), equalTo(xs)); + assertThat(Arrays.asList(1L, 3L, 2L), equalTo(list)); } @Test public void givenCollection_whenAddToArrayList_thenIsAdded() { - List xs = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); + List list = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); LongStream.range(4, 10).boxed() - .collect(collectingAndThen(toCollection(ArrayList::new), ys -> xs.addAll(0, ys))); + .collect(collectingAndThen(toCollection(ArrayList::new), ys -> list.addAll(0, ys))); - assertThat(Arrays.asList(4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo(xs)); + assertThat(Arrays.asList(4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo(list)); } @Test @@ -106,27 +106,27 @@ public class ArrayListTest { @Test public void givenIndex_whenRemove_thenCorrectElementRemoved() { - List xs = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); - Collections.reverse(xs); + List list = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); + Collections.reverse(list); - xs.remove(0); - assertThat(xs.get(0), equalTo(8)); + list.remove(0); + assertThat(list.get(0), equalTo(8)); - xs.remove(Integer.valueOf(0)); - assertFalse(xs.contains(0)); + list.remove(Integer.valueOf(0)); + assertFalse(list.contains(0)); } @Test public void givenListIterator_whenReverseTraversal_thenRetrieveElementsInOppositeOrder() { - List xs = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); - ListIterator it = xs.listIterator(xs.size()); - List result = new ArrayList<>(xs.size()); + List list = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); + ListIterator it = list.listIterator(list.size()); + List result = new ArrayList<>(list.size()); while (it.hasPrevious()) { result.add(it.previous()); } - Collections.reverse(xs); - assertThat(result, equalTo(xs)); + Collections.reverse(list); + assertThat(result, equalTo(list)); } @Test From 6243fa31e13199d016981225d3ecb8d9b88a882e Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 22 Sep 2016 19:42:47 +0200 Subject: [PATCH 21/41] Move Elasticsearch module into Spring-Data-Elasticsearch --- elasticsearch/README.md | 6 - elasticsearch/pom.xml | 49 --------- pom.xml | 1 - spring-data-elasticsearch/pom.xml | 11 ++ .../com/baeldung/elasticsearch/Person.java | 104 +++++++++--------- .../elasticsearch/ElasticSearchUnitTests.java | 0 6 files changed, 63 insertions(+), 108 deletions(-) delete mode 100644 elasticsearch/README.md delete mode 100644 elasticsearch/pom.xml rename {elasticsearch => spring-data-elasticsearch}/src/main/java/com/baeldung/elasticsearch/Person.java (94%) rename {elasticsearch => spring-data-elasticsearch}/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java (100%) diff --git a/elasticsearch/README.md b/elasticsearch/README.md deleted file mode 100644 index e21070dbee..0000000000 --- a/elasticsearch/README.md +++ /dev/null @@ -1,6 +0,0 @@ -========= - -## ElasticSearch - -### Relevant Articles: -- [A Guide to ElasticSearch](http://www.baeldung.com/????????) diff --git a/elasticsearch/pom.xml b/elasticsearch/pom.xml deleted file mode 100644 index 1c580529e6..0000000000 --- a/elasticsearch/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - 4.0.0 - - com.baeldung - elasticsearch - 0.0.1-SNAPSHOT - jar - - elasticsearch - http://maven.apache.org - - - UTF-8 - - - - - org.elasticsearch - elasticsearch - 2.3.5 - - - com.alibaba - fastjson - 1.2.13 - - - junit - junit - 4.12 - test - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - - diff --git a/pom.xml b/pom.xml index a1d3e05302..8115c1e902 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,6 @@ dozer dependency-injection deltaspike - elasticsearch enterprise-patterns feign-client diff --git a/spring-data-elasticsearch/pom.xml b/spring-data-elasticsearch/pom.xml index 3a6e330564..084695c2f3 100644 --- a/spring-data-elasticsearch/pom.xml +++ b/spring-data-elasticsearch/pom.xml @@ -69,6 +69,17 @@ log4j-over-slf4j ${org.slf4j.version} + + + org.elasticsearch + elasticsearch + 2.3.5 + + + com.alibaba + fastjson + 1.2.13 + diff --git a/elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java b/spring-data-elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java similarity index 94% rename from elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java rename to spring-data-elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java index 8f0b19a186..b8ad59e2e2 100644 --- a/elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java @@ -1,52 +1,52 @@ -package com.baeldung.elasticsearch; - -import java.util.Date; - -public class Person { - - private int age; - - private String fullName; - - private Date dateOfBirth; - - public Person() { - - } - - public Person(int age, String fullName, Date dateOfBirth) { - super(); - this.age = age; - this.fullName = fullName; - this.dateOfBirth = dateOfBirth; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getFullName() { - return fullName; - } - - public void setFullName(String fullName) { - this.fullName = fullName; - } - - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - - @Override - public String toString() { - return "Person [age=" + age + ", fullName=" + fullName + ", dateOfBirth=" + dateOfBirth + "]"; - } -} +package com.baeldung.elasticsearch; + +import java.util.Date; + +public class Person { + + private int age; + + private String fullName; + + private Date dateOfBirth; + + public Person() { + + } + + public Person(int age, String fullName, Date dateOfBirth) { + super(); + this.age = age; + this.fullName = fullName; + this.dateOfBirth = dateOfBirth; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + @Override + public String toString() { + return "Person [age=" + age + ", fullName=" + fullName + ", dateOfBirth=" + dateOfBirth + "]"; + } +} diff --git a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java b/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java similarity index 100% rename from elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java rename to spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java From eaa04c6c7f84d4aca94ea0699bc4619aab7be37a Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 23 Sep 2016 12:26:48 +0200 Subject: [PATCH 22/41] add live profile --- spring-rest/pom.xml | 58 ++++++++++++++++++- .../web/test/RequestMappingLiveTest.java | 2 +- ... SpringHttpMessageConvertersLiveTest.java} | 4 +- 3 files changed, 58 insertions(+), 6 deletions(-) rename spring-rest/src/test/java/org/baeldung/web/test/{SpringHttpMessageConvertersIntegrationTestsCase.java => SpringHttpMessageConvertersLiveTest.java} (97%) diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 0c0d6219dd..5340f8b437 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -182,7 +182,6 @@ org.apache.maven.plugins maven-compiler-plugin - ${maven-compiler-plugin.version} 1.8 1.8 @@ -192,13 +191,11 @@ org.apache.maven.plugins maven-war-plugin - ${maven-war-plugin.version} org.apache.maven.plugins maven-surefire-plugin - ${maven-surefire-plugin.version} @@ -234,6 +231,61 @@ + + + live + + + + org.codehaus.cargo + cargo-maven2-plugin + + + start-server + pre-integration-test + + start + + + + stop-server + post-integration-test + + stop + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + none + + + **/*LiveTest.java + + + cargo + + + + + + + + + + + diff --git a/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java b/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java index fd349f1e44..3155b5cda9 100644 --- a/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java +++ b/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java @@ -7,7 +7,7 @@ import org.junit.Test; import com.jayway.restassured.RestAssured; public class RequestMappingLiveTest { - private static String BASE_URI = "http://localhost:8080/spring-rest/ex/"; + private static String BASE_URI = "http://localhost:8082/spring-rest/ex/"; @Test public void givenSimplePath_whenGetFoos_thenOk() { diff --git a/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java b/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersLiveTest.java similarity index 97% rename from spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java rename to spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersLiveTest.java index 1dfe509c09..7f250653ab 100644 --- a/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java +++ b/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersLiveTest.java @@ -21,9 +21,9 @@ import org.springframework.web.client.RestTemplate; /** * Integration Test class. Tests methods hits the server's rest services. */ -public class SpringHttpMessageConvertersIntegrationTestsCase { +public class SpringHttpMessageConvertersLiveTest { - private static String BASE_URI = "http://localhost:8080/spring-rest/"; + private static String BASE_URI = "http://localhost:8082/spring-rest/"; /** * Without specifying Accept Header, uses the default response from the From 043a6bddc8424bcf869500a42c06b52402adfc8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Fri, 23 Sep 2016 14:25:09 +0200 Subject: [PATCH 23/41] Code for Optional stream filtering document (#696) * Add new module for mocks comparison. * Add sources for testing. * Changes on testCase. * Enter some tests for mockito. * More tests for Mockito. * Even more tests. * Add the rest of the mocking libraries. * Javadoc on test. * Test bare bones for EasyMock. * Fist kind of test and setup. * Add tests using EasyMock with a change on LoginService. * Create LoginControllerTest.java * Test setup * [JMockit] No method called test. * [JMockit] Two methods called test. * [JMockit] One method called test. * [JMockit] Exception mock test * [JMockit] Mocked object to pass around test. * [JMockit] Custom matcher test. * [JMockit] Partial mocking test. * [JMockit] Fix with IDE. * Not stubs. Mocks. MOCKS!!! * Remove unnecesary import. * Use correct encoding. Was having problems with buildings. * Remove failing module. * Create new module mocks and move mock-comparisons there. * Add jmockit module. * Add model class. * Add collaborator class. * Add performer class. * Add performer test. * Fix * Add interface for tests. * Test for any. * Test for with. * Test for null. * Test for times. * Test for arg that. * Test for result and returns. * Test for delegate. * Add verifications to any tests. * Add verifications to with test. * Add verification examples to methods using null. * Add verifications to methods using times. * Formatting. * Compress tests and fix one test. * Adding new article to readme. * [BAEL-178] Add collaborator for advanced article. * [BAEL-178] Add link to readme. * [BAEL-178] Add test for mockUp. * [BAEL-178] Add test for invoke method. * [BAEL-178] Add constructors and tests for mockup for constructors. * [BAEL-178] Add private fields and more test for deencapsulation. * [BAEL-178] Add inner class and test for instantiating inner classes. * [BAEL-178] Multimocks. * [BAEL-178] Add test for expectation reusing. * [BAEL-178] Move test class to tests folders. * Add postgresql dependency. * Add test and config with properties. * [BAEL-114] Add new project for JPA with JNDI. * [BAEL-114] Config without xml. * [BAEL-114] Bring part of Foo, FooServie and FooDao. * [BAEL-114] Show all foos. * [BAEL-114] Readme. * [BAEL-114] Undo changes on main jpa project. * [BAEL-114] Remove unnecesary dependencies. * [BAEL-114] Add tomcat config. * [BAEL-114] Fixes. * Add tests for Optional streams. * Add Java 9 version of the test. * Rename and move to new core-java-9 module. --- .../java9/Java9OptionalsStreamTest.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java 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 new file mode 100644 index 0000000000..336e803985 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java @@ -0,0 +1,63 @@ +package com.baeldung.java8; + +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.Before; +import org.junit.Test; + +public class Java9OptionalsStreamTest { + + private List> listOfOptionals; + + @Before + public void populateStream() { + listOfOptionals = Arrays.asList(Optional.empty(), Optional.of("foo"), Optional.empty(), Optional.of("bar")); + } + + @Test + public void filterOutPresentOptionalsWithFilter() { + assertEquals(4, listOfOptionals.size()); + //@format:off + List filteredList = listOfOptionals.stream() + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toList()); + //@format:on + assertEquals(2, filteredList.size()); + assertEquals("foo", filteredList.get(0)); + assertEquals("bar", filteredList.get(1)); + } + + @Test + public void filterOutPresentOptionalsWithFlatMap() { + assertEquals(4, listOfOptionals.size()); + //@format:off + List filteredList = listOfOptionals.stream() + .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty()) + .collect(Collectors.toList()); + //@format:on + assertEquals(2, filteredList.size()); + assertEquals("foo", filteredList.get(0)); + assertEquals("bar", filteredList.get(1)); + } + + @Test + public void filterOutPresentOptionalsWithJava9() { + assertEquals(4, listOfOptionals.size()); + //@format:off + List filteredList = listOfOptionals.stream() + .flatMap(Optional::stream) + .collect(Collectors.toList()); + //@format:on + assertEquals(2, filteredList.size()); + assertEquals("foo", filteredList.get(0)); + assertEquals("bar", filteredList.get(1)); + } + +} From b0a1959cf46d7fe515d2d78107d36ff6f3837531 Mon Sep 17 00:00:00 2001 From: maibin Date: Fri, 23 Sep 2016 14:37:53 +0200 Subject: [PATCH 24/41] Spring Security + Thymeleaf (CSRF) (#695) * Expression-Based Access Control PermitAll, hasRole, hasAnyRole etc. I modified classes regards to Security * Added test cases for Spring Security Expressions * Handler Interceptor - logging example * Test for logger interceptor * Removed conflicted part * UserInterceptor (adding user information to model) * Spring Handler Interceptor - session timers * Spring Security CSRF attack protection with Thymeleaf --- .../csrf/CsrfAbstractIntegrationTest.java | 2 + spring-thymeleaf/pom.xml | 130 +++++++++++------- .../thymeleaf/config/InitSecurity.java | 11 ++ .../com/baeldung/thymeleaf/config/WebApp.java | 2 +- .../thymeleaf/config/WebMVCConfig.java | 3 +- .../thymeleaf/config/WebMVCSecurity.java | 50 +++++++ .../main/webapp/WEB-INF/views/csrfAttack.html | 12 ++ .../csrf/CsrfEnabledIntegrationTest.java | 63 +++++++++ 8 files changed, 224 insertions(+), 49 deletions(-) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/InitSecurity.java create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java create mode 100644 spring-thymeleaf/src/main/webapp/WEB-INF/views/csrfAttack.html create mode 100644 spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java diff --git a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java index 1b5f7cd894..13cb92a745 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java @@ -14,6 +14,7 @@ import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.RequestPostProcessor; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.WebApplicationContext; import com.fasterxml.jackson.core.JsonProcessingException; @@ -21,6 +22,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration +@Transactional public class CsrfAbstractIntegrationTest { @Autowired diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 51e26fdfdd..35d8c37176 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -8,24 +8,24 @@ 1.7 - 4.1.8.RELEASE + 4.3.3.RELEASE 3.0.1 - 1.7.12 - 1.1.3 + 1.7.12 + 1.1.3 2.1.4.RELEASE 1.1.0.Final 5.1.2.Final - + 3.5.1 2.6 2.19.1 1.4.18 - + @@ -45,6 +45,17 @@ spring-webmvc ${org.springframework-version} + + + org.springframework.security + spring-security-web + 4.1.3.RELEASE + + + org.springframework.security + spring-security-config + 4.1.3.RELEASE + org.thymeleaf @@ -57,29 +68,29 @@ ${org.thymeleaf-version} - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + javax.servlet @@ -98,6 +109,31 @@ hibernate-validator ${org.hibernate-version} + + + + org.springframework + spring-test + 4.1.3.RELEASE + test + + + + + org.springframework.security + spring-security-test + 4.1.3.RELEASE + test + + + + + junit + junit + 4.12 + test + + @@ -129,25 +165,25 @@ - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - 8082 - - - - + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + jetty8x + embedded + + + + + + 8082 + + + + diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/InitSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/InitSecurity.java new file mode 100644 index 0000000000..956db4a0e5 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/InitSecurity.java @@ -0,0 +1,11 @@ +package com.baeldung.thymeleaf.config; + +import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; + +public class InitSecurity extends AbstractSecurityWebApplicationInitializer { + + public InitSecurity() { + super(WebMVCSecurity.class); + + } +} diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java index 89ad7e601e..c7d5e33cb8 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java @@ -20,7 +20,7 @@ public class WebApp extends AbstractAnnotationConfigDispatcherServletInitializer @Override protected Class[] getServletConfigClasses() { - return new Class[] { WebMVCConfig.class }; + return new Class[] { WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }; } @Override diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java index 51c60247a1..50c9cf06fe 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java @@ -1,6 +1,5 @@ package com.baeldung.thymeleaf.config; -import com.baeldung.thymeleaf.formatter.NameFormatter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -14,6 +13,8 @@ import org.thymeleaf.spring4.SpringTemplateEngine; import org.thymeleaf.spring4.view.ThymeleafViewResolver; import org.thymeleaf.templateresolver.ServletContextTemplateResolver; +import com.baeldung.thymeleaf.formatter.NameFormatter; + @Configuration @EnableWebMvc @ComponentScan({ "com.baeldung.thymeleaf" }) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java new file mode 100644 index 0000000000..4cc1c26403 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java @@ -0,0 +1,50 @@ +package com.baeldung.thymeleaf.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) +public class WebMVCSecurity extends WebSecurityConfigurerAdapter { + + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + public WebMVCSecurity() { + super(); + } + + @Override + protected void configure(final AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication().withUser("user1").password("user1Pass").authorities("ROLE_USER"); + } + + @Override + public void configure(final WebSecurity web) throws Exception { + web.ignoring().antMatchers("/resources/**"); + } + + @Override + protected void configure(final HttpSecurity http) throws Exception { + http + .authorizeRequests() + .anyRequest() + .authenticated() + .and() + .httpBasic() + .and() + ; + } + +} diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/csrfAttack.html b/spring-thymeleaf/src/main/webapp/WEB-INF/views/csrfAttack.html new file mode 100644 index 0000000000..7674caa854 --- /dev/null +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/views/csrfAttack.html @@ -0,0 +1,12 @@ + + + + + + +
+ + +
+ + \ No newline at end of file diff --git a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java new file mode 100644 index 0000000000..bd70881dd8 --- /dev/null +++ b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java @@ -0,0 +1,63 @@ +package org.baeldung.security.csrf; + +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import javax.servlet.Filter; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.RequestPostProcessor; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.baeldung.thymeleaf.config.InitSecurity; +import com.baeldung.thymeleaf.config.WebApp; +import com.baeldung.thymeleaf.config.WebMVCConfig; +import com.baeldung.thymeleaf.config.WebMVCSecurity; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(classes = { WebApp.class, WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }) +public class CsrfEnabledIntegrationTest { + + @Autowired + WebApplicationContext wac; + @Autowired + MockHttpSession session; + + private MockMvc mockMvc; + + @Autowired + private Filter springSecurityFilterChain; + + protected RequestPostProcessor testUser() { + return user("user1").password("user1Pass").roles("USER"); + } + + @Before + public void setup() { + mockMvc = MockMvcBuilders.webAppContextSetup(wac).addFilters(springSecurityFilterChain).build(); + } + + @Test + public void addStudentWithoutCSRF() throws Exception { + mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser())).andExpect(status().isForbidden()); + } + + @Test + public void addStudentWithCSRF() throws Exception { + mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser()).with(csrf())).andExpect(status().isOk()); + } + +} From 53cb5767313450551c9fd95937394ce44d9045f8 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 23 Sep 2016 19:59:35 +0200 Subject: [PATCH 25/41] exclude live test --- spring-rest/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 5340f8b437..54a8b08cc6 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -198,7 +198,7 @@ maven-surefire-plugin - + **/*LiveTest.java From 3adfc4faaa9a7a5411ab351487f12b590ea96a45 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 23 Sep 2016 21:40:28 +0200 Subject: [PATCH 26/41] minor fix --- spring-rest/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 54a8b08cc6..18cb1dc72a 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -213,7 +213,7 @@ true - jetty8x + tomcat8x embedded @@ -318,7 +318,7 @@ 3.5.1 2.6 2.19.1 - 1.4.18 + 1.6.0 From 03ebc0255644c181da7bd56525185ea59f41d04f Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sat, 24 Sep 2016 11:33:47 +0200 Subject: [PATCH 27/41] Refactor Stream> example --- .../java9/Java9OptionalsStreamTest.java | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) 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 336e803985..102ceda18f 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 @@ -13,36 +13,31 @@ import org.junit.Test; public class Java9OptionalsStreamTest { - private List> listOfOptionals; + private static List> listOfOptionals = Arrays.asList(Optional.empty(), Optional.of("foo"), Optional.empty(), Optional.of("bar")); - @Before - public void populateStream() { - listOfOptionals = Arrays.asList(Optional.empty(), Optional.of("foo"), Optional.empty(), Optional.of("bar")); - } - @Test public void filterOutPresentOptionalsWithFilter() { assertEquals(4, listOfOptionals.size()); - //@format:off + List filteredList = listOfOptionals.stream() - .filter(Optional::isPresent) - .map(Optional::get) - .collect(Collectors.toList()); - //@format:on + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toList()); + assertEquals(2, filteredList.size()); assertEquals("foo", filteredList.get(0)); assertEquals("bar", filteredList.get(1)); } - + @Test public void filterOutPresentOptionalsWithFlatMap() { assertEquals(4, listOfOptionals.size()); - //@format:off + List filteredList = listOfOptionals.stream() - .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty()) - .collect(Collectors.toList()); - //@format:on + .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty()) + .collect(Collectors.toList()); assertEquals(2, filteredList.size()); + assertEquals("foo", filteredList.get(0)); assertEquals("bar", filteredList.get(1)); } @@ -50,11 +45,11 @@ public class Java9OptionalsStreamTest { @Test public void filterOutPresentOptionalsWithJava9() { assertEquals(4, listOfOptionals.size()); - //@format:off + List filteredList = listOfOptionals.stream() - .flatMap(Optional::stream) - .collect(Collectors.toList()); - //@format:on + .flatMap(Optional::stream) + .collect(Collectors.toList()); + assertEquals(2, filteredList.size()); assertEquals("foo", filteredList.get(0)); assertEquals("bar", filteredList.get(1)); From 7bfa860df9490baef2f70b67f06e230270db5afb Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sat, 24 Sep 2016 11:52:42 +0200 Subject: [PATCH 28/41] BAEL-39 - adding SLF4J examples --- log4j/pom.xml | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/log4j/pom.xml b/log4j/pom.xml index 76c05b36c1..586769aa71 100644 --- a/log4j/pom.xml +++ b/log4j/pom.xml @@ -15,7 +15,13 @@ log4j 1.2.17 - + @@ -28,22 +34,34 @@ log4j-core 2.6 - - + com.lmax disruptor 3.3.4 - + - ch.qos.logback logback-classic 1.1.7 + + From 5a10df3396bd03d895dc0c73f5956edc25a60edd Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sat, 24 Sep 2016 12:01:23 +0200 Subject: [PATCH 29/41] BAEL-39 - adding SLF4J examples --- .../java/com/baeldung/slf4j/Slf4jExample.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java diff --git a/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java b/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java new file mode 100644 index 0000000000..dea5f22a15 --- /dev/null +++ b/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java @@ -0,0 +1,20 @@ +package com.baeldung.slf4j; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * To switch between logging frameworks you need only to uncomment needed framework dependencies in pom.xml + */ +public class SLF4JExample { + private static Logger logger = LoggerFactory.getLogger(SLF4JExample.class); + + public static void main(String[] args) { + logger.debug("Debug log message"); + logger.info("Info log message"); + logger.error("Error log message"); + + String variable = "Hello John"; + logger.debug("Printing variable value {} ", variable); + } +} From 94355ee7b8fabc08fb8fd8b624f335ed9a1579a4 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sat, 24 Sep 2016 13:14:13 +0200 Subject: [PATCH 30/41] BAEL-39 - renaming class --- log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java b/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java index dea5f22a15..6ecc7b887a 100644 --- a/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java +++ b/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java @@ -6,8 +6,8 @@ import org.slf4j.LoggerFactory; /** * To switch between logging frameworks you need only to uncomment needed framework dependencies in pom.xml */ -public class SLF4JExample { - private static Logger logger = LoggerFactory.getLogger(SLF4JExample.class); +public class Slf4jExample { + private static Logger logger = LoggerFactory.getLogger(Slf4jExample.class); public static void main(String[] args) { logger.debug("Debug log message"); From 5b29f1bc8119c2e66e015f32d4f7e762d7edabef Mon Sep 17 00:00:00 2001 From: maibin Date: Sat, 24 Sep 2016 22:34:15 +0200 Subject: [PATCH 31/41] New pull for Thymeleaf (#697) * Expression-Based Access Control PermitAll, hasRole, hasAnyRole etc. I modified classes regards to Security * Added test cases for Spring Security Expressions * Handler Interceptor - logging example * Test for logger interceptor * Removed conflicted part * UserInterceptor (adding user information to model) * Spring Handler Interceptor - session timers * Spring Security CSRF attack protection with Thymeleaf * Fix and(); --- .../main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java index 4cc1c26403..00c42831de 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java @@ -43,7 +43,6 @@ public class WebMVCSecurity extends WebSecurityConfigurerAdapter { .authenticated() .and() .httpBasic() - .and() ; } From 51c438b469859fb4a6f357b3107f46ffcef002a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sun, 25 Sep 2016 11:07:55 +0200 Subject: [PATCH 32/41] BAEL-305: Use release versions as dependencies. --- enterprise-patterns/front-controller-pattern/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index dbcd4f1b1d..5fbe5730cb 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -31,7 +31,7 @@ org.eclipse.jetty jetty-maven-plugin - 9.4.0.M1 + 9.3.11.v20160721 /front-controller From 11292acceb5e3479b216121245ad2f4ce786c571 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sun, 25 Sep 2016 12:24:56 +0200 Subject: [PATCH 33/41] BAEL-657 - FrontController image resize --- .../src/main/resources/front controller.png | Bin 9492 -> 5338 bytes .../src/main/resources/front controller.puml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/enterprise-patterns/front-controller-pattern/src/main/resources/front controller.png b/enterprise-patterns/front-controller-pattern/src/main/resources/front controller.png index bd475bf3f32a2a82cc0d5d31acc3e09344109f1f..af22a38e37c8735a0d2a0a05e4a774edbb2ab706 100644 GIT binary patch literal 5338 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 literal 9492 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 Date: Sun, 25 Sep 2016 12:36:45 +0200 Subject: [PATCH 34/41] BAEL-305 - jetty version upgrade --- enterprise-patterns/front-controller-pattern/pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index d1868b81af..dbcd4f1b1d 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -31,11 +31,7 @@ org.eclipse.jetty jetty-maven-plugin -<<<<<<< HEAD - 9.3.11.v20160721 -======= 9.4.0.M1 ->>>>>>> upstream/master /front-controller From a351667adc59e55e31857dc69e7a4fd23eb9e602 Mon Sep 17 00:00:00 2001 From: eugenp Date: Sun, 25 Sep 2016 15:18:08 +0300 Subject: [PATCH 35/41] minor cleanup work --- spring-thymeleaf/pom.xml | 362 +++++++++--------- .../com/baeldung/thymeleaf/config/WebApp.java | 38 +- .../thymeleaf/config/WebMVCConfig.java | 80 ++-- .../thymeleaf/config/WebMVCSecurity.java | 10 +- .../controller/StudentController.java | 74 ++-- .../com/baeldung/thymeleaf/model/Student.java | 66 ++-- .../csrf/CsrfEnabledIntegrationTest.java | 12 +- 7 files changed, 318 insertions(+), 324 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 35d8c37176..f9493a9992 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -1,189 +1,189 @@ - 4.0.0 - com.baeldung - spring-thymeleaf - 0.1-SNAPSHOT - war - - 1.7 - - 4.3.3.RELEASE - 3.0.1 - - 1.7.12 - 1.1.3 - - 2.1.4.RELEASE - - 1.1.0.Final - 5.1.2.Final + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.baeldung + spring-thymeleaf + 0.1-SNAPSHOT + war + + 1.7 + + 4.3.3.RELEASE + 3.0.1 + + 1.7.12 + 1.1.3 + + 2.1.4.RELEASE + + 1.1.0.Final + 5.1.2.Final - - 3.5.1 - 2.6 - 2.19.1 - 1.4.18 - + + 3.5.1 + 2.6 + 2.19.1 + 1.4.18 + - - - - org.springframework - spring-context - ${org.springframework-version} - - - - commons-logging - commons-logging - - - - - org.springframework - spring-webmvc - ${org.springframework-version} - - - - org.springframework.security - spring-security-web - 4.1.3.RELEASE - - - org.springframework.security - spring-security-config - 4.1.3.RELEASE - - - - org.thymeleaf - thymeleaf - ${org.thymeleaf-version} - - - org.thymeleaf - thymeleaf-spring4 - ${org.thymeleaf-version} - - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - - javax.servlet - javax.servlet-api - ${javax.servlet-version} - provided - - - - javax.validation - validation-api - ${javax.validation-version} - - - org.hibernate - hibernate-validator - ${org.hibernate-version} - - + + + + org.springframework + spring-context + ${org.springframework-version} + + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + ${org.springframework-version} + + + + org.springframework.security + spring-security-web + 4.1.3.RELEASE + + + org.springframework.security + spring-security-config + 4.1.3.RELEASE + + + + org.thymeleaf + thymeleaf + ${org.thymeleaf-version} + + + org.thymeleaf + thymeleaf-spring4 + ${org.thymeleaf-version} + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + + + + javax.servlet + javax.servlet-api + ${javax.servlet-version} + provided + + + + javax.validation + validation-api + ${javax.validation-version} + + + org.hibernate + hibernate-validator + ${org.hibernate-version} + + - - org.springframework - spring-test - 4.1.3.RELEASE - test - + + org.springframework + spring-test + 4.1.3.RELEASE + test + - - - org.springframework.security - spring-security-test - 4.1.3.RELEASE - test - + + + org.springframework.security + spring-security-test + 4.1.3.RELEASE + test + - - - junit - junit - 4.12 - test - + + + junit + junit + 4.12 + test + - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java-version} - ${java-version} - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - false - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - 8082 - - - - - - + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${java-version} + ${java-version} + + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + false + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + jetty8x + embedded + + + + + + 8082 + + + + + + diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java index c7d5e33cb8..3104f45ab5 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java @@ -9,28 +9,28 @@ import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatche */ public class WebApp extends AbstractAnnotationConfigDispatcherServletInitializer { - public WebApp() { - super(); - } + public WebApp() { + super(); + } - @Override - protected Class[] getRootConfigClasses() { - return null; - } + @Override + protected Class[] getRootConfigClasses() { + return null; + } - @Override - protected Class[] getServletConfigClasses() { - return new Class[] { WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }; - } + @Override + protected Class[] getServletConfigClasses() { + return new Class[] { WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }; + } - @Override - protected String[] getServletMappings() { - return new String[] { "/" }; - } + @Override + protected String[] getServletMappings() { + return new String[] { "/" }; + } - @Override - protected void customizeRegistration(final Dynamic registration) { - super.customizeRegistration(registration); - } + @Override + protected void customizeRegistration(final Dynamic registration) { + super.customizeRegistration(registration); + } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java index 50c9cf06fe..cdea671c84 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java @@ -24,51 +24,51 @@ import com.baeldung.thymeleaf.formatter.NameFormatter; */ public class WebMVCConfig extends WebMvcConfigurerAdapter { - @Bean - @Description("Thymeleaf Template Resolver") - public ServletContextTemplateResolver templateResolver() { - ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); - templateResolver.setPrefix("/WEB-INF/views/"); - templateResolver.setSuffix(".html"); - templateResolver.setTemplateMode("HTML5"); + @Bean + @Description("Thymeleaf Template Resolver") + public ServletContextTemplateResolver templateResolver() { + ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); + templateResolver.setPrefix("/WEB-INF/views/"); + templateResolver.setSuffix(".html"); + templateResolver.setTemplateMode("HTML5"); - return templateResolver; - } + return templateResolver; + } - @Bean - @Description("Thymeleaf Template Engine") - public SpringTemplateEngine templateEngine() { - SpringTemplateEngine templateEngine = new SpringTemplateEngine(); - templateEngine.setTemplateResolver(templateResolver()); + @Bean + @Description("Thymeleaf Template Engine") + public SpringTemplateEngine templateEngine() { + SpringTemplateEngine templateEngine = new SpringTemplateEngine(); + templateEngine.setTemplateResolver(templateResolver()); - return templateEngine; - } + return templateEngine; + } - @Bean - @Description("Thymeleaf View Resolver") - public ThymeleafViewResolver viewResolver() { - ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); - viewResolver.setTemplateEngine(templateEngine()); - viewResolver.setOrder(1); - return viewResolver; - } + @Bean + @Description("Thymeleaf View Resolver") + public ThymeleafViewResolver viewResolver() { + ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); + viewResolver.setTemplateEngine(templateEngine()); + viewResolver.setOrder(1); + return viewResolver; + } - @Bean - @Description("Spring Message Resolver") - public ResourceBundleMessageSource messageSource() { - ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); - messageSource.setBasename("messages"); - return messageSource; - } + @Bean + @Description("Spring Message Resolver") + public ResourceBundleMessageSource messageSource() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("messages"); + return messageSource; + } - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/"); - } + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/"); + } - @Override - @Description("Custom Conversion Service") - public void addFormatters(FormatterRegistry registry) { - registry.addFormatter(new NameFormatter()); - } + @Override + @Description("Custom Conversion Service") + public void addFormatters(FormatterRegistry registry) { + registry.addFormatter(new NameFormatter()); + } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java index 00c42831de..46bff38a3f 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java @@ -14,7 +14,7 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur @EnableWebSecurity @EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) public class WebMVCSecurity extends WebSecurityConfigurerAdapter { - + @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { @@ -37,13 +37,7 @@ public class WebMVCSecurity extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { - http - .authorizeRequests() - .anyRequest() - .authenticated() - .and() - .httpBasic() - ; + http.authorizeRequests().anyRequest().authenticated().and().httpBasic(); } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java index 912eb521f4..da34b2d7b0 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java @@ -20,50 +20,50 @@ import org.springframework.web.bind.annotation.RequestMethod; @Controller public class StudentController { - @RequestMapping(value = "/saveStudent", method = RequestMethod.POST) - public String saveStudent(@Valid @ModelAttribute Student student, BindingResult errors, Model model) { - if (!errors.hasErrors()) { - // get mock objects - List students = buildStudents(); - // add current student - students.add(student); - model.addAttribute("students", students); - } - return ((errors.hasErrors()) ? "addStudent" : "listStudents"); - } + @RequestMapping(value = "/saveStudent", method = RequestMethod.POST) + public String saveStudent(@Valid @ModelAttribute Student student, BindingResult errors, Model model) { + if (!errors.hasErrors()) { + // get mock objects + List students = buildStudents(); + // add current student + students.add(student); + model.addAttribute("students", students); + } + return ((errors.hasErrors()) ? "addStudent" : "listStudents"); + } - @RequestMapping(value = "/addStudent", method = RequestMethod.GET) - public String addStudent(Model model) { - model.addAttribute("student", new Student()); - return "addStudent"; - } + @RequestMapping(value = "/addStudent", method = RequestMethod.GET) + public String addStudent(Model model) { + model.addAttribute("student", new Student()); + return "addStudent"; + } - @RequestMapping(value = "/listStudents", method = RequestMethod.GET) - public String listStudent(Model model) { + @RequestMapping(value = "/listStudents", method = RequestMethod.GET) + public String listStudent(Model model) { - model.addAttribute("students", buildStudents()); + model.addAttribute("students", buildStudents()); - return "listStudents"; - } + return "listStudents"; + } - private List buildStudents() { - List students = new ArrayList(); + private List buildStudents() { + List students = new ArrayList(); - Student student1 = new Student(); - student1.setId(1001); - student1.setName("John Smith"); - student1.setGender('M'); - student1.setPercentage(Float.valueOf("80.45")); + Student student1 = new Student(); + student1.setId(1001); + student1.setName("John Smith"); + student1.setGender('M'); + student1.setPercentage(Float.valueOf("80.45")); - students.add(student1); + students.add(student1); - Student student2 = new Student(); - student2.setId(1002); - student2.setName("Jane Williams"); - student2.setGender('F'); - student2.setPercentage(Float.valueOf("60.25")); + Student student2 = new Student(); + student2.setId(1002); + student2.setName("Jane Williams"); + student2.setGender('F'); + student2.setPercentage(Float.valueOf("60.25")); - students.add(student2); - return students; - } + students.add(student2); + return students; + } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Student.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Student.java index bce99f286c..202c04358a 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Student.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Student.java @@ -12,49 +12,49 @@ import javax.validation.constraints.NotNull; */ public class Student implements Serializable { - private static final long serialVersionUID = -8582553475226281591L; + private static final long serialVersionUID = -8582553475226281591L; - @NotNull(message = "Student ID is required.") - @Min(value = 1000, message = "Student ID must be at least 4 digits.") - private Integer id; + @NotNull(message = "Student ID is required.") + @Min(value = 1000, message = "Student ID must be at least 4 digits.") + private Integer id; - @NotNull(message = "Student name is required.") - private String name; + @NotNull(message = "Student name is required.") + private String name; - @NotNull(message = "Student gender is required.") - private Character gender; + @NotNull(message = "Student gender is required.") + private Character gender; - private Float percentage; + private Float percentage; - public Integer getId() { - return id; - } + public Integer getId() { + return id; + } - public void setId(Integer id) { - this.id = id; - } + public void setId(Integer id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public Character getGender() { - return gender; - } + public Character getGender() { + return gender; + } - public void setGender(Character gender) { - this.gender = gender; - } + public void setGender(Character gender) { + this.gender = gender; + } - public Float getPercentage() { - return percentage; - } + public Float getPercentage() { + return percentage; + } - public void setPercentage(Float percentage) { - this.percentage = percentage; - } + public void setPercentage(Float percentage) { + this.percentage = percentage; + } } diff --git a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java index bd70881dd8..46a28c3c74 100644 --- a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java +++ b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java @@ -30,17 +30,17 @@ import com.baeldung.thymeleaf.config.WebMVCSecurity; @WebAppConfiguration @ContextConfiguration(classes = { WebApp.class, WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }) public class CsrfEnabledIntegrationTest { - - @Autowired + + @Autowired WebApplicationContext wac; @Autowired MockHttpSession session; private MockMvc mockMvc; - + @Autowired private Filter springSecurityFilterChain; - + protected RequestPostProcessor testUser() { return user("user1").password("user1Pass").roles("USER"); } @@ -52,12 +52,12 @@ public class CsrfEnabledIntegrationTest { @Test public void addStudentWithoutCSRF() throws Exception { - mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser())).andExpect(status().isForbidden()); + mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser())).andExpect(status().isForbidden()); } @Test public void addStudentWithCSRF() throws Exception { - mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser()).with(csrf())).andExpect(status().isOk()); + mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser()).with(csrf())).andExpect(status().isOk()); } } From 1e6083a13c4649ef463dd20a434f6470c0a3e9f9 Mon Sep 17 00:00:00 2001 From: eugenp Date: Sun, 25 Sep 2016 15:19:09 +0300 Subject: [PATCH 36/41] minor cleanup work --- spring-thymeleaf/pom.xml | 44 +++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index f9493a9992..96508eb15e 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -5,26 +5,6 @@ spring-thymeleaf 0.1-SNAPSHOT war - - 1.7 - - 4.3.3.RELEASE - 3.0.1 - - 1.7.12 - 1.1.3 - - 2.1.4.RELEASE - - 1.1.0.Final - 5.1.2.Final - - - 3.5.1 - 2.6 - 2.19.1 - 1.4.18 - @@ -68,7 +48,6 @@ ${org.thymeleaf-version} - org.slf4j slf4j-api @@ -135,6 +114,7 @@ + @@ -186,4 +166,26 @@ + + + 1.8 + + 4.3.3.RELEASE + 3.0.1 + + 1.7.12 + 1.1.3 + + 2.1.4.RELEASE + + 1.1.0.Final + 5.1.2.Final + + + 3.5.1 + 2.6 + 2.19.1 + 1.4.18 + + From eae09bb13a8ae70aecf237650f3ed82245efeebb Mon Sep 17 00:00:00 2001 From: maibin Date: Sun, 25 Sep 2016 22:45:22 +0200 Subject: [PATCH 37/41] Fixed both Thymeleaf and Interceptors articles (#699) * Expression-Based Access Control PermitAll, hasRole, hasAnyRole etc. I modified classes regards to Security * Added test cases for Spring Security Expressions * Handler Interceptor - logging example * Test for logger interceptor * Removed conflicted part * UserInterceptor (adding user information to model) * Spring Handler Interceptor - session timers * Spring Security CSRF attack protection with Thymeleaf * Fix and(); * Logger update * Changed config for Thymeleaf --- .../interceptor/SessionTimerInterceptor.java | 7 +- spring-thymeleaf/pom.xml | 53 ++++++----- .../thymeleaf/config/WebMVCConfig.java | 93 ++++++++++--------- .../thymeleaf/config/WebMVCSecurity.java | 8 +- 4 files changed, 87 insertions(+), 74 deletions(-) diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java index 8d967ed1ef..f5c1626989 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java @@ -31,9 +31,8 @@ public class SessionTimerInterceptor extends HandlerInterceptorAdapter { request.setAttribute("executionTime", startTime); if (UserInterceptor.isUserLogged()) { session = request.getSession(); - log.info("Who is logged in: " + SecurityContextHolder.getContext().getAuthentication().getName()); - log.info("Time since last request in this session: " - + (System.currentTimeMillis() - request.getSession().getLastAccessedTime()) + " ms"); + log.info("Time since last request in this session: {} ms", + System.currentTimeMillis() - request.getSession().getLastAccessedTime()); if (System.currentTimeMillis() - session.getLastAccessedTime() > MAX_INACTIVE_SESSION_TIME) { log.warn("Logging out, due to inactive session"); SecurityContextHolder.clearContext(); @@ -52,6 +51,6 @@ public class SessionTimerInterceptor extends HandlerInterceptorAdapter { final ModelAndView model) throws Exception { log.info("Post handle method - check execution time of handling"); long startTime = (Long) request.getAttribute("executionTime"); - log.info("Execution time for handling the request was: " + (System.currentTimeMillis() - startTime) + " ms"); + log.info("Execution time for handling the request was: {} ms", System.currentTimeMillis() - startTime); } } diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 96508eb15e..a13f1de4c7 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -1,10 +1,30 @@ - 4.0.0 - com.baeldung - spring-thymeleaf - 0.1-SNAPSHOT - war + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.baeldung + spring-thymeleaf + 0.1-SNAPSHOT + war + + 1.8 + + 4.3.3.RELEASE + 3.0.1 + + 1.7.12 + 1.1.3 + + 3.0.1.RELEASE + + 1.1.0.Final + 5.1.2.Final + + + 3.5.1 + 2.6 + 2.19.1 + 1.4.18 + @@ -167,25 +187,4 @@ - - 1.8 - - 4.3.3.RELEASE - 3.0.1 - - 1.7.12 - 1.1.3 - - 2.1.4.RELEASE - - 1.1.0.Final - 5.1.2.Final - - - 3.5.1 - 2.6 - 2.19.1 - 1.4.18 - - diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java index cdea671c84..547d6deee9 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java @@ -1,17 +1,23 @@ package com.baeldung.thymeleaf.config; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Description; import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.format.FormatterRegistry; +import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.thymeleaf.TemplateEngine; import org.thymeleaf.spring4.SpringTemplateEngine; +import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver; import org.thymeleaf.spring4.view.ThymeleafViewResolver; -import org.thymeleaf.templateresolver.ServletContextTemplateResolver; +import org.thymeleaf.templatemode.TemplateMode; +import org.thymeleaf.templateresolver.ITemplateResolver; import com.baeldung.thymeleaf.formatter.NameFormatter; @@ -22,53 +28,56 @@ import com.baeldung.thymeleaf.formatter.NameFormatter; * Java configuration file that is used for Spring MVC and Thymeleaf * configurations */ -public class WebMVCConfig extends WebMvcConfigurerAdapter { +public class WebMVCConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware { - @Bean - @Description("Thymeleaf Template Resolver") - public ServletContextTemplateResolver templateResolver() { - ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); - templateResolver.setPrefix("/WEB-INF/views/"); - templateResolver.setSuffix(".html"); - templateResolver.setTemplateMode("HTML5"); + private ApplicationContext applicationContext; - return templateResolver; - } + public void setApplicationContext(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } - @Bean - @Description("Thymeleaf Template Engine") - public SpringTemplateEngine templateEngine() { - SpringTemplateEngine templateEngine = new SpringTemplateEngine(); - templateEngine.setTemplateResolver(templateResolver()); + @Bean + public ViewResolver viewResolver() { + ThymeleafViewResolver resolver = new ThymeleafViewResolver(); + resolver.setTemplateEngine(templateEngine()); + resolver.setCharacterEncoding("UTF-8"); + resolver.setOrder(1); + return resolver; + } - return templateEngine; - } + @Bean + public TemplateEngine templateEngine() { + SpringTemplateEngine engine = new SpringTemplateEngine(); + engine.setEnableSpringELCompiler(true); + engine.setTemplateResolver(templateResolver()); + return engine; + } - @Bean - @Description("Thymeleaf View Resolver") - public ThymeleafViewResolver viewResolver() { - ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); - viewResolver.setTemplateEngine(templateEngine()); - viewResolver.setOrder(1); - return viewResolver; - } + private ITemplateResolver templateResolver() { + SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); + resolver.setApplicationContext(applicationContext); + resolver.setPrefix("/WEB-INF/views/"); + resolver.setSuffix(".html"); + resolver.setTemplateMode(TemplateMode.HTML); + return resolver; + } - @Bean - @Description("Spring Message Resolver") - public ResourceBundleMessageSource messageSource() { - ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); - messageSource.setBasename("messages"); - return messageSource; - } + @Bean + @Description("Spring Message Resolver") + public ResourceBundleMessageSource messageSource() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("messages"); + return messageSource; + } - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/"); - } + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/"); + } - @Override - @Description("Custom Conversion Service") - public void addFormatters(FormatterRegistry registry) { - registry.addFormatter(new NameFormatter()); - } + @Override + @Description("Custom Conversion Service") + public void addFormatters(FormatterRegistry registry) { + registry.addFormatter(new NameFormatter()); + } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java index 46bff38a3f..37844a2976 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java @@ -37,7 +37,13 @@ public class WebMVCSecurity extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { - http.authorizeRequests().anyRequest().authenticated().and().httpBasic(); + http + .authorizeRequests() + .anyRequest() + .authenticated() + .and() + .httpBasic() + ; } } From 52911fede4c93f1ae7ab2f561778df335149712c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Mon, 26 Sep 2016 14:01:52 +0200 Subject: [PATCH 38/41] Remove module and try-catch (#701) * Add new module for mocks comparison. * Add sources for testing. * Changes on testCase. * Enter some tests for mockito. * More tests for Mockito. * Even more tests. * Add the rest of the mocking libraries. * Javadoc on test. * Test bare bones for EasyMock. * Fist kind of test and setup. * Add tests using EasyMock with a change on LoginService. * Create LoginControllerTest.java * Test setup * [JMockit] No method called test. * [JMockit] Two methods called test. * [JMockit] One method called test. * [JMockit] Exception mock test * [JMockit] Mocked object to pass around test. * [JMockit] Custom matcher test. * [JMockit] Partial mocking test. * [JMockit] Fix with IDE. * Not stubs. Mocks. MOCKS!!! * Remove unnecesary import. * Use correct encoding. Was having problems with buildings. * Remove failing module. * Create new module mocks and move mock-comparisons there. * Add jmockit module. * Add model class. * Add collaborator class. * Add performer class. * Add performer test. * Fix * Add interface for tests. * Test for any. * Test for with. * Test for null. * Test for times. * Test for arg that. * Test for result and returns. * Test for delegate. * Add verifications to any tests. * Add verifications to with test. * Add verification examples to methods using null. * Add verifications to methods using times. * Formatting. * Compress tests and fix one test. * Adding new article to readme. * [BAEL-178] Add collaborator for advanced article. * [BAEL-178] Add link to readme. * [BAEL-178] Add test for mockUp. * [BAEL-178] Add test for invoke method. * [BAEL-178] Add constructors and tests for mockup for constructors. * [BAEL-178] Add private fields and more test for deencapsulation. * [BAEL-178] Add inner class and test for instantiating inner classes. * [BAEL-178] Multimocks. * [BAEL-178] Add test for expectation reusing. * [BAEL-178] Move test class to tests folders. * Add postgresql dependency. * Add test and config with properties. * [BAEL-114] Add new project for JPA with JNDI. * [BAEL-114] Config without xml. * [BAEL-114] Bring part of Foo, FooServie and FooDao. * [BAEL-114] Show all foos. * [BAEL-114] Readme. * [BAEL-114] Undo changes on main jpa project. * [BAEL-114] Remove unnecesary dependencies. * [BAEL-114] Add tomcat config. * [BAEL-114] Fixes. * Add tests for Optional streams. * Add Java 9 version of the test. * Rename and move to new core-java-9 module. * Move contents from spring-jpa-jndi to spring-jpa and make necessary changes. * Do not use try-catch on configuration. --- spring-jpa-jndi/.gitignore | 13 -- spring-jpa-jndi/README.md | 7 - spring-jpa-jndi/pom.xml | 145 ------------------ .../org/baeldung/persistence/dao/FooDao.java | 22 --- .../org/baeldung/persistence/model/Foo.java | 34 ---- .../persistence/service/FooService.java | 22 --- .../src/main/resources/logback.xml | 20 --- spring-jpa/pom.xml | 33 ++++ .../config/PersistenceJNDIConfig.java | 10 +- .../org/baeldung/config/SpringWebConfig.java | 0 .../org/baeldung/config/WebInitializer.java | 0 .../java/org/baeldung/web/MainController.java | 0 .../src/main/resources/context.xml | 0 .../resources/persistence-jndi.properties | 0 .../src/main/resources/server.xml | 0 .../main/webapp/WEB-INF/views/jsp/index.jsp | 0 16 files changed, 36 insertions(+), 270 deletions(-) delete mode 100644 spring-jpa-jndi/.gitignore delete mode 100644 spring-jpa-jndi/README.md delete mode 100644 spring-jpa-jndi/pom.xml delete mode 100644 spring-jpa-jndi/src/main/java/org/baeldung/persistence/dao/FooDao.java delete mode 100644 spring-jpa-jndi/src/main/java/org/baeldung/persistence/model/Foo.java delete mode 100644 spring-jpa-jndi/src/main/java/org/baeldung/persistence/service/FooService.java delete mode 100644 spring-jpa-jndi/src/main/resources/logback.xml rename {spring-jpa-jndi => spring-jpa}/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java (90%) rename {spring-jpa-jndi => spring-jpa}/src/main/java/org/baeldung/config/SpringWebConfig.java (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/java/org/baeldung/config/WebInitializer.java (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/java/org/baeldung/web/MainController.java (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/resources/context.xml (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/resources/persistence-jndi.properties (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/resources/server.xml (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/webapp/WEB-INF/views/jsp/index.jsp (100%) diff --git a/spring-jpa-jndi/.gitignore b/spring-jpa-jndi/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/spring-jpa-jndi/.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/spring-jpa-jndi/README.md b/spring-jpa-jndi/README.md deleted file mode 100644 index 6a99253545..0000000000 --- a/spring-jpa-jndi/README.md +++ /dev/null @@ -1,7 +0,0 @@ -========= - -## Spring JPA using JNDI Project - - -### Relevant Articles: -- [Spring Persistence (Hibernate and JPA) with a JNDI datasource](http://www.baeldung.com/spring-jpa-fndi) \ No newline at end of file diff --git a/spring-jpa-jndi/pom.xml b/spring-jpa-jndi/pom.xml deleted file mode 100644 index f7042f2384..0000000000 --- a/spring-jpa-jndi/pom.xml +++ /dev/null @@ -1,145 +0,0 @@ - - 4.0.0 - - com.baeldung - spring-jpa-jndi - 0.1-SNAPSHOT - war - - spring-jpa-jndi - - - - - - - org.springframework - spring-orm - ${org.springframework.version} - - - org.springframework - spring-context - ${org.springframework.version} - - - org.springframework - spring-webmvc - ${org.springframework.version} - - - - - javax.servlet - jstl - ${javax.servlet.jstl.version} - - - javax.servlet - servlet-api - ${javax.servlet.servlet-api.version} - - - - - - org.hibernate - hibernate-entitymanager - ${hibernate.version} - - - xml-apis - xml-apis - 1.4.01 - - - org.javassist - javassist - ${javassist.version} - - - org.springframework.data - spring-data-jpa - ${spring-data-jpa.version} - - - - - - org.hibernate - hibernate-validator - ${hibernate-validator.version} - - - javax.el - javax.el-api - 2.2.5 - - - - - - spring-jpa-jndi - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - src/main/webapp - false - - - - - - - - - - 4.3.2.RELEASE - 3.20.0-GA - - - 1.2 - 2.5 - - - 4.3.11.Final - 1.8.2.RELEASE - 1.4.192 - - - 1.7.13 - 1.1.3 - - - 5.2.2.Final - - - 3.5.1 - 2.7 - 2.4 - - - - - \ No newline at end of file diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/dao/FooDao.java b/spring-jpa-jndi/src/main/java/org/baeldung/persistence/dao/FooDao.java deleted file mode 100644 index 0133a36a14..0000000000 --- a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/dao/FooDao.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.baeldung.persistence.dao; - -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - -import org.baeldung.persistence.model.Foo; -import org.springframework.stereotype.Repository; - -@Repository -public class FooDao { - - @PersistenceContext - private EntityManager entityManager; - - @SuppressWarnings("unchecked") - public List findAll() { - return entityManager.createQuery("from " + Foo.class.getName()).getResultList(); - } - -} diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/model/Foo.java b/spring-jpa-jndi/src/main/java/org/baeldung/persistence/model/Foo.java deleted file mode 100644 index d351fc54b8..0000000000 --- a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/model/Foo.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.baeldung.persistence.model; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; - -@Entity -public class Foo { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - @Column(name = "ID") - private long id; - @Column(name = "NAME") - private String name; - - public long getId() { - return id; - } - - public void setId(final int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } -} diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/service/FooService.java b/spring-jpa-jndi/src/main/java/org/baeldung/persistence/service/FooService.java deleted file mode 100644 index a3109f5042..0000000000 --- a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/service/FooService.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.baeldung.persistence.service; - -import java.util.List; - -import org.baeldung.persistence.dao.FooDao; -import org.baeldung.persistence.model.Foo; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@Transactional -public class FooService { - - @Autowired - private FooDao dao; - - public List findAll() { - return dao.findAll(); - } - -} diff --git a/spring-jpa-jndi/src/main/resources/logback.xml b/spring-jpa-jndi/src/main/resources/logback.xml deleted file mode 100644 index 1146dade63..0000000000 --- a/spring-jpa-jndi/src/main/resources/logback.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-jpa/pom.xml b/spring-jpa/pom.xml index 5acdae7765..ebb9c5bc83 100644 --- a/spring-jpa/pom.xml +++ b/spring-jpa/pom.xml @@ -4,6 +4,7 @@ com.baeldung spring-jpa 0.1-SNAPSHOT + war spring-jpa @@ -21,6 +22,11 @@ spring-context ${org.springframework.version} + + org.springframework + spring-webmvc + ${org.springframework.version} + @@ -73,6 +79,18 @@ javax.el-api 2.2.5 + + + + javax.servlet + jstl + ${javax.servlet.jstl.version} + + + javax.servlet + servlet-api + ${javax.servlet.servlet-api.version} + @@ -147,6 +165,16 @@ 1.8 + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + src/main/webapp + false + + org.apache.maven.plugins @@ -197,6 +225,10 @@ 5.1.38 1.10.2.RELEASE 1.4.192 + + + 1.2 + 2.5 1.7.13 @@ -224,6 +256,7 @@ 2.19.1 2.7 1.4.18 + 2.4 diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java b/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java similarity index 90% rename from spring-jpa-jndi/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java rename to spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java index 7ea731d9d4..7f28c958f1 100644 --- a/spring-jpa-jndi/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java +++ b/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java @@ -36,7 +36,7 @@ public class PersistenceJNDIConfig { } @Bean - public LocalContainerEntityManagerFactoryBean entityManagerFactory() { + public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException { final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource()); em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); @@ -46,12 +46,8 @@ public class PersistenceJNDIConfig { } @Bean - public DataSource dataSource() { - try { - return (DataSource) new JndiTemplate().lookup(env.getProperty("jdbc.url")); - } catch (NamingException e) { - throw new IllegalArgumentException("Error looking up JNDI datasource", e); - } + public DataSource dataSource() throws NamingException { + return (DataSource) new JndiTemplate().lookup(env.getProperty("jdbc.url")); } @Bean diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/config/SpringWebConfig.java b/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java similarity index 100% rename from spring-jpa-jndi/src/main/java/org/baeldung/config/SpringWebConfig.java rename to spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/config/WebInitializer.java b/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java similarity index 100% rename from spring-jpa-jndi/src/main/java/org/baeldung/config/WebInitializer.java rename to spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/web/MainController.java b/spring-jpa/src/main/java/org/baeldung/web/MainController.java similarity index 100% rename from spring-jpa-jndi/src/main/java/org/baeldung/web/MainController.java rename to spring-jpa/src/main/java/org/baeldung/web/MainController.java diff --git a/spring-jpa-jndi/src/main/resources/context.xml b/spring-jpa/src/main/resources/context.xml similarity index 100% rename from spring-jpa-jndi/src/main/resources/context.xml rename to spring-jpa/src/main/resources/context.xml diff --git a/spring-jpa-jndi/src/main/resources/persistence-jndi.properties b/spring-jpa/src/main/resources/persistence-jndi.properties similarity index 100% rename from spring-jpa-jndi/src/main/resources/persistence-jndi.properties rename to spring-jpa/src/main/resources/persistence-jndi.properties diff --git a/spring-jpa-jndi/src/main/resources/server.xml b/spring-jpa/src/main/resources/server.xml similarity index 100% rename from spring-jpa-jndi/src/main/resources/server.xml rename to spring-jpa/src/main/resources/server.xml diff --git a/spring-jpa-jndi/src/main/webapp/WEB-INF/views/jsp/index.jsp b/spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp similarity index 100% rename from spring-jpa-jndi/src/main/webapp/WEB-INF/views/jsp/index.jsp rename to spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp From b576a4da400e98607648325c404800391cd23991 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 26 Sep 2016 14:50:24 +0200 Subject: [PATCH 39/41] Fixed pom.xml --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8115c1e902..33162777b7 100644 --- a/pom.xml +++ b/pom.xml @@ -91,7 +91,6 @@ spring-hibernate3 spring-hibernate4 spring-jpa - spring-jpa-jndi spring-katharsis spring-mockito spring-mvc-java From 7aaae1d1433995ffd5a25a5d24d817a1bc072737 Mon Sep 17 00:00:00 2001 From: Nancy Bosecker Date: Mon, 26 Sep 2016 22:40:46 -0700 Subject: [PATCH 40/41] 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 41/41] 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 ```